5.1. Mem-boot Installer pada 32-bit hard-float ARMv7

5.1.1. Format image boot

Pada sistem berbasis ARM dalam kebanyakan kasus, salah satu dari dua format untuk image boot digunakan: a) kernel standar Linux format zImage (vmlinuz) bersama dengan ramdisk awal Linux standar (initrd.gz) atau b) kernel format uImage (uImage) bersama dengan ramdisk awal yang sesuai (uInitrd).

uImage/uInitrd adalah format image yang dirancang untuk firmware U-Boot yang digunakan pada banyak sistem berbasis ARM (kebanyakan yang 32-bit). Versi U-Boot yang lebih lama hanya dapat mem-boot berkas dalam format uImage/uInitrd, jadi ini sering digunakan pada sistem armel yang lebih lama. Versi U-Boot yang lebih baru dapat - selain mem-boot uImage/uInitrd - juga mem-boot image kernel Linux standar dan ramdisk, tetapi sintaks perintah untuk melakukan itu sedikit berbeda dari itu untuk mem-boot uImages.

Untuk sistem yang menggunakan kernel multiplatform, selain kernel dan ramdisk awal diperlukan apa yang disebut berkas device-tree (atau blob device-tree, dtb). Ini spesifik untuk setiap sistem yang didukung dan berisi deskripsi perangkat keras tertentu. dtb harus disediakan pada perangkat oleh firmware, tetapi dalam praktiknya yang lebih baru sering perlu dimuat.

5.1.2. Konfigurasi konsol

Tarball netboot (Bagian 5.1.3.2, “Tarball netboot pra-built”), dan image kartu SD penginstal (Bagian 5.1.5, “Menggunakan image kartu SD pra-built dengan penginstal”) menggunakan konsol baku (spesifik platform) yang ditentukan oleh U-Boot dalam variabel console . Dalam kebanyakan kasus itu adalah konsol serial, jadi pada platform tersebut Anda secara baku memerlukan kabel konsol serial untuk menggunakan penginstal.

Pada platform yang juga mendukung konsol video, Anda dapat memodifikasi variabel console U-Boot yang sesuai jika Anda ingin penginstal memulai di konsol video.

5.1.3. Mem-boot memakai TFTP

Boot dari jaringan mengharuskan Anda memiliki koneksi jaringan dan server boot jaringan TFTP (dan mungkin juga server DHCP, RARP, atau BOOTP untuk konfigurasi jaringan otomatis).

Pengaturan sisi server untuk mendukung boot jaringan dijelaskan dalam Bagian 4.3, “Mempersiapkan Berkas untuk Boot Jaringan TFTP”.

5.1.3.1. Mem-boot TFTP di U-Boot

Boot jaringan pada sistem menggunakan firmware U-Boot terdiri dari tiga langkah: a) mengkonfigurasi jaringan, b) memuat image (kernel/ramdisk awal/dtb) ke dalam memori dan c) benar-benar mengeksekusi kode yang dimuat sebelumnya.

Pertama, Anda harus mengkonfigurasi jaringan, baik secara otomatis melalui DHCP dengan menjalankan

setenv autoload no
dhcp

atau secara manual dengan mengatur beberapa variabel

lingkungan
setenv ipaddr <alamat ip klien>
setenv netmask <netmask>
setenv serverip <alamat ip server tftp>
setenv dnsip <alamat ip nameserver>
setenv gatewayip <alamat ip dari gateway default>

Jika mau, Anda dapat membuat pengaturan ini permanen dengan menjalankan

saveenv

Setelah itu Anda perlu memuat image (kernel/ramdisk awal/dtb) ke dalam memori. Ini dilakukan dengan perintah tftpboot, yang harus dilengkapi dengan alamat di mana image harus disimpan dalam memori. Sayangnya peta memori dapat bervariasi dari sistem ke sistem, sehingga tidak ada aturan umum alamat mana yang dapat digunakan untuk ini.

Pada beberapa sistem, U-Boot menetapkan satu set variabel lingkungan dengan alamat pemuatan yang sesuai: kernel_addr_r, ramdisk_addr_r, dan fdt_addr_r. Anda dapat memeriksa apakah mereka didefinisikan dengan menjalankan

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Jika tidak didefinisikan, Anda harus memeriksa dokumentasi sistem Anda untuk nilai yang sesuai dan mengaturnya secara manual. Untuk sistem berbasis SOC ALLWINNER SunXi (misalnya Allwinner A10, nama arsitektur sun4i atau Allwinner A20, nama arsitektur sun7i), Anda dapat misalnya menggunakan nilai-nilai berikut:

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

