Miwiti GNU/Linux ing papan ARM saka awal (nggunakake Kali lan iMX.6 minangka conto)

tl; dr: Aku nggawe gambar Kali Linux kanggo komputer ARM, ing program debootstrap, linux ΠΈ u-boot.

Miwiti GNU/Linux ing papan ARM saka awal (nggunakake Kali lan iMX.6 minangka conto)

Yen sampeyan tuku siji-pembayar sing ora populer banget, sampeyan bisa uga nemoni kekurangan gambar kit distribusi sing paling disenengi. Prekara sing padha uga kedadeyan ngrancang Flipper One. Ora ana Kali Linux kanggo IMX6 (aku lagi masak), dadi aku kudu ngrakit dhewe.

Proses download cukup prasaja:

  1. Hardware wis initialized.
  2. Saka sawetara area ing piranti panyimpenan (kertu SD / eMMC / etc) bootloader diwaca lan dieksekusi.
  3. Loader nggoleki kernel sistem operasi lan mbukak menyang sawetara area memori lan nglakokake.
  4. Kernel ngemot sisa OS.

Kanggo tugasku, tingkat rinci iki cukup, sampeyan bisa maca rincian ing artikel liyane. Wilayah "sawetara" sing kasebut ing ndhuwur beda-beda saka papan menyang papan, sing nggawe sawetara kesulitan instalasi. Loading platform ARM server nyoba kanggo standarisasi nggunakake UEFI, nanging anggere ora kasedhiya kanggo kabeh, sampeyan kudu ngumpulake kabeh kanthi kapisah.

Nggawe sistem file root

Pisanan sampeyan kudu nyiyapake bagean. Das U-Boot ndhukung sistem file beda, Aku milih FAT32 kanggo /boot lan ext3 kanggo root, iki minangka markup gambar standar kanggo Kali ing ARM. Aku bakal nggunakake GNU Parted, nanging sampeyan bisa nggawe padha luwih menowo fdisk. Sampeyan uga bakal mbutuhake dosfstools ΠΈ e2fsprogs kanggo nggawe sistem file: apt install parted dosfstools e2fsprogs.

Pemisahan kertu SD:

  1. Tandhani kertu SD minangka nggunakake partisi MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Nggawe bagean kanggo /boot kanggo 128 megabyte: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabyte sing ora kejawab pisanan kudu ditinggalake kanggo markup dhewe lan kanggo bootloader.
  3. Nggawe ROOT FS kanggo sisa kapasitas: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Yen dumadakan sampeyan durung nggawe utawa ngganti file partisi, sampeyan kudu nglakokake `partprobe`, banjur tabel partisi bakal diwaca maneh.
  5. Nggawe boot partisi filesystem labeled BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Nggawe sistem file root kanthi label ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Apik, saiki sampeyan bisa ngisi. Iki bakal mbutuhake tambahan debootstrap, sarana kanggo nggawe root FS ing sistem operasi kaya Debian: apt install debootstrap.

Kita ngumpulake FS:

  1. Pasang partisi menyang /mnt/ (Gunakake titik gunung sing luwih trep kanggo sampeyan dhewe): mount /dev/mmcblk0p2 /mnt
  2. Bener, kita ngisi sistem file: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parameter --include nemtokake tambahan nginstal sawetara paket, Aku kasebut statis dibangun QEMU emulator. Iku ngijini sampeyan kanggo nindakake chroot menyang lingkungan ARM. Makna pilihan liyane bisa ditemokake ing man debootstrap. Aja lali manawa ora saben papan ARM ndhukung arsitektur kasebut armhf.
  3. Amarga bedane arsitektur debootstrap ditindakake ing rong tahap, sing kapindho ditindakake kaya ing ngisor iki: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Saiki sampeyan kudu muter: chroot /mnt /bin/bash
  5. We isi /etc/hosts ΠΈ /etc/hostname target FS. Isi ing padha karo isi ing komputer lokal, elinga kanggo ngganti jeneng host mung.
  6. Sampeyan bisa ngatur kabeh liyane. Ing tartamtu, aku nginstal locales (kunci repositori), konfigurasi ulang lokal lan zona wektu (dpkg-reconfigure locales tzdata). Aja lali nyetel sandhi nganggo printah passwd.
  7. Setel sandhi kanggo root tim passwd.
  8. Persiapan gambar kanggo kula rampung kanthi ngisi /etc/fstab ing njero /mnt/.

