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

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

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

uImage/uInitrd are image formats designed for the U-Boot firmware that is used on many ARM-based systems (mostly 32-bit ones). Older U-Boot versions can only boot files in uImage/uInitrd format, so these are often used on older armel systems. Newer U-Boot versions can - besides booting uImages/uInitrds - also boot standard Linux kernels and ramdisk images, but the command syntax to do that is slightly different from that for booting uImages.

For systems using a multiplatform kernel, besides kernel and initial ramdisk a so-called device-tree file (or device-tree blob, «dtb») is needed. It is specific to each supported system and contains a description of the particular hardware. The dtb should be supplied on the device by the firmware, but in practice a newer one often needs to be loaded.

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

The netboot tarball (Розділ 5.1.3.2, «Pre-built netboot tarball»), and the installer SD-card images (Розділ 5.1.5, «Using pre-built SD-card images with the installer») use the (platform-specific) default console that is defined by U-Boot in the «console» variable. In most cases that is a serial console, so on those platforms you by default need a serial console cable to use the installer.

On platforms which also support a video console, you can modify the U-Boot «console» variable accordingly if you would like the installer to start on the video console.

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

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

Налаштування на стороні сервера для підтримки завантаження з мережі описано в Розділ 4.3, «Preparing Files for TFTP Net Booting».

5.1.3.1. TFTP-booting в U-Boot

Network booting on systems using the U-Boot firmware consists of three steps: a) configuring the network, b) loading the images (kernel/initial ramdisk/dtb) into memory and c) actually executing the previosly loaded code.

Спочатку вам потрібно налаштувати мережу або автоматично через 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>

The third part is setting the kernel commandline and actually executing the loaded code. U-Boot passes the content of the «bootargs» environment variable as commandline to the kernel, so any parameters for the kernel and the installer - such as the console device (see Розділ 5.3.1, «Boot serial console») or preseeding options (see Розділ 5.3.2, «Debian Installer Parameters» and Додаток B, Автоматичне встановлення з готовими відповідями) - can be set with a command like

setenv bootargs console=ttyS0,115200 rootwait panic=10

The exact command to execute the previously loaded code depends on the image format used. With uImage/uInitrd, the command is

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

and with native Linux images it is

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. Pre-built netboot tarball

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 has introduced a common commandline handling and autoboot framework. This allows building generic boot images that work on any system implementing this framework. The debian-installer supports installation from a USB stick on such systems, but unfortunately not all platforms have adopted this new framework yet.

Для створення завантажувального 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».

One problem that can come up when booting from a USB stick while using a serial console can be a console baudrate mismatch. If a console variable is defined in U-Boot, the debian-installer boot script automatically passes it to the kernel to set the primary console device and, if applicable, the console baudrate. Unfortunately the handling of the console variable varies from platform to platform - on some platforms, the console variable includes the baudrate (as in «console=ttyS0,115200»), while on other platforms the console variable contains only the device (as in «console=ttyS0»). The latter case leads to a garbled console output when the default baudrate differs between U-Boot and the kernel. Modern U-Boot versions often use 115200 baud while the kernel still defaults to the traditional 9600 baud. If this happens, you should manually set the console variable to contain the correct baudrate for your system and then start the installer with the «run bootcmd_usb0» command.

5.1.5. Using pre-built SD-card images with the installer

Для низки систем 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.

Write the resulting image onto an SD card, e.g. by running the following command on a Linux system:

cat complete_image.img > /dev/SD_CARD_DEVICE

After plugging the SD card into the target system and powering the system up, the installer is loaded from the SD card. If you use the hd-media variant for offline installations, you must provide the installer with access to the first Debian CD/DVD on a separate medium, which can e.g. be a CD/DVD ISO image on a USB stick.

When you come to the partitioning step in the installer (see Розділ 6.3.4, «Partitioning and Mount Point Selection»), you can delete or replace any previous partitions on the card. Once the installer is started, it runs completely in the system's main memory and does not need to access the SD card anymore, so you can use the full card for installing Debian. The easiest way to create a proper partition layout on the SD card is to let the installer automatically create one for you (see Розділ 6.3.4.2, «Guided Partitioning»).