Iniciar GNU/Linux en un tauler ARM des de zero (utilitzant Kali i iMX.6 com a exemple)

tl; dr: Estic construint una imatge de Kali Linux per a un ordinador ARM, al programa debootstrap, linux и u-boot.

Iniciar GNU/Linux en un tauler ARM des de zero (utilitzant Kali i iMX.6 com a exemple)

Si heu comprat algun programari d'una sola placa no molt popular, potser us trobareu amb la manca d'una imatge de la vostra distribució preferida. Amb això va passar aproximadament el mateix previst Flipper One. Simplement no hi ha Kali Linux per a IMX6 (estic preparant), així que l'he de muntar jo mateix.

El procés de descàrrega és bastant senzill:

  1. El maquinari està inicialitzat.
  2. Des d'alguna àrea del dispositiu d'emmagatzematge (targeta SD/eMMC/etc) el carregador d'arrencada es llegeix i s'executa.
  3. El carregador d'arrencada cerca el nucli del sistema operatiu i el carrega a una àrea de memòria i l'executa.
  4. El nucli carrega la resta del sistema operatiu.

Aquest nivell de detall és suficient per a la meva tasca, podeu llegir els detalls en un altre article. Les "algunes" àrees esmentades anteriorment difereixen d'una placa a una altra, la qual cosa crea algunes dificultats d'instal·lació. Càrrega de plataformes de servidor ARM intentant estandarditzar utilitzant UEFI, però tot i que això no està disponible per a tothom, haureu de muntar-ho tot per separat.

Construcció del sistema de fitxers arrel

Primer cal preparar les seccions. Das U-Boot admet diferents sistemes de fitxers, vaig triar FAT32 per /boot i ext3 per a root, aquest és el disseny d'imatge estàndard per a Kali a ARM. Faré servir GNU Parted, però podeu fer el mateix d'una manera més familiar fdisk. També necessitareu dosfstools и e2fsprogs per crear un sistema de fitxers: apt install parted dosfstools e2fsprogs.

Marquem la targeta SD:

  1. Marqueu la targeta SD com a particionament MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Crea una secció a sota /boot per a 128 megabytes: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. El primer megabyte perdut s'ha de deixar per al propi marcatge i per al carregador d'arrencada.
  3. Creem un sistema de fitxers arrel per a tota la capacitat restant: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Si de sobte els vostres fitxers de partició no s'han creat o no han canviat, heu d'executar `partprobe`, aleshores es tornarà a llegir la taula de particions.
  5. Creeu un sistema de fitxers per a la partició d'arrencada amb l'etiqueta BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Creeu un sistema de fitxers arrel amb una etiqueta ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Genial, ara pots omplir-lo. Per a això també necessitareu debootstrap, una utilitat per crear sistemes de fitxers arrel per a sistemes operatius semblants a Debian: apt install debootstrap.

Recollim FS:

  1. Munta la partició /mnt/ (utilitza un punt de muntatge més convenient): mount /dev/mmcblk0p2 /mnt
  2. En realitat omplim el sistema de fitxers: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Paràmetre --include indica instal·lar addicionalment alguns paquets, he especificat un emulador QEMU construït estàticament. Et permet actuar chroot en l'entorn ARM. El significat de les opcions restants es pot trobar a man debootstrap. No oblideu que no totes les plaques ARM admeten l'arquitectura armhf.
  3. Per la diferència d'arquitectura debootstrap es realitza en dues etapes, la segona es realitza de la següent manera: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Ara l'has de fer malbé: chroot /mnt /bin/bash
  5. omplir /etc/hosts и /etc/hostname FS objectiu. Empleneu el mateix que el contingut del vostre ordinador local, només recordeu substituir el nom d'amfitrió.
  6. Podeu personalitzar tota la resta. En particular, instal·lo locales (claus del repositori), reconfigureu els locals i la zona horària (dpkg-reconfigure locales tzdata). No us oblideu d'establir la contrasenya amb l'ordre passwd.
  7. Estableix una contrasenya per a root equip passwd.
  8. La preparació de la imatge per a mi acaba amb el farcit /etc/fstab dins /mnt/.

