5.1. Завантаження встановлювача на 32-bit hard-float ARMv7

5.1.1. Формати образів завантаження

На ARM-системах у більшості випадків використовується один з двох форматів завантажувальних образів: а) стандартний zImage-формат ядра Linux («vmlinuz») у поєднанні зі стандартними початковими образами Linux («initrd.gz») або b) ядро у форматі uImage («uImage») у поєднанні з відповідними початковими образами («uInitrd»).

uImage/uInitrd - формати образів, призначені для прошивки U-Boot, яка використовується на багатьох ARM-системах (переважно 32-розрядних). Старіші версії U-Boot можуть завантажувати лише файли у форматі uImage/uInitrd, тому їх часто використовують на старих системах armel. Новіші версії U-Boot можуть - окрім завантаження uImages/uInitrds - також завантажувати стандартні ядра Linux та образи ramdisk, але синтаксис команди для цього дещо відрізняється від синтаксису команди для завантаження uImages.

Для систем з багатоплатформним ядром, окрім ядра і початкового ramdisk, потрібен так званий файл дерева пристроїв (або blob дерева пристроїв, «dtb»). Він специфічний для кожної підтримуваної системи і містить опис конкретного обладнання. dtb має постачатися на пристрій разом з прошивкою, але на практиці часто потрібно завантажувати новішу версію.

5.1.2. Налаштування консолі

У tar-файлі netboot (Розділ 5.1.3.2, «Попередньо збудований тарбол для мережевого завантаження») та образах SD-карток установника (Розділ 5.1.5, «Використання готових образів SD-карт з інсталятором») використовується стандартна консоль (для конкретної платформи), яку U-Boot визначає у змінній «console». У більшості випадків це послідовна консоль, тому на цих платформах вам за замовчуванням знадобиться кабель послідовної консолі для використання програми встановлення.

На платформах, які також підтримують відеоконсоль, ви можете змінити змінну U-Boot «console» відповідним чином, якщо хочете, щоб програма встановлення запускалася на відеоконсолі.

5.1.3. Завантаження з TFTP

Завантаження з мережі вимагає підключення до мережі та сервера TFTP network boot (і, ймовірно, також DHCP, RARP або BOOTP для автоматичного налаштування мережі).

Налаштування на стороні сервера для підтримки завантаження з мережі описано в Розділ 4.3, «Підготовка файлів для завантаження з TFTP».

5.1.3.1. TFTP-booting в U-Boot

Мережеве завантаження на системах з прошивкою U-Boot складається з трьох кроків: а) налаштування мережі, б) завантаження образів (ядро/початковий ramdisk/dtb) у пам'ять і в) власне виконання попередньо завантаженого коду.

Спочатку вам потрібно налаштувати мережу або автоматично через DHCP, запустивши

setenv autoload no
dhcp

or manually by setting several environment variables

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>

If you prefer, you can make these settings permanent by running

saveenv

Після цього Вам потрібно завантажити образи (kernel/initial ramdisk/dtb) у пам'ять. Це робиться за допомогою команди tftpboot, яка повинна бути надана з адресою, за якою образ буде збережений у пам'яті. На жаль, карта розподілу пам'яті може відрізнятися в різних системах, тому на цей випадок, на жаль, немає загального правила які адреси для цього можуть бути використані.

На деяких системах U-Boot predefines набір змінних середовища з відповідними адресами навантаження: kernel_addr_r, ramdisk_addr_r and fdt_addr_r. Ви можете перевірити, чи вони визначені за допомогою

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Якщо вони не визначені, вам необхідно перевірити документацію системи для відповідних значень і встановити їх вручну. Для систем на основі Allwinner SunXi SOCs (наприклад, Allwinner A10, назва архітектури «sun4i» або Allwinner A20, назва архітектури «sun7i»), ви можете наприклад, використовувати такі значення:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Коли адреси завантаження визначені, можна завантажити образи у пам'ять з попередньо визначеного сервера tftp з

tftpboot ${kernel_addr_r} <filename of the kernel image>
tftpboot ${fdt_addr_r} <filename of the dtb>
tftpboot ${ramdisk_addr_r} <filename of the initial ramdisk image>

Третя частина - налаштування командного рядка ядра і власне виконання завантаженого коду. U-Boot передає вміст змінної оточення «bootargs» у вигляді командного рядка до ядра, тому будь-які параметри ядра та програми встановлення - такі як пристрій консолі (див. Розділ 5.3.1, «Послідовна консоль завантаження») або параметри попереднього завантаження (див. Розділ 5.3.2, «Debian Параметри встановлення» та Додаток 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 встановлює змінну розміру файлу до розміру останнього завантаженого файлу, також команді bootz для коректної роботи потрібен розмір образу ramdisk. У разі завантаження ядра, залежного від платформи, напр. ядра без структури пристроїв, просто пропустіть параметр ${fdt_addr_r}.

5.1.3.2. Попередньо збудований тарбол для мережевого завантаження

Debian надає попередньо вбудований tarball ( .../images/netboot/netboot.tar.gz ), який може просто бути розпакований на сервері tftp і містить всі файли, необхідні для завантаження. Він також включає скрипт завантаження, який автоматизує всі кроки для завантаження інсталятора. Сучасні U-Boot версії містять функцію автоматичного завантаження tftp, яка стає активною, якщо немає завантажувального локального пристрою для зберігання (MMC/SD, USB, IDE/SATA/SCSI), а потім завантажує цей скрипт завантаження з сервера tftp. Передумова для використання цієї функції полягає в тому, що у вас є сервер dhcp у вашій мережі, який надає клієнту адресний сервер tftp.

Якщо ви хочете запустити функцію автоматичного завантаження tftp від командного рядка U-Boot, ви можете скористатися наступною командою:

run bootcmd_dhcp

Щоб вручну завантажити завантажувальний скрипт, який надається tarball, ви можете альтернативно випустити наступні команди в U-Boot оперативно:

setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}

