Сайт | Скачать | Видео | Wiki

Автор Тема: Универсальный initrd с меню  (Прочитано 1097 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Универсальный initrd с меню
« : 08 Апрель 2017, 12:22:48 »
Нужна мультизагрузка (т.е. с одного носителя загружать несколько систем с выбором)
Средствами Uboot пока не получается
Остается универсальный, но костыльный метод - сделать меню в инитрд и через установку переменный 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
3. etx4 раздел с LABEL(меткой раздела) LAB и скопировать корень LAB
4. etx4 раздел с LABEL(меткой раздела) ALEXELEC_DISK . kernel.img AlexElec скопировать в NAND (/dev/data)
Количество устанавливаемых систем может быть любым (потребует правки s905_autoscript и /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 из этой ветки форума
« Последнее редактирование: 10 Май 2017, 11:50:21 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #1 : 27 Апрель 2017, 08:59:00 »
http://www.opennet.ru/opennews/art.shtml?num=46458
Цитировать
Добавлена поддержка новых платформ: ARM (U-Boot и EFI
Т.е. можно прикрутить в s905 grub2?
Если бы прикрутить в s905_autoscript загрузку  grub - было бы идеально и костыли с меню в инитрд не нужны
Надо изучить...

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #2 : 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....
Где бы такое взять....

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #3 : 28 Апрель 2017, 14:02:45 »
В 2017.04 сборках 2A и LAB упростил универсальный initrd с меню. Обошелся одним универсальным mInitrd
Подробности в шапке

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #4 : 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  :'(

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #5 : 28 Апрель 2017, 16:21:34 »
Так нормально?
Нет. Похоже самое простое вернуть показ меню по дефолту - как было в первой альфе. А при fw_setenv  menu off - наоборот отключать меню инитрд

Пока я не исправил - в аттаче простой загрузчик без меню
Разархивируйте его и замените на fat разделе

Оффлайн balbes150

  • Постоялец
  • ***
  • Сообщений: 102
  • Репутация: +1/-0
Re: Универсальный initrd с меню
« Ответ #6 : 29 Апрель 2017, 16:04:09 »
Проверил. сейчас работает.
Кстати, я понял откуда чёрный цвет - это сама картинка с ArhcLinux, надо ее попробовать отредактировать или прикрутить другую обоину.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #7 : 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 надо выкладывать без мультизагрузки
Не стоит усложнять. Не всем это нужно . Все равно по мультизагрузке нужна  доп. инфа.

Оффлайн balbes150

  • Постоялец
  • ***
  • Сообщений: 102
  • Репутация: +1/-0
Re: Универсальный initrd с меню
« Ответ #8 : 01 Май 2017, 11:57:06 »
- но практически вообще не грузится
При первом старте переменной нет (вообще нет). Поэтому проверка всегда даст ошибку и всё остальное в строке не выполняется. Попробуй перенести дефолтное в else, а в then можно использовать echo для вывода сообщения.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #9 : 02 Май 2017, 09:09:35 »
Попробуй перенести дефолтное в else
Раз test -z не работает - пожалуй это единственный вариант. К последнему then приделать else. Попробую

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #10 : 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 (или включить в автозагрузке см. на скрине справа внизу)

Оффлайн balbes150

  • Постоялец
  • ***
  • Сообщений: 102
  • Репутация: +1/-0
Re: Универсальный initrd с меню
« Ответ #11 : 08 Май 2017, 14:50:21 »
Где бы такое взять....
В 4.11 тестовом ядре вывод работает без fbset.

Кстати, в OpenSUSE есть GRUB с выбором систем, но все равно работает через консоль UART, без нее вывода нет и нет выбора.
ИМХО до тех пор, пока не будет прикручен вывод и управление USB к u-boot, твой вариант с промежуточной системой наверное единственно рабочий.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #12 : 09 Май 2017, 09:31:19 »
до тех пор, пока не будет прикручен вывод и управление USB к u-boot, твой вариант с промежуточной системой наверное единственно рабочий.
Т.е. пробовать новое ядро нет смысла и надо делать доку и дорабатывать мой костыль ?

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

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

Изменить паузу можно в /initrd-menu (без пересборки initrd)
timeout 5 /keyВ img я в итоге по умолчанию сделал без меню , т.е. попроще
« Последнее редактирование: 09 Май 2017, 09:33:15 от sfs »

Оффлайн balbes150

  • Постоялец
  • ***
  • Сообщений: 102
  • Репутация: +1/-0
Re: Универсальный initrd с меню
« Ответ #13 : 09 Май 2017, 11:02:00 »
Т.е. пробовать новое ядро нет смысла и надо делать доку и дорабатывать мой костыль ?
Там разница только в том, с какого момента начинается отображаться вывод на экране, но это уже когда нужное ядро стартовало.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 20162
  • Репутация: +147/-0
    • PuppyRus-A
Re: Универсальный initrd с меню
« Ответ #14 : 09 Май 2017, 11:13:09 »
Если там после загрузки ядра экран уже работает (без доп. скриптов)- можно пробовать и меню uboot и grub
Работает ?