Pujaré d'acord amb les etiquetes creades anteriorment, de manera que el contingut serà així:

LABEL=ROOTFS / errors automàtics=remount-ro 0 1
LABEL=BOOT /boot auto per defecte 0 0

Finalment, podeu muntar la partició d'arrencada, la necessitarem per al nucli: `mount /dev/mmcblk0p1 /mnt/boot/`

Construcció de Linux

Per crear el nucli (i després el carregador d'arrencada) a Debian Testing, heu d'instal·lar un conjunt estàndard de fitxers de capçalera de GCC, GNU Make i GNU C Library per a l'arquitectura de destinació (per a mi armhf), així com les capçaleres OpenSSL, calculadora de consola bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Com que el carregador predeterminat cerca el fitxer zImage al sistema de fitxers de la partició d'arrencada, és hora de dividir la unitat flaix.

  1. Es triga massa temps a clonar el nucli, així que només baixaré: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Descomprimim i anem al directori font: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Configurar abans de la compilació: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. La configuració es troba al directori arch/arm/configs/. Si no n'hi ha cap, podeu provar de buscar i descarregar-ne un de ja fet i passar el nom del fitxer en aquest directori com a paràmetre KBUILD_DEFCONFIG. Com a últim recurs, passeu immediatament al següent punt.
  3. Opcionalment, podeu modificar la configuració: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. I compilar la imatge creuada: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Ara podeu copiar el fitxer del nucli: cp arch/arm/boot/zImage /mnt/boot/
  6. I fitxers de DeviceTree (descripció del maquinari a la placa): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. I instal·leu els mòduls recollits en forma de fitxers separats: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

El nucli està llest. Pots desmuntar-ho tot: umount /mnt/boot/ /mnt/

Das U-Boot

Com que el carregador d'arrencada és interactiu, tot el que necessiteu per provar el seu funcionament és la mateixa placa, un dispositiu d'emmagatzematge i, opcionalment, un dispositiu USB a UART. És a dir, podeu posposar el nucli i el sistema operatiu per a més endavant.

La gran majoria dels fabricants ofereixen utilitzar Das U-Boot per a l'arrencada inicial. El suport complet es proporciona normalment a la seva pròpia bifurcació, però no s'obliden de contribuir a l'amunt. En el meu cas, el tauler té suport línia principalTan forquilla Ho vaig ignorar.

Muntem el mateix carregador d'arrencada:

  1. Clonem la branca estable del repositori: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Anem al propi directori: cd u-boot
  3. Preparant la configuració de construcció: make mx6ull_14x14_evk_defconfig. Això només funciona si la configuració es troba al mateix Das U-Boot, en cas contrari, haureu de trobar la configuració del fabricant i posar-la a l'arrel del dipòsit en un fitxer. .config, o muntar de qualsevol altra manera recomanada pel fabricant.
  4. Muntem la pròpia imatge del carregador d'arrencada mitjançant un compilador creuat armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Com a resultat obtenim el fitxer u-boot.imx, aquesta és una imatge ja feta que es pot escriure en una unitat flaix. Escrivim a la targeta SD, saltant els primers 1024 bytes. Per què vaig triar Target u-boot.imx? Per què he perdut exactament 1024 bytes? Això és el que es proposen fer documentació. Per a altres taulers, el procés de creació i gravació d'imatges pot ser lleugerament diferent.

Fet, pots arrencar. El carregador d'arrencada ha d'informar de la seva pròpia versió, d'alguna informació sobre el tauler i intentar trobar la imatge del nucli a la partició. Si no té èxit, intentarà arrencar a través de la xarxa. En general, la sortida és força detallada, podeu trobar l'error si hi ha un problema.

En lloc d'una conclusió

Sabíeu que el front d'un dofí no és ossi? És literalment un tercer ull, una lent grassa per a l'ecolocalització!

Iniciar GNU/Linux en un tauler ARM des de zero (utilitzant Kali i iMX.6 com a exemple)

Iniciar GNU/Linux en un tauler ARM des de zero (utilitzant Kali i iMX.6 com a exemple)

Font: www.habr.com