Kòmanse GNU/Linux sou yon tablo ARM nan grafouyen (sèvi ak Kali ak iMX.6 kòm yon egzanp)

tl;: Mwen bati yon imaj Kali Linux pou yon òdinatè ARM, nan pwogram nan debootstrap, linux и u-boot.

Kòmanse GNU/Linux sou yon tablo ARM nan grafouyen (sèvi ak Kali ak iMX.6 kòm yon egzanp)

Si ou te achte kèk lojisyèl pa trè popilè yon sèl-tablo, ou ta ka fè fas ak mank de yon imaj distribisyon pi renmen ou pou li. Apeprè menm bagay la te pase ak te planifye Flipper One. Pa gen tou senpleman Kali Linux pou IMX6 (mwen ap prepare), kidonk mwen oblije rasanble li tèt mwen.

Pwosesis download la se byen senp:

  1. Materyèl la inisyalize.
  2. Soti nan kèk zòn sou aparèy depo a (kat SD / eMMC / elatriye) bootloader la li epi egzekite.
  3. Bootloader la chèche nwayo sistèm operasyon an epi chaje li nan kèk zòn memwa epi egzekite li.
  4. Kernel la chaje rès eksplwatasyon an.

Nivo detay sa a ase pou travay mwen an, ou ka li detay yo nan yon lòt atik. "Kèk" zòn yo mansyone pi wo a diferan de tablo an tablo, ki kreye kèk difikilte enstalasyon. Chaje platfòm sèvè ARM ap eseye estandadize lè l sèvi avèk UEFI, men pandan ke sa a pa disponib pou tout moun, w ap oblije rasanble tout bagay separeman.

Bati sistèm dosye rasin lan

Premye ou bezwen prepare seksyon yo. Das U-Boot sipòte diferan sistèm fichye, mwen te chwazi FAT32 pou /boot ak ext3 pou rasin, sa a se layout imaj estanda pou Kali sou ARM. Mwen pral sèvi ak GNU Parted, men ou ka fè menm bagay la nan yon fason ki pi abitye fdisk. W ap bezwen tou dosfstools и e2fsprogs pou kreye yon sistèm fichye: apt install parted dosfstools e2fsprogs.

Nou make kat SD la:

  1. Make kat SD la kòm itilize MBR partitionnement: parted -s /dev/mmcblk0 mklabel msdos
  2. Kreye yon seksyon anba /boot pou 128 megabytes: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Premye megaokte ki rate a dwe kite pou maketing nan tèt li ak pou bootloader la.
  3. Nou kreye yon sistèm dosye rasin pou tout kapasite ki rete a: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Si toudenkou dosye patisyon ou yo pa te kreye oswa yo pa chanje, ou bezwen kouri `partprobe`, Lè sa a, tab la patisyon yo pral re-li.
  5. Kreye yon sistèm dosye pou patisyon bòt la ak etikèt la BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Kreye yon sistèm fichye rasin ak yon etikèt ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Gwo, kounye a ou ka ranpli li. Pou sa w ap bezwen anplis debootstrap, yon sèvis piblik pou kreye sistèm dosye rasin pou sistèm opere tankou Debian: apt install debootstrap.

Nou kolekte FS:

  1. Monte patisyon an nan /mnt/ (sèvi ak yon pwen mòn ki pi pratik): mount /dev/mmcblk0p2 /mnt
  2. Nou aktyèlman ranpli sistèm nan dosye: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Paramèt --include endike pou enstale kèk pakè anplis, mwen espesifye yon Emulation QEMU ki bati statikman. Li pèmèt ou fè chroot nan anviwònman ARM. Ou ka jwenn siyifikasyon an nan opsyon ki rete yo nan man debootstrap. Pa bliye ke pa tout tablo ARM sipòte achitekti a armhf.
  3. Akòz diferans ki genyen nan achitekti debootstrap fèt an de etap, dezyèm lan fèt konsa: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Koulye a, ou bezwen vis li: chroot /mnt /bin/bash
  5. Nou ranpli /etc/hosts и /etc/hostname sib FS. Ranpli menm bagay ak kontni an sou òdinatè lokal ou a, jis sonje ranplase hostname la.
  6. Ou ka personnaliser tout lòt bagay. An patikilye, mwen enstale locales (kle depo), rekonfigire lokal yo ak zòn tan (dpkg-reconfigure locales tzdata). Pa bliye mete modpas la ak lòd la passwd.
  7. Mete yon modpas pou root ekip passwd.
  8. Preparasyon imaj la pou mwen fini ak ranpli /etc/fstab andedan /mnt/.

