GNU/Linuxin käynnistäminen ARM-kortilla tyhjästä (käyttäen Kalia ja iMX.6:ta esimerkkinä)

TL, dr: Rakennan ohjelmassa Kali Linux -kuvaa ARM-tietokoneelle debootstrap, linux и u-boot.

GNU/Linuxin käynnistäminen ARM-kortilla tyhjästä (käyttäen Kalia ja iMX.6:ta esimerkkinä)

Jos ostit jonkin ei kovin suositun yksilevyohjelmiston, saatat kohdata kuvan puuttumisen suosikkijakelustasi. Suunnilleen sama asia tapahtui kanssa suunniteltu Flipper One. IMX6:lle ei yksinkertaisesti ole Kali Linuxia (valmistelen), joten minun on koottava se itse.

Latausprosessi on melko yksinkertainen:

  1. Laitteisto alustetaan.
  2. Joltain tallennuslaitteen alueelta (SD-kortti/eMMC/etc.) käynnistyslatain luetaan ja suoritetaan.
  3. Käynnistyslatain etsii käyttöjärjestelmän ydintä ja lataa sen jollekin muistialueelle ja suorittaa sen.
  4. Ydin lataa loput käyttöjärjestelmästä.

Tämä yksityiskohtaisuus riittää tehtävääni, voit lukea yksityiskohdat toisessa artikkelissa. Yllä mainitut "jotkut" alueet vaihtelevat levyittäin, mikä aiheuttaa joitain asennusvaikeuksia. Ladataan ARM-palvelinalustoja yrittää standardoida käyttämällä UEFI:tä, mutta vaikka tämä ei ole kaikkien saatavilla, sinun on koottava kaikki erikseen.

Päätiedostojärjestelmän rakentaminen

Ensin sinun on valmisteltava osiot. Das U-Boot tukee erilaisia ​​tiedostojärjestelmiä, valitsin FAT32:n /boot ja ext3 root:lle, tämä on Kaliin vakiokuvaasettelu ARM:ssa. Käytän GNU Partedia, mutta voit tehdä saman tutummin fdisk. Tarvitset myös dosfstools и e2fsprogs luodaksesi tiedostojärjestelmän: apt install parted dosfstools e2fsprogs.

