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

Автор Тема: Установка Linux на внешний носитель (SD и USB).  (Прочитано 17329 раз)

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

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #15 : 04 Апрель 2017, 15:10:31 »
amlogics905x_init.sh - скрипт активации монитора с настройками. Почему он не в initrd? Я так понимаю из-за этого хоть какое-то изображение появляется на монике только после rc.local
Засунул в начало initrd. Сразу после монтирования sys и пр.
Теперь загрузка не вслепую и можно замутить через read меню загрузки и т.п.
Остро не хватает aufs ядра  :'(
Потому, что тогда обычному пользователю, для изменения разрешения придётся выполнить руками кучу специфичных команд. И далеко не факт, что после этого система запуститься.
Ну так в rc.local можно еще раз его запустить. Причем явно просится конфиг и gui - надо сделать


Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #16 : 06 Апрель 2017, 09:09:59 »
Приделал в инитрд рус. язык и выход в меню при нажатии любой клавиши во время загрузки
В этом меню выход в sh для дебага и можно добавить выбор дистра (через замену s905_autoscript)
Тогда надо это меню в инитрд всех дистров встроить

Арч загружается с инитрд юбунты. наоборот - нет

Кстати в arch-initrd нет модулей ядра. Т.е. в ядре достаточно вкомпилено молонитно для загрузки с флэша
« Последнее редактирование: 06 Апрель 2017, 09:12:10 от sfs »

Оффлайн balbes150

  • Ветеран
  • *****
  • Сообщений: 599
  • Репутация: +5/-0
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #17 : 08 Апрель 2017, 11:38:47 »
Тогда имея несколько s905_autoscript - можно загружать несколько систем
Не обязательно делать несколько скриптов, можно всё нужное прописать в одном. Есть возможность создавать дополнительные переменные в u-boot, которые могут выступать в роли тригеров для выбора. Скрипт проверяет переменную, если она содержит либо 0\1 , либо может сразу содержать имя нужного образа, по результату выполняет нужное.
Нельзя этот скрипт в uinitrd перенести?
Можно.
Причем явно просится конфиг и gui - надо сделать
Такая идея давно есть, но нет времени на всё. Если сделаешь, включу во все образы.
Тогда надо это меню в инитрд всех дистров встроить
Давай файлы или описание , что добавить\изменить, включу в сборку.
Арч загружается с инитрд юбунты. наоборот - нет

Кстати в arch-initrd нет модулей ядра. Т.е. в ядре достаточно вкомпилено молонитно для загрузки с флэша
Если не грузиться - значит чего-то не хватает. Давай файлы , проверю у себя через консоль UART.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #18 : 08 Апрель 2017, 12:00:23 »
Не обязательно делать несколько скриптов, можно всё нужное прописать в одном. Есть возможность создавать дополнительные переменные в u-boot, которые могут выступать в роли тригеров для выбора. Скрипт проверяет переменную, если она содержит либо 0\1 , либо может сразу содержать имя нужного образа, по результату выполняет нужное.
Не понял...
Допустим есть флэш с двумя дистрами в 2х разделах с метками ROOTFS1 ROOTFS2
Как-то можно организовать их выбор юзером средствами uboot?
Сделать это в инитрд у меня почти получилось

Gui смены разрешения - ок сделаю на yad
initrd c меню - сейчас сделаю отдельную тему и выложу

Оффлайн balbes150

  • Ветеран
  • *****
  • Сообщений: 599
  • Репутация: +5/-0
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #19 : 08 Апрель 2017, 12:41:06 »
Как-то можно организовать их выбор юзером средствами uboot?
Я про то, что не нужны десять скриптов. Условно, есть два набора ядра\инитрд\(можно иметь один общий или для каждой системы свои dtb) и своя rootfs. В u-boot создаётся новая переменная или несколько (по необходимости), которая может иметь два состояния 1 или 0 (или вообще может содержать текст с именем метки, командной строки и прочего). Скрипт при старте проверяет эту переменную и в зависимости от значения устанавливает все остальные значения запуска под одну или вторую систему и запускает ту или иную системы. Установка этой переменной может быть выполнена при выключении в обоих системах. То бишь так, как в LE запущенном с внешнего носителя, можно указать в менюшке выключения, просто выключить, перезагрузить, или перезагрузить с запуском системы не с внешнего носителя, а с внутренней памяти без отсоединения носителя. Либо можно сделать выбор системы в общем initrd и перезапуск ТВ бокса, что-бы стартовала с нужным ядром новая система, иначе ядро будет всегда одно на всех, что не всегда подходит.


п.с. пробовал редактировать вики - не пускает, типа не хватает прав.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #20 : 08 Апрель 2017, 12:48:14 »
Установка этой переменной может быть выполнена при выключении в обоих системах.
Как это сделать?
вики - не пускает, типа не хватает прав.
На создание нового файла или редактирование? Какого именно?

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #21 : 08 Апрель 2017, 13:06:59 »
Gui смены разрешения - ок сделаю на yad
У меня в arch amlogics905x_init.sh нормально меняет разрешение только с перезагрузкой Х
Добавить killall Xorg в гуй?

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #22 : 08 Апрель 2017, 19:13:45 »
Используется sudo (надо настроить) и yad

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #23 : 09 Апрель 2017, 13:37:03 »
В u-boot создаётся новая переменная
Нашел: fw_printenv fw_setenv
Засунуть их в инитрд и можно управляьть из него (чтобы не ждать пока система загрузится)
Теперь совсем понятно. Про мультизагрузочную флэшку