Mwen pral telechaje an akò ak tags yo te kreye deja, kidonk kontni an pral tankou sa a:

LABEL=ROOTFS / erè oto=remount-ro 0 1
LABEL=BOOT /boot oto default 0 0

Finalman, ou ka monte patisyon bòt la, nou pral bezwen li pou nwayo a: `mount /dev/mmcblk0p1 /mnt/boot/`

Linux bati

Pou konstwi nwayo a (ak Lè sa a, bootloader la) sou Debian Testing, ou bezwen enstale yon seri estanda GCC, GNU Make ak dosye header GNU C Library pou achitekti sib la (pou mwen armhf), osi byen ke OpenSSL headers, kalkilatris konsole bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Depi loader default la ap chèche dosye a zImage sou sistèm dosye a nan patisyon an bòt, li lè yo divize kondwi a flash.

  1. Li pran twòp tan pou klonaj nwayo a, kidonk mwen pral jis telechaje: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Ann debake epi ale nan anyè a ak sous yo: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigirasyon anvan konpilasyon: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigirasyon an sitiye nan anyè a arch/arm/configs/. Si pa gen okenn, ou ka eseye jwenn ak telechaje yon sèl ki pare epi pase non an nan dosye a nan anyè sa a kòm yon paramèt. KBUILD_DEFCONFIG. Kòm yon dènye rekou, imedyatman deplase sou pwochen pwen an.
  3. Si ou vle, ou ka ajiste anviwònman yo: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ak kwa-konpile imaj la: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Koulye a, ou ka kopye fichye nwayo a: cp arch/arm/boot/zImage /mnt/boot/
  6. Ak dosye ki soti nan DeviceTree (deskripsyon pyès ki nan konpitè sou tablo a): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ak enstale modil yo kolekte nan fòm lan nan dosye separe: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel la pare. Ou ka demonte tout bagay: umount /mnt/boot/ /mnt/

Das U-Boot

Depi bootloader a entèaktif, tout sa ou bezwen teste operasyon li yo se tablo a li menm, yon aparèy depo, ak opsyonèlman yon aparèy USB-a-UART. Sa vle di, ou ka ranvwaye nwayo a ak OS pou pita.

A vas majorite de manifaktirè yo ofri yo sèvi ak Das U-Boot pou bòt inisyal la. Sipò konplè anjeneral bay nan pwòp fouchèt yo, men yo pa bliye kontribye nan en an. Nan ka mwen an, tablo a sipòte nan liy prensipalSe poutèt sa fouchèt Mwen inyore li.

Ann rasanble bootloader la tèt li:

  1. Nou klonaj branch ki estab nan repozitwa a: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Ann ale nan anyè a li menm: cd u-boot
  3. Prepare konfigirasyon konstriksyon an: make mx6ull_14x14_evk_defconfig. Sa a sèlman travay si konfigirasyon an se nan Das U-Boot tèt li, otreman w ap bezwen jwenn konfigirasyon manifakti a epi mete l nan rasin depo a nan yon dosye. .config, oswa rasanble nan nenpòt lòt fason manifakti a rekòmande.
  4. Nou rasanble imaj bootloader la tèt li lè l sèvi avèk yon kwa-konpilateur armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Kòm yon rezilta nou jwenn dosye a u-boot.imx, sa a se yon imaj ki pare ki ka ekri nan yon kondwi flash. Nou ekri nan kat SD la, sote premye 1024 bytes yo. Poukisa mwen te chwazi Target u-boot.imx? Poukisa mwen te manke egzakteman 1024 bytes? Se sa yo pwopoze pou yo fè nan dokiman. Pou lòt ankadreman, pwosesis bilding imaj ak anrejistreman an ka yon ti kras diferan.

Fè, ou ka bòt. Bootloader la dwe rapòte pwòp vèsyon li yo, kèk enfòmasyon sou tablo a, epi eseye jwenn imaj nwayo a sou patisyon an. Si li pa reyisi, li pral eseye bòt sou rezo a. An jeneral, pwodiksyon an byen detaye, ou ka jwenn erè a si gen yon pwoblèm.

Olye pou yo yon konklizyon

Èske w te konnen fwon yon dofen pa zo? Li literalman yon twazyèm je, yon lantiy gra pou ekolokasyon!

Kòmanse GNU/Linux sou yon tablo ARM nan grafouyen (sèvi ak Kali ak iMX.6 kòm yon egzanp)

Kòmanse GNU/Linux sou yon tablo ARM nan grafouyen (sèvi ak Kali ak iMX.6 kòm yon egzanp)

Sous: www.habr.com