Форум проекта PuppyRus Linux

Обсуждения операционных систем => Процессоры ARM архитектуры => Ядро Linux ARM, .dtb, uboot, initrd => Тема начата: sfs от 08 Апрель 2017, 12:22:48

Название: Универсальный initrd с меню
Отправлено: sfs от 08 Апрель 2017, 12:22:48
Нужна мультизагрузка (т.е. с одного носителя загружать несколько систем с выбором)
Средствами Uboot пока не получается (http://forum.puppyrus.org/index.php?topic=19815.msg131485#msg131485)
Остается универсальный, но костыльный метод - сделать меню в инитрд и через установку переменный uboot командой fw_setenv передать ядру. Сделал http://file.puppyrus.org/users/amlogic-s9xx/initrd-multi-170504.tar.xz

Можно доработать любой initrd
arch initrd - меньше , т.к. без модулей ядра. Работает только с арчем (не разбирался)
ubuntu работает с арчем и юбунту. Выкинул из него модули ядра и все сетевое
1. Чтобы что-то увидеть на экране  S905 - надо запустить скрипт amlogics905x_init.sh. По крайней мере с ядром , которое пока использую
2. Загрузить рус. шрифт ter-u16n.psf
3. Вывести меню.
Здесь хитро:
Код
/bin/stty raw;  /bin/dd bs=1 count=1 2>/dev/null >/key1; /bin/stty -raw
и эти бинарники + timeout надо добавить в /bin
Проверить что они работают можно в chroot

Разметка носителя (например, gparted):
1. Обязательно создать boot раздел fat32. Разместить на нем ядро, инитрд, s905_autoscript и пр. (при установке любого дистрибутива п. 1,2 уже будет выполнены)
2. etx4 раздел с LABEL(меткой раздела) ROOTFS и скопировать корень 2A (http://forum.puppyrus.org/index.php?topic=19826.0)
3. etx4 раздел с LABEL(меткой раздела) LAB и скопировать корень LAB (http://forum.puppyrus.org/index.php?topic=19840.0)
4. etx4 раздел с LABEL(меткой раздела) ALEXELEC_DISK . kernel.img AlexElec скопировать в NAND (/dev/data)
Количество устанавливаемых систем может быть любым (потребует правки s905_autoscript (http://wiki.puppyrus.org/arm/u-boot#s905_autoscript_-_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B8_initrd) и /initrd-menu)
Название меток и размещение kernel.img *Elec тоже можно менять (тоже придется править)
Возможна установка других линуксов (кроме 2A и LAB). Возможно, придется использовать initrd из их комплекта

По умолчанию загрузится 2A.
Для загрузки по умолчанию LAB - поменяйте LABEL
Для загрузки по умолчанию Elec - допишите в начало s905_autoscript : satenv ose e

Само меню (на read) ,чтобы не пересобирать initrd, вынес в /initrd-menu
Можно добавить выбор дистра, стоящего в корне раздела и т.п.
Меню активируется при sudo fw_setenv menu on. Т.е. кому не нужно - можно выключить: sudo fw_setenv menu
Используется в дистрибутивах 2А и LAB из этой ветки форума
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 27 Апрель 2017, 08:59:00
http://www.opennet.ru/opennews/art.shtml?num=46458
Цитата
Добавлена поддержка новых платформ: ARM (U-Boot и EFI
Т.е. можно прикрутить в s905 grub2?
Если бы прикрутить в s905_autoscript загрузку  grub - было бы идеально и костыли с меню в инитрд не нужны
Надо изучить...
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 27 Апрель 2017, 10:09:23
По груб https://wiki.linaro.org/LEG/Engineering/Kernel/GRUBonUBOOT
https://www.hellion.org.uk/blog/posts/grub-on-uboot-on-qemu/

https://github.com/atgreen/u-boot-moxie/blob/master/doc/README.bootmenu
Вроде можно меню и средствами uboot. Но его как минимум с имеющимся ядром не будет видно...
То же и с grub
http://www.denx.de/wiki/DULG/Manual есho есть, а fbset нет
Получается надо ядро , которое не требует http://forum.puppyrus.org/index.php?topic=19835.0 и разрешение выставляется в uboot....
Где бы такое взять....
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 28 Апрель 2017, 14:02:45
В 2017.04 сборках 2A и LAB упростил универсальный initrd с меню. Обошелся одним универсальным mInitrd
Подробности в шапке
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 28 Апрель 2017, 14:48:40
Посмотрел скрипт s905_autoscript  - причина в нём, там используется переменная, которая в чистой системе не определена, нужно добавить вариант дефолта, когда система еще не содержит ни каких переменных.
Код
if test ${os} = e; then setenv os m; setenv ose e; saveenv; fi;
setenv os m; saveenv; setenv rootfs "LABEL=ROOTFS";
setenv bootrootfs " boot=/dev/data disk=LABEL=ALEXELEC_DISK BOOT_IMAGE=kernel.img hdmitx=cecf "
Да. Добавил в середину строку , которая загрузит линукс с ROOTFS при первом старте
Так нормально? Надо править и перезаливать img  :'(
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 28 Апрель 2017, 16:21:34
Так нормально?
Нет. Похоже самое простое вернуть показ меню по дефолту - как было в первой альфе. А при fw_setenv  menu off - наоборот отключать меню инитрд

Пока я не исправил - в аттаче простой загрузчик без меню
Разархивируйте его и замените на fat разделе
Название: Re: Универсальный initrd с меню
Отправлено: balbes150 от 29 Апрель 2017, 16:04:09
Проверил. сейчас работает.
Кстати, я понял откуда чёрный цвет - это сама картинка с ArhcLinux, надо ее попробовать отредактировать или прикрутить другую обоину.
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 30 Апрель 2017, 08:44:16
Проверил. сейчас работает.
Код
setenv os m; saveenv; setenv rootfs "LABEL=ROOTFS"
так арч загружаться будет, но меню работать не будет
Теоретически должно работать так
Код
if test -z ${os} ; then setenv os m; saveenv;setenv rootfs "LABEL=ROOTFS"setenv rootfs "LABEL=ROOTFS"; fi;
- но практически вообще не грузится
Опять проблемы из-за того что на этой стадии экран не работает. Нет ли ядер с таким функционалом? Тогда возможно получится убрать костыли

По итогу склоняюсь к тому что img надо выкладывать без мультизагрузки
Не стоит усложнять. Не всем это нужно . Все равно по мультизагрузке нужна  доп. инфа.
Название: Re: Универсальный initrd с меню
Отправлено: balbes150 от 01 Май 2017, 11:57:06
- но практически вообще не грузится
При первом старте переменной нет (вообще нет). Поэтому проверка всегда даст ошибку и всё остальное в строке не выполняется. Попробуй перенести дефолтное в else, а в then можно использовать echo для вывода сообщения.
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 02 Май 2017, 09:09:35
Попробуй перенести дефолтное в else
Раз test -z не работает - пожалуй это единственный вариант. К последнему then приделать else. Попробую
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 04 Май 2017, 14:44:26
Починил http://file.puppyrus.org/users/amlogic-s9xx/initrd-multi-170504.tar.xz
С else получилось

На всякий случай в LAB и 2А оставил одиночную загрузку (т.е. в меню initrd будет работать только пункт "консоль"). Включить мультизагрузку - заменить s905_autoscript на s905_autoscript-multi + sudo fw_setenv menu (или включить в автозагрузке см. на скрине (http://forum.puppyrus.org/index.php?topic=19826.msg131491#msg131491) справа внизу)
Название: Re: Универсальный initrd с меню
Отправлено: balbes150 от 08 Май 2017, 14:50:21
Где бы такое взять....
В 4.11 тестовом ядре вывод работает без fbset.

Кстати, в OpenSUSE есть GRUB с выбором систем, но все равно работает через консоль UART, без нее вывода нет и нет выбора.
ИМХО до тех пор, пока не будет прикручен вывод и управление USB к u-boot, твой вариант с промежуточной системой наверное единственно рабочий.
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 09 Май 2017, 09:31:19
до тех пор, пока не будет прикручен вывод и управление USB к u-boot, твой вариант с промежуточной системой наверное единственно рабочий.
Т.е. пробовать новое ядро нет смысла и надо делать доку и дорабатывать мой костыль ?

Может стоит увеличить время ожидания хотя бы до 30 секунд ?

Меню не так часто нужно. Оптимально грузить дефолт. Изменить его - самое простое - изменить метку раздела на ROOTFS. Если нужен по дефолту elec - простого решения пока не нашел

Изменить паузу можно в /initrd-menu (без пересборки initrd)
Код
timeout 5 /key
В img я в итоге по умолчанию сделал без меню , т.е. попроще
Название: Re: Универсальный initrd с меню
Отправлено: balbes150 от 09 Май 2017, 11:02:00
Т.е. пробовать новое ядро нет смысла и надо делать доку и дорабатывать мой костыль ?
Там разница только в том, с какого момента начинается отображаться вывод на экране, но это уже когда нужное ядро стартовало.
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 09 Май 2017, 11:13:09
Если там после загрузки ядра экран уже работает (без доп. скриптов)- можно пробовать и меню uboot и grub
Работает ?
Название: Re: Универсальный initrd с меню
Отправлено: balbes150 от 09 Май 2017, 15:51:09
Ядро работает сразу без утилиты fbset, но ... повторю, это когда само ядро стартовало, а задача на этапе передачи запуска нужному ядру получить вывод на экран и возможность выбрать - какое ядро запускать. То бишь нужно научить u-boot быть полноценным промежуточным ядром (кстати, u-boot это и есть урезанное ядро, которое умеет запускать другие).
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 10 Май 2017, 09:01:27
Да. Чего-то торможу. Изображение надо до загрузки ядра. Т.е. ядро не поможет
Я правильно понял - в uboot и grub перспектив не просматривается. Надо доводить мое решение?
Название: Re: Универсальный initrd с меню
Отправлено: sfs от 10 Май 2017, 11:43:54
Добавил в шапке "Разметка носителя"
Кто-нибудь использует initrd с меню ? В шапке все понятно?