понедельник, 6 апреля 2015 г.

Das Uboot: Switching Between Boot Methods


Мотивация
Подобно любому компьютеру, ZyXEL NSA  (далее текст применим к ряду родственных по архитектуре систем, подробный список которых можно найти в  [1, 2])умеет загружать операционную систему с различных дисков: 
встроенного flash небольшой ёмкости и внешнего (массового) накопителя большой ёмкости.  
В компьютерах данной архитектуры используется модуль загрузки Das Uboot [3].
Говоря условно, Das Uboot поддерживает два интересующих нас метода загрузки системы.
Будем называть их  "to Linux"  и "to Stock" .
В зависимости от условий эксплуатации Вашего NAS Вам могут понадобиться оба метода.
to Stock - если Вы используете  NAS как его рекомендует завод;
To Linux - если Вы хотите использовать NAS как платформу для установки любой поддерживаемой версии Linux, например, Arch Linux Arm.
Также может понадобиться вернуться временно или постоянно к "to Stock". 

Цель упражнения
переключить методы загрузки по схеме:
To Linux -> to Stock -> to Linux.

Условия задачи
Мы рассматриваем два состояния (уровня выполнения программ) ZyXEL NSA:
  • Активна (запущена) операционная система Linux / Linux is up and running;
  • Активна программа начальной загрузки / Uboot is running.
Метод загрузки определяется  конфигурационным параметром  Das Uboot Environment[4]

bootcmd

значение которого  сохраняется в энергонезависимой памяти (flash) и используется   Das Uboot[3].
Переключать метод загрузки мы будем при активном состоянии Linux.

Способы доступа к параметрам конфигурации
Параметр bootcmd и другие параметры  Das Uboot Environment  доступны для чтения и редактирования.

Известны следующие способы управления параметрами.
  • Манипулирование с помощью CLI- интерфейса (программ):  fw_setenv / fw_printenv  [3];  
Программы fw_setenv / fw_printenv находятся: в stock-версии Linux в /zyxel/sbin, в третьих сборках (например, Arch Linux Arm) программы необходимо установить.  Пример установки в Arch Linux:

$sudo pacman -Sy uboot-env uboot-mkimage

  • Манипулирование с помощью команд Das Uboot. Для этого необходимо использовать подключение программы terminal к консоли (процессу Uboot) с помощью серийного подключения. Для этого потребуется схема подключения, конвертор serial -> USB  (Serial to USB TTL Converter).

Мы будем рассматривать первый способ как достаточно просто реализуемый.

Редактирование файла конфигурации fw_setenv

Для указания программе  fw_setenv устройства uboot, в котором хранятся конфигурационные параметры, необходимо отредактировать файл конфигурации:

$sudo nano  /etc/fw_env.config

В нём, так как мы работаем с ZyXEL NSA, необходимо создать строку, соответствующую модели uboot для ZyXEL NSA [3]
/dev/mtd1               0x0000          0x20000         0x20000

Сохранение параметра, определяющего способ загрузки, в память uboot
Для активации метода загрузки "to Stock"  выполняем команды:

$sudo  fw_setenv "run to_stock"
$sync
$sudo shutdown -P -h now
Firmware (модуль загрузки) ZyXEL NSA будет загружать заводской образ Linux  и монтировать массовый накопитель.

Для активации метода загрузки "to Linux"  выполняем команды:

$fw_setenv arcNumber 4495
$fw_setenv mainlineLinux yes
$fw_setenv bootargs_stock 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/nfs rw init=/init'
$fw_setenv bootargs_linux 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/sda2 rw rootwait loglevel=8'
$fw_setenv bootcmd_linux 'setenv bootargs $(bootargs_linux); ide reset; ext2load ide 0:1 $(loadaddr) /uImage; bootm $(loadaddr)'
$fw_setenv bootcmd_stock 'setenv bootargs $(bootargs_stock); nand read.e $(loadaddr) $(kernel_addr) 0xA00000; bootm $(loadadr)'
$fw_setenv to_stock "setenv mainlineLinux no; setenv bootcmd \'run bootcmd_stock\'; saveenv; reset"
$fw_setenv to_linux "setenv mainlineLinux yes; setenv bootcmd \'run bootcmd_linux\'; saveenv; reset"
$fw_setenv bootcmd 'run to_linux'

$sync
$sudo shutdown -P -h now

Firmware  ZyXEL NSA будет переходить прямо к загрузке образа системы Linux, установленный на внешний массовый накопитель (/dev/sda1).

Ссылки
1 http://dns323.kood.org/start
2 http://gathering.tweakers.net/forum/list_messages/1545544
3 trweb: ZyXEL NSA325 v2 Arch Linux ARM (ALARM) auf interne SATA HDD installieren und booten
4 Open WRT: Das Uboot Environment

Комментариев нет:

Отправить комментарий