5.1.4. Завантаження з флешки USB в U-Boot

Багато сучасних U-Boot версії мають підтримку USB і дозволяють завантаження з пристроїв USB-накопичувачів, таких як USB-флешки. На жаль, точне кроки, необхідні для того, щоб зробити це досить трохи від пристрою до пристрою.

У U-Boot v2014.10 впроваджено спільний фреймворк для роботи з командним рядком та автозавантаження. Це дозволяє створювати універсальні завантажувальні образи, які працюють на будь-якій системі, що реалізує цей фреймворк. На таких системах debian-installer підтримує встановлення з USB-накопичувача, але, на жаль, не всі платформи ще прийняли цей новий фреймворк.

Для створення завантажувального USB-накопичувача для встановлення Debian, розпакуйте архів hd-media (див. Розділ 4.2.1, «Де знайти інсталяційні файли») на флешку, відформатовану з файловою системою, яка підтримується U-Boot на Вашому пристрої. Для сучасних версій U-Boot, зазвичай підходять будь-які FAT16 / FAT32 / ext2 / ext3 / ext4. Потім скопіюйте на флешку файл образу ISO першого CD/DVD з Debian.

Фреймворк автоматичного завантаження в сучасних версіях U-Boot працює подібно до порядку завантаження BIOS/UEFI в ПК, тобто він перевіряє список можливих пристроїв завантаження на наявність дійсного образу завантаження і запускає перший, який знаходить. Якщо операційна система не встановлена, підключення USB-флешки та увімкнення системи повинне призвести до запуску інсталятора. Ви можете також ініціювати процес завантаження USB в будь-який час у запрошенні U-Boot, вказавши команду «run bootcmd_usb0».

Однією з проблем, яка може виникнути при завантаженні з флешки під час використання послідовної консолі, може бути невідповідність швидкості передачі даних консолі. Якщо в U-Boot визначено консольну змінну, завантажувальний скрипт автоматично передає її ядру для встановлення основного консольного пристрою і, якщо це можливо, швидкості передачі консолі. На жаль, обробка консольної змінної залежить від платформи - на деяких платформах консольна змінна містить швидкість передачі даних (як у «console=ttyS0,115200»), тоді як на інших платформах консольна змінна містить лише пристрій (як у «console=ttyS0»). Останній випадок призводить до спотворення консольного виводу, якщо швидкість за замовчуванням відрізняється між U-Boot та ядром. Сучасні версії U-Boot часто використовують 115200 бод, в той час як ядро за замовчуванням використовує традиційну швидкість 9600 бод. Якщо це сталося, вам слід вручну встановити консольну змінну з правильною швидкістю передачі даних для вашої системи, а потім запустити програму встановлення командою «run bootcmd_usb0».

5.1.5. Використання готових образів SD-карт з інсталятором

Для низки систем Debian надає образи SD-карт, які містять як U-Boot, так і debian-installer. Ці образи надаються у двох варіантах: один для отримання пакетів програмного забезпечення через мережу (доступний на .../images/netboot/SD-card-images/ ), інший — для автономної інсталяції за допомогою CD/DVD Debian (доступний на .../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, а потім об’єднайте розпаковані частини, виконавши команду

copy /b firmware.<system-type>.img + partition.img complete_image.img

у вікні Windows CMD.exe.

Запишіть отриманий образ на SD-карту, наприклад, виконавши наступну команду в системі Linux:

cat complete_image.img > /dev/SD_CARD_DEVICE

Після підключення SD-карти до цільової системи та увімкнення системи, інсталятор завантажиться з SD-карти. Якщо ви використовуєте варіант hd-носія для автономного встановлення, ви повинні надати програмі встановлення доступ до першого Debian CD/DVD на окремому носії, яким може бути, наприклад, ISO-образ CD/DVD на флешці USB.

Коли ви дійдете до кроку створення розділів у програмі встановлення (див. Розділ 6.3.4, «Створення розділів і вибір точок кріплення»), ви можете видалити або замінити будь-які попередні розділи на картці. Після запуску програма встановлення працює повністю в оперативній пам'яті системи і більше не потребує доступу до SD-карти, тому ви можете використовувати всю карту для встановлення Debian. Найпростіший спосіб створити правильну структуру розділів на SD-карті - дозволити програмі встановлення автоматично створити її для вас (див. Розділ 6.3.4.2, «Кероване створення розділів»).