Ketika alamat pemuatan ditentukan, Anda dapat memuat image ke dalam memori dari server tftp yang ditentukan sebelumnya dengan

tftpboot ${kernel_addr_r} <nama berkas dari image kernel>
tftpboot ${fdt_addr_r} <nama berkas dari dtb>
tftpboot ${ramdisk_addr_r} <nama berkas dari image ramdisk awal>

Bagian ketiga adalah mengatur baris perintah kernel dan benar-benar mengeksekusi kode yang dimuat. U-Boot meneruskan konten variabel lingkungan bootargs sebagai baris perintah ke kernel, sehingga parameter apa pun untuk kernel dan penginstal - seperti perangkat konsol (lihat Bagian 5.3.1, “Boot serial console”) atau opsi preseed (lihat Bagian 5.3.2, “Parameter Pemasang Debian” dan Lampiran B, Mengotomatiskan instalasi menggunakan preseed) - dapat diatur dengan perintah seperti

setenv bootargs console=ttyS0,115200 rootwait panic=10

Perintah yang tepat untuk mengeksekusi kode yang dimuat sebelumnya tergantung pada format image yang digunakan. Dengan uImage/uInitrd, perintahnya adalah

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

dengan image Linux native itu adalah

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Catatan: Saat mem-boot image linux standar, penting untuk memuat image ramdisk awal setelah kernel dan dtb saat U-Boot mengatur variabel filesize ke ukuran berkas terakhir yang dimuat dan perintah bootz memerlukan ukuran image ramdisk agar berfungsi dengan benar. Dalam hal mem-boot kernel khusus platform, yaitu kernel tanpa device-tree, cukup hilangkan parameter ${fdt_addr_r}.

5.1.3.2. Tarball netboot pra-built

Debian menyediakan tarball pra-built ( .../images/netboot/netboot.tar.gz ) yang dapat dengan mudah dibongkar di server tftp Anda dan berisi semua berkas yang diperlukan untuk netboot. Ini juga termasuk skrip boot yang mengotomatiskan semua langkah untuk memuat penginstal. Versi U-Boot modern berisi fitur autoboot tftp yang menjadi aktif jika tidak ada perangkat penyimpanan lokal yang dapat di-boot (MMC/SD, USB, IDE/SATA/SCSI) dan kemudian memuat skrip boot ini dari server tftp. Prasyarat untuk menggunakan fitur ini adalah Anda memiliki dhcp server di jaringan Anda yang menyediakan alamat server tftp ke klien.

Jika Anda ingin memicu fitur autoboot tftp dari baris perintah U-Boot, Anda dapat menggunakan perintah berikut:

jalankan bootcmd_dhcp

Untuk memuat bootscript secara manual yang disediakan oleh tarball, Anda dapat menjalankan perintah berikut di prompt U-Boot:

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

5.1.4. Boot dari flash disk USB di U-Boot

Banyak versi U-Boot modern memiliki dukungan USB dan memungkinkan boot dari perangkat penyimpanan massal USB seperti flash disk USB. Sayangnya langkah-langkah tepat yang diperlukan untuk melakukan itu dapat bervariasi sedikit dari perangkat ke perangkat.

U-Boot v2014.10 telah memperkenalkan penanganan baris perintah umum dan kerangka autoboot. Hal ini memungkinkan membangun image boot generik yang bekerja pada sistem apa pun yang menerapkan kerangka kerja ini. debian-installer mendukung instalasi dari flash disk USB pada sistem tersebut, tetapi sayangnya belum semua platform mengadopsi kerangka kerja baru ini.

Untuk membuat flash disk USB yang dapat di-boot untuk menginstal Debian, bongkar tarball media hd (lihat Bagian 4.2.1, “Di Mana Menemukan Berkas Instalasi”) ke flash disk USB yang diformat dengan sistem berkas yang didukung oleh versi U-Boot di perangkat Anda. Untuk versi U-Boot modern, salah satu dari FAT16/FAT32/ext2/ext3/ext4 biasanya berfungsi. Kemudian salin berkas image ISO dari CD atau DVD instalasi pertama Debian ke flash disk.

