В системах на базе ARM в большинстве случаев используется один из двух форматов загрузочных образов: а) стандартные ядра Linux в формате zImage («vmlinuz») в вместе со стандартными начальными Linux ramdisk («initrd.gz») или б) ядра в формате uImage («uImage») вместе с соответствующими начальными ramdisk («uInitrd»).
uImage/uInitrd — формат образов, разработанный для микропрограммы U-Boot, которая используется во многих системах за основе ARM (по большей части, 32-битных). Старые версии U-Boot позволяли загружать файлы только в формате uImage/uInitrd, поэтому они часто используются в старых системах armel. Новые версии U-Boot — помимо загрузки uImage/uInitrd — также загружают стандартные ядра Linux и образы ramdisk, но синтаксис команды загрузки несколько отличается от работающего на загрузку uImage.
Для систем, использующих мультиплатформенное ядро, помимо ядра и начального ramdisk требуется так называемый файл дерева устройств (device-tree blob, «dtb»). Он уникальный для каждой поддерживаемой системы и содержит описание аппаратуры устройства. Дерево dtb должно содержаться в микропрограмме устройства, но на практике часто требуется загрузить более новое.
В файле .tar netboot (Раздел 5.1.3.2, «Готовый tar-файл netboot») и образах установщика для SD-карты (Раздел 5.1.5, «Использование готовых образов SD-карт с программой установки») используется консоль по умолчанию (зависит от платформы), которая указывается U-Boot в переменной «console». В большинстве случаев, это консоль на последовательном порту, поэтому для работы программы установки на этих платформа вам потребуется консольный кабель последовательного порта.
На платформах с поддержкой видеоконсоли, вы можете изменить переменную U-Boot «console» соответствующим образом, если хотите, чтобы программа установки запускалась на видеоконсоли.
Загрузка по сети требует наличия сетевого подключения и сетевого загрузочного сервера TFTP (и, вероятно, также серверов DHCP, RARP или BOOTP для автоматической настройки по сети).
Настройка сервера для обеспечения загрузки из сети описана в Раздел 4.3, «Подготовка файлов для загрузки по TFTP».
Загрузка по сети в системах, использующих микропрограмму U-Boot, состоит из трёх шагов: а) настройка сети, б) загрузка образов (ядро/начальный ramdisk/dtb) в память и в) исполнение ранее загруженного кода.
Во-первых, нужно настроить сеть, или автоматически по DHCP командой
setenv autoload no dhcp
или вручную указав настройки в переменных окружения
setenv ipaddr <ip address of the client> setenv netmask <netmask> setenv serverip <ip address of the tftp server> setenv dnsip <ip address of the nameserver> setenv gatewayip <ip address of the default gateway>
Если хотите, то можно сделать настройки постоянными с помощью команды
saveenv
После этого нужно загрузить образы (ядро/начальный ramdisk/dtb) в память. Это выполняется с помощью команды tftpboot, которой указывается адрес по которому требуется сохранить образ в память. К сожалению, в разных устройствах карты памяти сильно различаются, поэтому нет общего правила какие адреса следует использовать.
В некоторых системах в U-Boot уже настроены переменные окружения нужными адресами загрузки: kernel_addr_r, ramdisk_addr_r и fdt_addr_r. Вы можете проверить их наличие выполнив
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
Если они не определены, то обратитесь к документации на систему и введите их значения вручную. В системах на основе ЦПУ Allwinner SunXi (например, Allwinner A10, имя архитектуры name «sun4i» или Allwinner A20, имя архитектуры «sun7i»), вы можете, например, использовать следующие значения:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
После определения адресов загрузки вы можете загрузить образы в память с ранее настроенного сервера tftp с помощью команд
tftpboot ${kernel_addr_r} <имя файла образа ядра> tftpboot ${fdt_addr_r} <имя файла dtb> tftpboot ${ramdisk_addr_r} <имя файла начального ramdisk>
Третьим шагом является настройка командной строки ядра и запуск загруженного кода. U-boot передаёт содержимое переменной окружения «bootargs» ядру как командную строку, поэтому все параметры ядра и программы установки — консольное устройство (смотрите Раздел 5.3.1, «Загрузочная консоль») или ответы на вопросы о настройке (смотрите Раздел 5.3.2, «Параметры программы установки Debian» and Приложение B, Автоматическая установка с помощью списка ответов) — можно указать с помощью команды вида
setenv bootargs console=ttyS0,115200 rootwait panic=10
Точная команда для выполнения ранее загруженного кода зависит от используемого формата образа. Для uImage/uInitrd, команда будет
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
, а для родных образов Linux
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
Замечание: При загрузке стандартных образов linux важно загрузить образ начального ramdisk после ядра и dtb так как U-Boot устанавливает переменную filesize равной размеру последнего загруженного файла, а для правильной работы команды bootz требуется размер образа ramdisk. При загрузке специального ядра устройства, то есть ядра без дерева устройств, просто не указывайте параметр ${fdt_addr_r}.
Debian предоставляет собранный tar-файл ( .../images/netboot/netboot.tar.gz ), содержащий всё необходимое для загрузки по сети и который можно просто распаковать на сервере tftp. Также он включает сценарии загрузки, которые автоматизируют все шаги загрузки программы установки. Современные версии U-Boot содержат свойство tftp autoboot, которое активируется, если нет загружаемого локального устройства хранения (MMC/SD, USB, IDE/SATA/SCSI), и загружает этот сценарий загрузки с сервера tftp. Для работы этого свойства нужно, чтобы ваш сервер dhcp в сети предоставил клиенту адрес сервера tftp.
Если вы хотите включить свойство tftp autoboot из командной строки U-Boot, то используйте следующую команду:
run bootcmd_dhcp
Или же можно загрузить сценарий загрузки из tar-файла вручную с помощью следующих команд в приглашении U-Boot:
setenv autoload no dhcp tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr source ${scriptaddr}
Многие современные версии U-Boot поддерживают USB и позволяют выполнять загрузку накопителей USB, например карт памяти USB (флешек). К сожалению, точный шаги для выполнения данной процедуры для разных устройств различаются.
В u-Boot v2014.10 появился общий механизм обработки командной строки и autoboot. Это позволяет собирать единые загрузочные образы, которые работают на любой системе, поддерживающей данный механизм. debian-installer
поддерживает установку с носителей USB для таких систем, но, к сожалению, пока не все платформы переделаны под этот новый механизм.
Чтобы создать загрузочный носитель USB для установки Debian распакуйте tar-архив hd-media (смотрите Раздел 4.2.1, «Where to Find Installation Files») на носитель USB с файловой системой, поддерживаемой версией U-Boot вашего устройства. Современные версии U-Boot, обычно, работают с FAT16 / FAT32 / ext2 / ext3 / ext4. После этого скопируйте на носитель образ ISO первого установочного CD или DVD Debian.
The autoboot framework in modern U-Boot versions works similar to the boot ordering options in a PC BIOS/UEFI, i.e. it checks a list of possible boot devices for a valid boot image and starts the first one it finds. If there is no operating system installed, plugging in the USB stick and powering up the system should result in starting the installer. You can also initiate the USB-boot process any time from the U-Boot prompt by entering the «run bootcmd_usb0» command.
Единственная проблема, которая может возникнуть при загрузке с USB при использовании последовательной консоли — несовпадение скоростей передачи консоли. Если переменная консоли определена в U-Boot, то загрузочный сценарий debian-installer
автоматически передаёт её ядру для настройки первичной консоли устройства и, если уместно, скорость консоли. К сожалению, на разных платформах используется разная переменная консоли — у некоторых она содержит скорость («console=ttyS0,115200»), а у других имеется только устройство («console=ttyS0»). В последнем случае из-за несовпадения скоростей консоли по умолчанию у U-Boot и ядра вывод данных искажается. Современные версии U-Boot часто используют скорость 115200 бод, а ядро по-прежнему работает на традиционных 9600 бод. Если такое произошло, то вы должны задать переменную консоли вручную с правильной скоростью и затем запустить программу установки с помощью команды «run usb_boot».
Для некоторых систем Debian предоставляет образы карты SD, которые содержат U-Boot и debian-installer
вместе. Эти образы предлагаются в двух вариантах — один для скачивания пакетов программ по сети (
.../images/netboot/SD-card-images/
), а другой для их установки с Debian CD/DVD (
.../images/hd-media/SD-card-images/
). Для экономии места и полосы сети, образы состоят из двух частей — системозависимая часть «firmware.<system-type>.img.gz» и универсальная часть «partition.img.gz».
Для создания целого образа из двух частей на системах с Linux вам нужно использовать zcat:
zcat firmware.<system-type>.img.gz partition.img.gz > complete_image.img
На системах с Windows сначала разожмите каждую из двух частей, например, с помощью 7-Zip, а затем в окне Windows CMD.exe соедините расжатые части вместе командой
copy /b firmware.<system-type>.img + partition.img complete_image.img
.
Запишите полученный образ на карту SD, например, командой (на Linux):
cat complete_image.img > /dev/УСТРОЙСТВО_SD_CARD
После вставки карты SD в целевую систему и включения питания, программа установки загрузится с карты SD. Если вы используете вариант hd-media для установки без сети, то нужно предоставить программе установки доступ к первому Debian CD/DVD на отдельном носителе, который может быть, например, образом CD/DVD ISO на карте памяти USB.
Когда программа установки дойдёт до шага разметки (смотрите Раздел 6.3.4, «Разметка разделов и выбор точек монтирования»), вы можете удалить или заменить имеющиеся на этой карте разделы. После запуска программы установки, она полностью выполняется из основной памяти системы и ей больше не требуется доступ к карте SD, поэтому вы можете полностью использовать карту для установки Debian. Самым простым способом создать правильную раскладку разделов на карте SD это позволить программе установки автоматически создать их для вас (смотрите Раздел 6.3.4.2, «Направляющая разметка»).