Memulakan GNU/Linux pada papan ARM dari awal (menggunakan Kali dan iMX.6 sebagai contoh)

tl; dr: Saya sedang membina imej Kali Linux untuk komputer ARM, dalam program ini debootstrap, linux ΠΈ u-boot.

Memulakan GNU/Linux pada papan ARM dari awal (menggunakan Kali dan iMX.6 sebagai contoh)

Jika anda membeli perisian papan tunggal yang tidak begitu popular, anda mungkin berhadapan dengan kekurangan imej pengedaran kegemaran anda untuknya. Kira-kira perkara yang sama berlaku dengan terancang Flipper One. Tiada Kali Linux untuk IMX6 (saya sedang bersiap), jadi saya perlu memasangnya sendiri.

Proses muat turun agak mudah:

  1. Perkakasan dimulakan.
  2. Dari sesetengah kawasan pada peranti storan (kad SD/eMMC/dll) pemuat but dibaca dan dilaksanakan.
  3. Pemuat but mencari kernel sistem pengendalian dan memuatkannya ke beberapa kawasan memori dan melaksanakannya.
  4. Kernel memuatkan seluruh OS.

Tahap perincian ini sudah cukup untuk tugas saya, anda boleh membaca butirannya dalam artikel lain. Kawasan "beberapa" yang disebutkan di atas berbeza dari papan ke papan, yang menimbulkan beberapa kesukaran pemasangan. Memuatkan platform pelayan ARM cuba menyeragamkan menggunakan UEFI, tetapi walaupun ini tidak tersedia untuk semua orang, anda perlu memasang semuanya secara berasingan.

Membina sistem fail akar

Mula-mula anda perlu menyediakan bahagian. Das U-Boot menyokong sistem fail yang berbeza, saya memilih FAT32 untuk /boot dan ext3 untuk root, ini ialah susun atur imej standard untuk Kali pada ARM. Saya akan menggunakan GNU Parted, tetapi anda boleh melakukan perkara yang sama dengan cara yang lebih biasa fdisk. Anda juga akan memerlukan dosfstools ΠΈ e2fsprogs untuk membuat sistem fail: apt install parted dosfstools e2fsprogs.

Kami menandakan kad SD:

  1. Tandai kad SD sebagai menggunakan pembahagian MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Buat bahagian di bawah /boot untuk 128 megabait: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabait pertama yang terlepas mesti ditinggalkan untuk penanda itu sendiri dan untuk pemuat but.
  3. Kami mencipta sistem fail akar untuk keseluruhan baki kapasiti: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Jika tiba-tiba fail partition anda tidak dibuat atau tidak berubah, anda perlu menjalankan `partprobe`, kemudian jadual partition akan dibaca semula.
  5. Buat sistem fail untuk partition but dengan label BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Buat sistem fail akar dengan label ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Hebat, kini anda boleh mengisinya. Untuk ini anda juga perlu debootstrap, utiliti untuk mencipta sistem fail akar untuk sistem pengendalian seperti Debian: apt install debootstrap.

Kami mengumpul FS:

  1. Lekapkan partition ke dalam /mnt/ (gunakan titik lekap yang lebih mudah): mount /dev/mmcblk0p2 /mnt
  2. Kami sebenarnya mengisi sistem fail: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameter --include menunjukkan untuk memasang beberapa pakej tambahan, saya menetapkan emulator QEMU yang dibina secara statik. Ia membolehkan anda membuat persembahan chroot dalam persekitaran ARM. Maksud pilihan yang selebihnya boleh didapati di man debootstrap. Jangan lupa bahawa tidak setiap papan ARM menyokong seni bina armhf.
  3. Oleh kerana perbezaan seni bina debootstrap dilakukan dalam dua peringkat, yang kedua dilakukan seperti ini: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Sekarang anda perlu mengosongkannya: chroot /mnt /bin/bash
  5. Mengisi /etc/hosts ΠΈ /etc/hostname sasaran FS. Isikan sama seperti kandungan pada komputer tempatan anda, cuma ingat untuk menggantikan nama hos.
  6. Anda boleh menyesuaikan semua yang lain. Khususnya, saya memasang locales (kunci repositori), konfigurasi semula tempat dan zon waktu (dpkg-reconfigure locales tzdata). Jangan lupa untuk menetapkan kata laluan dengan arahan passwd.
  7. Tetapkan kata laluan untuk root pasukan passwd.
  8. Penyediaan gambar untuk saya diakhiri dengan pengisian /etc/fstab dalam /mnt/.