Kerangka autoboot dalam versi U-Boot modern bekerja mirip dengan opsi urutan boot di PC BIOS/UEFI, yaitu memeriksa daftar perangkat boot yang mungkin untuk image boot yang valid dan memulai yang pertama ditemukannya. Jika tidak ada sistem operasi yang diinstal, mencolokkan flash disk USB dan menyalakan sistem akan menyebabkan dimulainya penginstal. Anda juga dapat memulai proses USB-boot kapan saja dari prompt U-Boot dengan memasukkan perintah run bootcmd_usb0.

Salah satu masalah yang bisa muncul saat boot dari flash disk USB ketika menggunakan konsol serial adalah ketidakcocokan baudrate konsol. Jika variabel konsol didefinisikan dalam U-Boot, skrip boot debian-installer secara otomatis meneruskannya ke kernel untuk mengatur perangkat konsol utama dan, jika berlaku, baudrate konsol. Sayangnya penanganan variabel konsol bervariasi dari platform ke platform - pada beberapa platform, variabel konsol mencakup baudrate (seperti di console=ttyS0,115200), sementara pada platform lain variabel konsol hanya berisi perangkat (seperti di console=ttyS0). Kasus terakhir mengarah ke keluaran konsol yang kacau ketika baudrate baku berbeda antara U-Boot dan kernel. Versi U-Boot modern sering menggunakan baud 115200 sementara kernel masih baku ke baud 9600 tradisional. Jika ini terjadi, Anda harus mengatur variabel konsol secara manual agar berisi baudrate yang benar bagi sistem Anda dan kemudian memulai penginstal dengan perintah run bootcmd_usb0.

5.1.5. Menggunakan image kartu SD pra-built dengan penginstal

Untuk sejumlah sistem, Debian menyediakan image kartu SD yang berisi U-Boot dan debian-installer. Image ini disediakan dalam dua varian - satu untuk mengunduh paket perangkat lunak melalui jaringan (tersedia di .../images/netboot/SD-card-images/ ) dan satu untuk instalasi luring menggunakan CD/DVD Debian (tersedia di .../images/hd-media/SD-card-images/ ). Untuk menghemat ruang dan bandwidth jaringan, image terdiri dari dua bagian - bagian yang bergantung pada sistem bernama firmware.<system-type>.img.gz, dan bagian independen sistem bernama partition.img.gz.

Untuk membuat image lengkap dari dua bagian pada sistem Linux, Anda dapat menggunakan zcat sebagai berikut:

zcat firmware.<system-type>.img.gz partition.img.gz > complete_image.img

Pada sistem Windows, Anda harus terlebih dahulu mendekompresi kedua bagian secara terpisah, yang dapat dilakukan misalnya dengan menggunakan 7-Zip, dan kemudian menggabungkan bagian yang didekompresi bersama-sama dengan menjalankan perintah

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

di jendela CMD.exe Windows.

Tulis image yang dihasilkan ke kartu SD, misalnya dengan menjalankan perintah berikut pada sistem Linux:

cat complete_image.img > /dev/SD_CARD_DEVICE

Setelah mencolokkan kartu SD ke sistem target dan menyalakan sistem, penginstal dimuat dari kartu SD. Jika Anda menggunakan varian hd-media untuk instalasi luring, Anda harus menyediakan installer dengan akses ke CD/DVD Debian pertama pada media terpisah, yang dapat misalnya menjadi CD/DVD image ISO pada flash disk USB.

Ketika Anda sampai pada langkah partisi di penginstal (lihat Bagian 6.3.4, “Partisi dan Pemilihan Titik Kait”), Anda dapat menghapus atau mengganti partisi sebelumnya pada kartu. Setelah penginstal dimulai, ia berjalan sepenuhnya di memori utama sistem dan tidak perlu mengakses kartu SD lagi, sehingga Anda dapat menggunakan kartu lengkap untuk menginstal Debian. Cara termudah untuk membuat tata letak partisi yang tepat pada kartu SD adalah dengan membiarkan penginstal secara otomatis membuatnya untuk Anda (lihat Bagian 6.3.4.2, “Pemartisian Terpandu”).