Aku bakal ngunggah sesuai karo tag sing digawe sadurunge, dadi isine kaya iki:

LABEL=ROOTFS / kesalahan otomatis = remount-ro 0 1
LABEL=BOOT /boot otomatis standar 0 0

Pungkasan, sampeyan bisa masang partisi boot, kita butuh kanggo kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

Nggawe Linux

Kanggo mbangun kernel (banjur bootloader) ing Debian Testing, sampeyan kudu nginstal set standar file header GCC, GNU Make lan GNU C Library kanggo arsitektur target (aku duwe armhf), uga header OpenSSL, kalkulator konsol bc, bison ΠΈ flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Wiwit loader gawan nggoleki file zImage ing sistem file partisi boot, iku wektu kanggo break flash drive.

  1. Kloning kernel dawa banget, mula aku bakal ngundhuh: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Bukak paket lan pindhah menyang direktori sumber: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurasi sadurunge kompilasi: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurasi kasebut ana ing direktori arch/arm/configs/. Yen ora ana, sampeyan bisa nyoba golek lan ndownload sing wis siap lan ngirim jeneng file ing direktori iki menyang parameter KBUILD_DEFCONFIG. Ing kasus nemen, langsung nerusake menyang paragraf sabanjurΓ©.
  3. Sampeyan bisa opsional ngapiki setelan: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Lan kompilasi silang gambar: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Saiki sampeyan bisa nyalin file kernel: cp arch/arm/boot/zImage /mnt/boot/
  6. Lan file saka DeviceTree (deskripsi hardware sing kasedhiya ing papan): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Lan nginstal modul sing dipasang minangka file sing kapisah: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel wis siyap. Sampeyan bisa mbusak kabeh: umount /mnt/boot/ /mnt/

Das U Boot

Wiwit bootloader interaktif, papan kasebut dhewe, piranti panyimpenan, lan piranti USB-to-UART opsional cukup kanggo nyoba operasi kasebut. Yaiku, sampeyan bisa nundha kernel lan OS mengko.

Umume manufaktur nyaranake nggunakake Das U-Boot kanggo boot utama. Dhukungan lengkap biasane diwenehake ing garpu dhewe, nanging aja lali nyumbang ing hulu. Ing kasusku, papan didhukung ing utama, dadi garpu Aku ora nggatekake.

Kita ngumpulake bootloader dhewe:

  1. Kloning cabang stabil saka repositori: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Ayo menyang direktori dhewe: cd u-boot
  3. Nyiapake konfigurasi mbangun: make mx6ull_14x14_evk_defconfig. Iki mung bisa digunakake yen konfigurasi ana ing Das U-Boot dhewe, yen ora, sampeyan kudu nemokake konfigurasi pabrikan lan dilebokake ing root repositori ing file kasebut. .config, utawa dirakit kanthi cara liya sing disaranake dening pabrikan.
  4. Kita ngumpulake gambar bootloader dhewe kanthi kompiler silang armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

AkibatΓ©, kita njaluk file u-boot.imx, iki gambar siap-digawe sing bisa ditulis menyang USB flash drive. Kita nulis menyang kertu SD, ngliwati 1024 bait pisanan. Kok aku milih target u-boot.imx? Napa ora kejawab persis 1024 bita? Iki apa padha propose kanggo nindakake ing dokumentasi. Kanggo papan liyane, bangunan gambar lan proses kobong bisa uga rada beda.

Rampung, sampeyan bisa ngundhuh. Bootloader kudu nglaporake versi dhewe, sawetara informasi babagan papan, lan nyoba golek gambar kernel ing partisi. Yen gagal, bakal nyoba kanggo boot liwat jaringan. UmumΓ©, output cukup rinci, sampeyan bisa nemokake kesalahan yen ana masalah.

Tinimbang kesimpulan

Apa sampeyan ngerti yen bathuk dolphin ora balung? Iku secara harfiah mripat katelu, lensa lemak kanggo echolocation!

Miwiti GNU/Linux ing papan ARM saka awal (nggunakake Kali lan iMX.6 minangka conto)

Miwiti GNU/Linux ing papan ARM saka awal (nggunakake Kali lan iMX.6 minangka conto)

Source: www.habr.com