Lanĉante GNU/Linukson sur ARM-tabulo de nulo (uzante Kali kaj iMX.6 kiel ekzemplon)

tl; dr: Mi konstruas bildon de Kali Linux por ARM-komputilo, en la programo debootstrap, linux и u-boot.

Lanĉante GNU/Linukson sur ARM-tabulo de nulo (uzante Kali kaj iMX.6 kiel ekzemplon)

Se vi aĉetis iun ne tre popularan unu-paganton, vi eble renkontos la mankon de bildo de via plej ŝatata distribua kompleto por ĝi. Okazis preskaŭ la sama afero planis Flipper One. Simple ne ekzistas Kali Linukso por IMX6 (mi kuiras), do mi devas kunmeti ĝin mem.

La elŝuta procezo estas sufiĉe simpla:

  1. Aparataro estas pravigita.
  2. De iu areo sur la konserva aparato (SD-karto/eMMC/ktp) la ekŝargilo estas legita kaj ekzekutita.
  3. La ŝargilo serĉas la kernon de la operaciumo kaj ŝarĝas ĝin en iun memorareon kaj efektivigas ĝin.
  4. La kerno ŝarĝas la reston de la OS.

Por mia tasko, ĉi tiu nivelo de detalo sufiĉas, vi povas legi la detalojn en alia artikolo. La "kelkaj" areoj menciitaj supre diferencas de tabulo al tabulo, kio kreas kelkajn instalajn malfacilaĵojn. Ŝargado de servilaj ARM-platformoj provante normigi uzante UEFI, sed dum ĝi ne disponeblas por ĉiuj, vi devos kolekti ĉion aparte.

Konstruante la radikan dosiersistemon

Unue vi devas prepari sekciojn. Das U-Boot subtenas malsamajn dosiersistemojn, mi elektis FAT32 por /boot kaj ext3 por radiko, ĉi tio estas la norma bilda markado por Kali sub ARM. Mi uzos GNU Parted, sed vi povas fari la samon pli konata fdisk. Vi ankaŭ bezonos dosfstools и e2fsprogs por krei dosiersistemon: apt install parted dosfstools e2fsprogs.

Dispartigu la SD-karton:

  1. Marku la SD-karton kiel uzante MBR-dispartigon: parted -s /dev/mmcblk0 mklabel msdos
  2. Krei sekcion por /boot por 128 megabajtoj: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. La unua maltrafita megabajto devas esti lasita por la markado mem kaj por la ekŝargilo.
  3. Kreu radikan FS por la resto de la kapablo: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Se subite vi ne kreis aŭ ŝanĝis diskdosierojn, vi devas ekzekuti `partprobe`, tiam la diskpartiga tablo estos relegita.
  5. Kreu lanĉan diskpartigan dosiersistemon etikeditan BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Kreu radikan dosiersistemon kun etikedo ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Bonege, nun vi povas plenigi ĝin. Ĉi tio krome postulos debootstrap, ilo por krei radikon FS sur Debian-similaj operaciumoj: apt install debootstrap.

Ni kolektas FS:

  1. Muntu la vando al /mnt/ (uzu pli oportunan muntan punkton por vi mem): mount /dev/mmcblk0p2 /mnt
  2. Fakte ni plenigas la dosiersistemon: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parametro --include precizigas aldone instali kelkajn pakaĵojn, mi specifis statike konstruitan QEMU-emulilon. Ĝi permesas vin plenumi chroot al la ARM-medio. La signifo de la aliaj opcioj troviĝas en man debootstrap. Ne forgesu, ke ne ĉiu ARM-tabulo subtenas la arkitekturon armhf.
  3. Pro la diferenco en arkitekturoj debootstrap estas farita en du stadioj, la dua estas farita jene: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nun vi devas ŝpini: chroot /mnt /bin/bash
  5. Ni plenigas /etc/hosts и /etc/hostname celo FS. Plenigu la saman kiel la enhavon en via loka komputilo, memoru anstataŭigi nur la gastigan nomon.
  6. Vi povas personecigi ĉion alian. Precipe mi instalas locales (deponejoŝlosiloj), reagordante lokojn kaj horzonon (dpkg-reconfigure locales tzdata). Ne forgesu agordi la pasvorton per la komando passwd.
  7. Agordu pasvorton por root teamo passwd.
  8. La preparado de la bildo por mi estas kompletigita per plenigo /etc/fstab interne /mnt/.