Оффлайн balbes150

  • Ветеран
  • *****
  • Сообщений: 599
  • Репутация: +5/-0
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #24 : 09 Апрель 2017, 18:42:11 »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #25 : 09 Апрель 2017, 23:19:15 »
/dev/nand_env - в арче такого нет, но без него работает

А из initrd fw_* не работают  :'(
Придется сделать несколько s905_autoscript и через их копирование  выбирать нужную систему в инитрд

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33967
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #26 : 10 Апрель 2017, 16:55:07 »
А из initrd fw_* не работают
Лечится mkdir -p /var/lock

В итоге сделал мультизагрузку:
Загружается mInitrd с меню выбора систем. По тайм-ауту 5 сек - грузит 1й пункт
После выбора - reboot + грузит выбранную систему. После перезагрузки опять mInitrd
Все через выставление uboot переменной os
Для каждого линукса нужен свой раздел на носителе rootfs=
В *Elec SYSTEM  можно скопировать в NAND
Таким образом на одном носителе сколько угодно дистров с выбором
Код
# cat s905_autoscript.cmd 
if test ${bootfromrecovery} = 1; then setenv bootfromrecovery 0; saveenv; run update; fi;
if test ${bootfromnand} = 1; then setenv bootfromnand 0; saveenv; run storeboot; fi;
if test ${os} = m; then              setenv ose m; saveenv; setenv rootfs "LABEL=ROOTFS"; setenv initrd m; fi;
if test ${os} = a; then setenv os m; setenv ose a; saveenv; setenv rootfs "LABEL=ROOTFS${ose}"; setenv initrd a; fi;
if test ${os} = u; then setenv os m; setenv ose u; saveenv; setenv rootfs "LABEL=ROOTFS${ose}"; setenv initrd u; fi;
if test ${os} = e; then setenv os m; setenv ose e; saveenv; fi;
setenv bootrootfs " boot=/dev/data disk=LABEL=ALEXELEC_DISK BOOT_IMAGE=kernel.img hdmitx=cecf "
if test ${ose} = e; then setenv bootargs ${bootrootfs} ${bootargs}; fi;
setenv usbdtb "if fatload usb 0 ${dtb_mem_addr} dtb.img; then echo usb dtb.img loaded; else store dtb read $dtb_mem_addr; fi;"
setenv sddtb "if fatload mmc 0 ${dtb_mem_addr} dtb.img; then echo sd dtb.img loaded; else store dtb read $dtb_mem_addr; fi;"
setenv le_usb "if fatload usb 0 ${loadaddr} kernel.img; then run usbdtb; wipeisb; bootm ${loadaddr}; fi;"
setenv le_sd "if fatload mmc 0 ${loadaddr} kernel.img; then run sddtb; wipeisb; bootm ${loadaddr}; fi;"
if test ${ose} = e; then run le_usb; fi;
if test ${ose} = e; then run le_sd; fi;
setenv kernel_loadaddr "0x11000000"
setenv initrd_loadaddr "0x13000000"
setenv condev "console=ttyS0,115200n8 console=tty0 no_console_suspend consoleblank=0"
setenv boot_start booti ${kernel_loadaddr} ${initrd_loadaddr} ${dtb_mem_addr}
setenv bootargs "root=${rootfs} rootflags=data=writeback rw ${condev} fsck.repair=yes net.ifnames=0 mac=${mac}"
if fatload usb 0 ${initrd_loadaddr} ${initrd}Initrd; then if fatload usb 0 ${kernel_loadaddr} zImage; then if fatload usb 0 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;
if fatload mmc 0 ${initrd_loadaddr} ${initrd}Initrd; then if fatload mmc 0 ${kernel_loadaddr} zImage; then if fatload mmc 0 ${dtb_mem_addr} dtb.img; then run boot_start; else store dtb read ${dtb_mem_addr}; run boot_start;fi;fi;fi;

Не очень понятно с dtb.img - его нет , но все работает. Не стал убирать
Можно оптимизировать - $initrd убрать - обойтись $ose
« Последнее редактирование: 10 Апрель 2017, 16:58:54 от sfs »

Оффлайн balbes150

  • Ветеран
  • *****
  • Сообщений: 599
  • Репутация: +5/-0
Re: Установка Linux на внешний носитель (SD и USB).
« Ответ #27 : 12 Апрель 2017, 20:14:11 »
Не очень понятно с dtb.img - его нет , но все работает. Не стал убирать
Если нет на носителе dtb.img, тогда скрипт пытается использовать dtb из внутренней памяти :
store dtb read ${dtb_mem_addr}
Команда store - встроенная команда u-boot, которая выполняет несколько задач, в том числе умеет загружать dtb из внутренней памяти.