Begin GNU/Linux van nuuts af op 'n ARM-bord (gebruik Kali en iMX.6 as 'n voorbeeld)

tl; dr: Ek bou 'n Kali Linux-beeld vir 'n ARM-rekenaar, in die program debootstrap, linux и u-boot.

Begin GNU/Linux van nuuts af op 'n ARM-bord (gebruik Kali en iMX.6 as 'n voorbeeld)

As jy 'n paar nie baie gewilde enkelbord-sagteware gekoop het nie, kan jy dalk gekonfronteer word met die gebrek aan 'n beeld van jou gunsteling verspreiding daarvoor. Met omtrent dieselfde het gebeur beplande Flipper One. Daar is eenvoudig geen Kali Linux vir IMX6 nie (ek kook), so ek moet dit self aanmekaarsit.

Die aflaaiproses is redelik eenvoudig:

  1. Hardeware is geïnisialiseer.
  2. Van die een of ander area op die stoortoestel (SD-kaart/eMMC/ens) word die selflaaiprogram gelees en uitgevoer.
  3. Die selflaaiprogram soek die kern van die bedryfstelsel en laai dit in die een of ander geheue area en voer dit uit.
  4. Die kern laai die res van die bedryfstelsel.

Hierdie vlak van detail is genoeg vir my taak, jy kan die besonderhede lees in 'n ander artikel. Die "sommige" areas hierbo genoem verskil van bord tot bord, wat 'n paar installasieprobleme veroorsaak. Laai bediener ARM-platforms probeer standaardiseer gebruik UEFI, maar solank dit nie vir almal beskikbaar is nie, sal jy alles apart moet afhaal.

Bou die wortellêerstelsel

Eerstens moet jy die afdelings voorberei. Das U-Boot ondersteun verskillende lêerstelsels, waarvoor ek FAT32 gekies het /boot en ext3 vir root, dit is die standaard beeldopmaak vir Kali onder ARM. Ek sal GNU Parted gebruik, maar jy kan dieselfde meer bekend maak fdisk. Jy sal ook nodig hê dosfstools и e2fsprogs om 'n lêerstelsel te skep: apt install parted dosfstools e2fsprogs.

Ons merk die SD-kaart:

  1. Merk die SD-kaart as gebruik van MBR-partisionering: parted -s /dev/mmcblk0 mklabel msdos
  2. Skep 'n afdeling onder /boot vir 128 megagrepe: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Die eerste megagreep wat gemis word, moet gelaat word vir die opmaak self en vir die selflaaiprogram.
  3. Skep 'n wortel FS vir die res van die kapasiteit: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. As jy skielik nie partisielêers geskep of verander het nie, moet jy `partprobe` uitvoer, dan sal die partisietabel herlees word.
  5. Skep 'n lêerstelsel vir die opstartpartisie met die etiket BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Skep 'n wortellêerstelsel met 'n etiket ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Groot, nou kan jy dit invul. Dit sal addisioneel vereis debootstrap, 'n nutsprogram vir die skep van root FS op Debian-agtige bedryfstelsels: apt install debootstrap.