Saya akan memuat naik mengikut tag yang dibuat sebelum ini, jadi kandungannya akan menjadi seperti ini:

LABEL=ROOTFS / ralat auto=remount-ro 0 1
LABEL=BOOT /boot auto lalai 0 0

Akhir sekali, anda boleh melekapkan partition but, kami memerlukannya untuk kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

binaan Linux

Untuk membina kernel (dan kemudian pemuat but) pada Pengujian Debian, anda perlu memasang set standard fail pengepala GCC, GNU Make dan GNU C Library untuk seni bina sasaran (untuk saya armhf), serta pengepala OpenSSL, kalkulator konsol bc, bison ΠΈ flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Oleh kerana pemuat lalai mencari fail zImage pada sistem fail partition but, sudah tiba masanya untuk memisahkan pemacu denyar.

  1. Ia mengambil masa terlalu lama untuk mengklon kernel, jadi saya hanya akan memuat turun: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Mari kita bongkar dan pergi ke direktori sumber: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurasikan sebelum penyusunan: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurasi terletak dalam direktori arch/arm/configs/. Jika tiada, anda boleh cuba mencari dan memuat turun yang siap dan lulus nama fail dalam direktori ini sebagai parameter KBUILD_DEFCONFIG. Sebagai pilihan terakhir, teruskan ke titik seterusnya.
  3. Secara pilihan, anda boleh mengubah suai tetapan: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Dan susun silang imej: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Kini anda boleh menyalin fail kernel: cp arch/arm/boot/zImage /mnt/boot/
  6. Dan fail dari DeviceTree (penerangan perkakasan pada papan): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Dan pasang modul yang dikumpul dalam bentuk fail berasingan: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Inti sudah siap. Anda boleh menyahlekap semuanya: umount /mnt/boot/ /mnt/

Das U-Boot

Memandangkan pemuat but adalah interaktif, semua yang anda perlukan untuk menguji operasinya ialah papan itu sendiri, peranti storan, dan secara pilihan peranti USB-ke-UART. Iaitu, anda boleh menangguhkan kernel dan OS untuk kemudian.

Sebilangan besar pengeluar menawarkan untuk menggunakan Das U-Boot untuk but awal. Sokongan penuh biasanya disediakan dalam garpu mereka sendiri, tetapi mereka tidak lupa untuk menyumbang kepada huluan. Dalam kes saya, lembaga itu disokong dalam garisan utamaJadi garpu Saya tidak mengendahkannya.

Mari kumpulkan pemuat but itu sendiri:

  1. Kami mengklon cawangan stabil repositori: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Mari pergi ke direktori itu sendiri: cd u-boot
  3. Menyediakan konfigurasi binaan: make mx6ull_14x14_evk_defconfig. Ini hanya berfungsi jika konfigurasi berada dalam Das U-Boot sendiri, jika tidak, anda perlu mencari konfigurasi pengilang dan meletakkannya di akar repositori dalam fail .config, atau memasang dengan cara lain yang disyorkan oleh pengilang.
  4. Kami memasang imej pemuat but itu sendiri menggunakan pengkompil silang armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Akibatnya kami mendapat fail u-boot.imx, ini ialah imej sedia yang boleh ditulis pada pemacu denyar. Kami menulis pada kad SD, melangkau 1024 bait pertama. Mengapa saya memilih Sasaran u-boot.imx? Mengapa saya terlepas tepat 1024 bait? Inilah yang mereka cadangkan untuk dilakukan dokumentasi. Untuk papan lain, pembinaan imej dan proses rakaman mungkin sedikit berbeza.

Selesai, anda boleh boot. Pemuat but mesti melaporkan versinya sendiri, beberapa maklumat tentang papan, dan cuba mencari imej kernel pada partition. Jika tidak berjaya, ia akan cuba boot melalui rangkaian. Secara umum, outputnya agak terperinci, anda boleh mencari ralat jika terdapat masalah.

Daripada kesimpulan

Adakah anda tahu bahawa dahi ikan lumba-lumba tidak bertulang? Ia betul-betul mata ketiga, kanta berlemak untuk ekolokasi!

Memulakan GNU/Linux pada papan ARM dari awal (menggunakan Kali dan iMX.6 sebagai contoh)

Memulakan GNU/Linux pada papan ARM dari awal (menggunakan Kali dan iMX.6 sebagai contoh)

Sumber: www.habr.com