Mi alŝutos laŭ la etikedoj kreitaj antaŭe, do la enhavo estos tia:

LABEL=ROOTFS / aŭtomataj eraroj=remunti-ro 0 1
LABEL=BOOT /boot aŭtomate defaŭltoj 0 0

Fine, vi povas munti la ekdiskon, ni bezonos ĝin por la kerno: `mount /dev/mmcblk0p1 /mnt/boot/`

Konstruante Linukso

Por konstrui la kernon (kaj poste la ekŝargilon) sur Debian Testing, vi devas instali la norman aron de GCC, GNU Make kaj la kapdosierojn de GNU C Library por la cela arkitekturo (mi havas armhf), same kiel OpenSSL-kapoj, konzola kalkulilo bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Ĉar la defaŭlta ŝargilo serĉas dosieron zImage sur la dosiersistemo de la ekfunkciigo, estas tempo rompi la flash drive.

  1. Klonado de la kerno estas tro longa, do mi nur elŝutos: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Malpaku kaj iru al la fonta dosierujo: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Agordu antaŭ ol kompili: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. La agordo estas en la dosierujo arch/arm/configs/. Se ne ekzistas, vi povas provi trovi kaj elŝuti pretan kaj transdoni la nomon de la dosiero en ĉi tiu dosierujo al la parametro KBUILD_DEFCONFIG. En ekstremaj kazoj, tuj iru al la sekva alineo.
  3. Vi povas laŭvole agordi la agordojn: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Kaj kruckompilu la bildon: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nun vi povas kopii la kernan dosieron: cp arch/arm/boot/zImage /mnt/boot/
  6. Kaj dosieroj de DeviceTree (priskribo de aparataro disponebla sur la tabulo): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Kaj instalu la modulojn kunvenitajn kiel apartajn dosierojn: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

La kerno estas preta. Vi povas malmunti ĉion: umount /mnt/boot/ /mnt/

Das U Boot

Ĉar la ekŝargilo estas interaga, la tabulo mem, stoka aparato kaj laŭvola USB-al-UART-aparato sufiĉas por testi ĝian funkciadon. Tio estas, vi povas prokrasti la kernon kaj OS por poste.

La granda plimulto de fabrikantoj sugestas uzi Das U-Boot por primara lanĉo. Plena subteno estas kutime provizita en sia propra forko, sed ne forgesu kontribui en la kontraŭfluo. En mia kazo, la estraro estas subtenata en ĉefliniotial forko Mi ignoris.

Ni kolektas la ekŝargilon mem:

  1. Klonu la stabilan branĉon de la deponejo: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Ni iru al la dosierujo mem: cd u-boot
  3. Preparante la konstruan agordon: make mx6ull_14x14_evk_defconfig. Ĉi tio funkcias nur se la agordo estas en Das U-Boot mem, alie vi devos trovi la agordon de la fabrikanto kaj meti ĝin en la radikon de la deponejo en la dosiero. .config, aŭ kunmetita alimaniere rekomendita de la fabrikanto.
  4. Ni kolektas la bildoŝargilon mem per kruc-kompililo armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Kiel rezulto, ni ricevas la dosieron u-boot.imx, ĉi tio estas preta bildo, kiu povas esti skribita al USB-memorilo. Ni skribas al la SD-karto, preterpasante la unuajn 1024 bajtojn. Kial mi elektis celon u-boot.imx? Kial mankis ĝuste 1024 bajtoj? Jen kion ili proponas fari dokumentado. Por aliaj tabuloj, la procezo de konstruado kaj brulado de bildoj povas esti iomete malsamaj.

Farita, vi povas elŝuti. La ekŝargilo devus raporti sian propran version, kelkajn informojn pri la tabulo, kaj provi trovi la kernan bildon sur la diskparto. Se ĝi malsukcesas, ĝi provos lanĉi tra la reto. Ĝenerale, la eligo estas sufiĉe detala, vi povas trovi eraron en kazo de problemo.

Anstataŭ konkludo

Ĉu vi sciis, ke la frunto de delfeno ne estas osta? Ĝi estas laŭvorte tria okulo, grasa lenso por eĥolokigo!

Lanĉante GNU/Linukson sur ARM-tabulo de nulo (uzante Kali kaj iMX.6 kiel ekzemplon)

Lanĉante GNU/Linukson sur ARM-tabulo de nulo (uzante Kali kaj iMX.6 kiel ekzemplon)

fonto: www.habr.com