Ons versamel FS:

  1. Monteer die partisie aan /mnt/ (gebruik 'n geriefliker monteerpunt vir jouself): mount /dev/mmcblk0p2 /mnt
  2. Eintlik vul ons die lêerstelsel: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parameter --include spesifiseer om addisioneel sommige pakkette te installeer, het ek 'n staties geboude QEMU-emulator gespesifiseer. Dit laat jou toe om op te tree chroot na die ARM-omgewing. Die betekenis van die ander opsies kan gevind word in man debootstrap. Moenie vergeet dat nie elke ARM-bord die argitektuur ondersteun nie armhf.
  3. As gevolg van die verskil in argitekture debootstrap word in twee fases uitgevoer, die tweede word soos volg uitgevoer: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nou moet jy dit opknapper: chroot /mnt /bin/bash
  5. Ons vul in /etc/hosts и /etc/hostname teiken FS. Vul dieselfde in as die inhoud op jou plaaslike rekenaar, onthou om slegs die gasheernaam te vervang.
  6. Jy kan alles anders pasmaak. In die besonder, ek installeer locales (bewaarpleksleutels), herkonfigurasie van plekke en tydsone (dpkg-reconfigure locales tzdata). Moenie vergeet om die wagwoord met die opdrag in te stel nie passwd.
  7. Stel 'n wagwoord vir root per span passwd.
  8. Die voorbereiding van die beeld vir my eindig met vul /etc/fstab binne /mnt/.

Ek sal oplaai in ooreenstemming met die etikette wat vroeër geskep is, so die inhoud sal soos volg wees:

LABEL=ROOTFS / outomatiese foute=remount-ro 0 1
LABEL=BOOT /boot outomatiese verstek 0 0

Ten slotte kan jy die selflaai partisie monteer, ons sal dit nodig hê vir die kern: `mount /dev/mmcblk0p1 /mnt/boot/`

Die bou van Linux

Om die kern (en dan die selflaaiprogram) op Debian-toetsing te bou, moet jy die standaardstel GCC, GNU Make en die GNU C-biblioteekopskriflêers vir die teikenargitektuur installeer (ek het armhf), sowel as OpenSSL-opskrifte, konsole-sakrekenaar bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Aangesien die versteklaaier vir 'n lêer soek zImage op die lêerstelsel van die opstartpartisie, is dit tyd om die flash drive te breek.

  1. Dit neem te lank om die kern te kloon, so ek sal net aflaai: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Pak uit en gaan na die brongids: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigureer voor samestelling: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Die konfigurasie is in die gids geleë arch/arm/configs/. As daar nie een is nie, kan jy probeer om 'n klaargemaakte een te vind en af ​​te laai en die naam van die lêer in hierdie gids na die parameter deur te gee KBUILD_DEFCONFIG. In uiterste gevalle, gaan dadelik voort na die volgende paragraaf.
  3. U kan die instellings opsioneel aanpas: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. En kruis-samestel die beeld: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nou kan jy die kernlêer kopieer: cp arch/arm/boot/zImage /mnt/boot/
  6. En lêers van DeviceTree (beskrywing van die hardeware op die bord): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. En installeer die modules wat as aparte lêers saamgestel is: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Die pit is gereed. Jy kan alles ontkoppel: umount /mnt/boot/ /mnt/

Das U Boot

Aangesien die selflaaiprogram interaktief is, is al wat jy nodig het om die werking daarvan te toets die bord self, 'n stoortoestel en opsioneel 'n USB-na-UART-toestel. Dit wil sê, jy kan die kern en OS vir later uitstel.

Die oorgrote meerderheid vervaardigers bied aan om Das U-Boot vir die aanvanklike selflaai te gebruik. Volle ondersteuning word gewoonlik in hul eie vurk verskaf, maar hulle vergeet nie om by te dra tot die stroomop nie. In my geval word die direksie ondersteun in hooflyndaarom vurk Ek het geïgnoreer.

Ons versamel die selflaaiprogram self:

  1. Ons kloon die stabiele tak van die bewaarplek: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Kom ons gaan na die gids self: cd u-boot
  3. Berei die boukonfigurasie voor: make mx6ull_14x14_evk_defconfig. Dit werk net as die konfigurasie in Das U-Boot self is, anders sal jy die vervaardiger se konfigurasie moet vind en dit in die wortel van die bewaarplek in die lêer moet plaas .config, of saamgestel op 'n ander manier wat deur die vervaardiger aanbeveel word.
  4. Ons stel die selflaai-afbeelding self saam met 'n kruissamesteller armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

As gevolg hiervan kry ons die lêer u-boot.imx, dit is 'n klaargemaakte prent wat na 'n flash drive geskryf kan word. Ons skryf na die SD-kaart en slaan die eerste 1024 grepe oor. Hoekom het ek Target gekies u-boot.imx? Hoekom het presies 1024 grepe gemis? Dit is wat hulle voorstel om in te doen dokumentasie. Vir ander borde kan die beeldbou- en brandproses effens anders wees.

Klaar, jy kan begin. Die selflaaiprogram moet sy eie weergawe rapporteer, 'n bietjie inligting oor die bord, en probeer om die kernbeeld op die partisie te vind. As dit onsuksesvol is, sal dit probeer om oor die netwerk te begin. Oor die algemeen is die uitvoer redelik gedetailleerd, jy kan die fout vind as daar 'n probleem is.

In plaas daarvan om 'n gevolgtrekking

Het jy geweet dat die voorkop van 'n dolfyn nie benig is nie? Dit is letterlik 'n derde oog, 'n vetterige lens vir eggolokasie!

Begin GNU/Linux van nuuts af op 'n ARM-bord (gebruik Kali en iMX.6 as 'n voorbeeld)

Begin GNU/Linux van nuuts af op 'n ARM-bord (gebruik Kali en iMX.6 as 'n voorbeeld)

Bron: will.com