Merkitsemme SD-kortin:

  1. Merkitse SD-kortti käyttämään MBR-osiointia: parted -s /dev/mmcblk0 mklabel msdos
  2. Luo osio alle /boot 128 megatavulle: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Ensimmäinen menetetty megatavu on jätettävä itse merkinnälle ja käynnistyslataimelle.
  3. Luomme juuritiedostojärjestelmän koko jäljellä olevalle kapasiteetille: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Jos osiotiedostojasi ei yhtäkkiä ole luotu tai ne eivät ole muuttuneet, sinun on suoritettava `partprobe', jolloin osiotaulukko luetaan uudelleen.
  5. Luo tiedostojärjestelmä käynnistysosiolle tunnisteella BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Luo juuritiedostojärjestelmä tunnisteella ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Hienoa, nyt voit täyttää sen. Tätä varten tarvitset lisäksi debootstrap, apuohjelma juuritiedostojärjestelmien luomiseen Debianin kaltaisille käyttöjärjestelmille: apt install debootstrap.

Keräämme FS:

  1. Kiinnitä osio sisään /mnt/ (käytä kätevämpää kiinnityspistettä): mount /dev/mmcblk0p2 /mnt
  2. Täytämme itse asiassa tiedostojärjestelmän: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parametri --include ilmaisee joidenkin pakettien lisäasennuksen, määritin staattisesti rakennetun QEMU-emulaattorin. Sen avulla voit esiintyä chroot ARM-ympäristössä. Muiden vaihtoehtojen merkitys löytyy kohdasta man debootstrap. Älä unohda, että kaikki ARM-levyt eivät tue arkkitehtuuria armhf.
  3. Arkkitehtuurierojen takia debootstrap suoritetaan kahdessa vaiheessa, toinen suoritetaan seuraavasti: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nyt sinun täytyy rullata se: chroot /mnt /bin/bash
  5. täyttää /etc/hosts и /etc/hostname kohde FS. Täytä sama kuin paikallisen tietokoneesi sisältö, muista vain vaihtaa isäntänimi.
  6. Voit muokata kaikkea muuta. Erityisesti asennan locales (arkistoavaimet), määritä maa- ja aikavyöhyke uudelleen (dpkg-reconfigure locales tzdata). Älä unohda asettaa salasanaa komennolla passwd.
  7. Aseta salasana root joukkue passwd.
  8. Kuvan valmistelu päättyy minulle täyttöön /etc/fstab sisällä /mnt/.

Lataan aiemmin luotujen tunnisteiden mukaisesti, joten sisältö on seuraava:

LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto oletusasetukset 0 0

Lopuksi voit liittää käynnistysosion, tarvitsemme sitä ytimelle: `mount /dev/mmcblk0p1 /mnt/boot/`

Linux-rakennus

Jos haluat rakentaa ytimen (ja sitten käynnistyslataimen) Debian-testaukseen, sinun on asennettava standardisarja GCC-, GNU Make- ja GNU C Library -otsikkotiedostoja kohdearkkitehtuurille (minulle armhf), sekä OpenSSL-otsikot, konsolilaskin bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Koska oletuslatausohjelma etsii tiedostoa zImage käynnistysosion tiedostojärjestelmässä on aika jakaa flash-asema.

  1. Ytimen kloonaaminen kestää liian kauan, joten lataan vain: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Puretaan paketti ja siirrytään lähteiden hakemistoon: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Määritä ennen kääntämistä: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguraatio sijaitsee hakemistossa arch/arm/configs/. Jos sellaista ei ole, voit yrittää etsiä ja ladata valmiin tiedoston ja antaa tässä hakemistossa olevan tiedoston nimen parametriksi KBUILD_DEFCONFIG. Viimeisenä keinona siirry välittömästi seuraavaan kohtaan.
  3. Vaihtoehtoisesti voit säätää asetuksia: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ja käännä kuva ristiin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nyt voit kopioida ydintiedoston: cp arch/arm/boot/zImage /mnt/boot/
  6. Ja tiedostot DeviceTreestä (laitteiston kuvaus taululla): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ja asenna erillisinä tiedostoina kerätyt moduulit: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Ydin on valmis. Voit irrottaa kaiken: umount /mnt/boot/ /mnt/

Se U-boot

Koska käynnistyslatain on interaktiivinen, sen toiminnan testaamiseen tarvitset vain itse levyn, tallennuslaitteen ja valinnaisesti USB-UART-laitteen. Eli voit lykätä ytimen ja käyttöjärjestelmän myöhempää käyttöä varten.

Suurin osa valmistajista tarjoaa Das U-Bootin käyttöä alkuperäiseen käynnistykseen. Täysi tuki tarjotaan yleensä heidän omassa haarukassaan, mutta he eivät unohda osallistua ylävirtaan. Minun tapauksessani lauta on tuettu päälinja, siis haarukka Jätin sen huomioimatta.

Kootaan itse käynnistyslatain:

  1. Kloonaamme arkiston vakaan haaran: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Siirrytään itse hakemistoon: cd u-boot
  3. Rakennuskokoonpanon valmistelu: make mx6ull_14x14_evk_defconfig. Tämä toimii vain, jos asetukset ovat itse Das U-Bootissa, muuten sinun on löydettävä valmistajan asetukset ja asetettava se arkiston juureen tiedostossa .configtai koota muulla valmistajan suosittelemalla tavalla.
  4. Kokoamme itse käynnistyslataimen kuvan ristikääntäjällä armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Tuloksena saamme tiedoston u-boot.imx, tämä on valmis kuva, joka voidaan kirjoittaa muistitikulle. Kirjoitamme SD-kortille ohittaen ensimmäiset 1024 tavua. Miksi valitsin Targetin u-boot.imx? Miksi minulta puuttui täsmälleen 1024 tavua? Tätä he ehdottavat tehtäväksi dokumentointi. Muilla levyillä kuvanrakennus- ja tallennusprosessi voi olla hieman erilainen.

Valmis, voit käynnistää. Käynnistyslataimen tulee raportoida oma versionsa, joitain tietoja levystä ja yrittää löytää ytimen näköistiedosto osiosta. Jos se ei onnistu, se yrittää käynnistyä verkon kautta. Yleensä tulos on melko yksityiskohtainen, voit löytää virheen, jos on ongelma.

Sen sijaan johtopäätös

Tiesitkö, että delfiinin otsa ei ole luinen? Se on kirjaimellisesti kolmas silmä, rasvainen linssi kaikulokaatioon!

GNU/Linuxin käynnistäminen ARM-kortilla tyhjästä (käyttäen Kalia ja iMX.6:ta esimerkkinä)

GNU/Linuxin käynnistäminen ARM-kortilla tyhjästä (käyttäen Kalia ja iMX.6:ta esimerkkinä)

Lähde: will.com