Pagsugod sa GNU/Linux sa usa ka ARM board gikan sa wala (gamit ang Kali ug iMX.6 isip pananglitan)

tl; dr: Nagtukod ko og Kali Linux image para sa ARM computer, sa program debootstrap, linux ΠΈ u-boot.

Pagsugod sa GNU/Linux sa usa ka ARM board gikan sa wala (gamit ang Kali ug iMX.6 isip pananglitan)

Kung gipalit nimo ang pipila nga dili kaayo sikat nga single-board software, mahimo ka mag-atubang sa kakulang sa usa ka imahe sa imong paborito nga pag-apod-apod alang niini. Gibana-bana nga parehas ang nahitabo sa giplano nga Flipper One. Wala’y Kali Linux para sa IMX6 (nag-andam ako), mao nga kinahanglan nako nga i-assemble kini sa akong kaugalingon.

Ang proseso sa pag-download yano ra:

  1. Gisugdan ang hardware.
  2. Gikan sa pipila ka lugar sa storage device (SD card/eMMC/etc) ang bootloader gibasa ug gipatuman.
  3. Gipangita sa bootloader ang kernel sa operating system ug gikarga kini sa pipila nga lugar sa panumduman ug gipatuman kini.
  4. Ang kernel nagkarga sa nahabilin nga OS.

Kini nga lebel sa detalye igo na alang sa akong buluhaton, mahimo nimong basahon ang mga detalye sa laing artikulo. Ang "pipila" nga mga lugar nga gihisgutan sa ibabaw magkalahi gikan sa board ngadto sa board, nga nagmugna og pipila ka mga kalisud sa pag-instalar. Nag-load sa mga platform sa ARM server naningkamot sa pag-standardize gamit ang UEFI, apan samtang dili kini magamit sa tanan, kinahanglan nimo nga tipunon ang tanan nga gilain.

Pagtukod sa root file system

Una kinahanglan nimo nga andamon ang mga seksyon. Gisuportahan sa Das U-Boot ang lainlaing mga sistema sa file, gipili nako ang FAT32 /boot ug ext3 alang sa gamut, kini ang standard nga layout sa imahe alang sa Kali sa ARM. Gigamit nako ang GNU Parted, apan mahimo nimo ang parehas sa mas pamilyar nga paagi fdisk. Magkinahanglan ka usab dosfstools ΠΈ e2fsprogs sa paghimo og file system: apt install parted dosfstools e2fsprogs.

Among markahan ang SD card:

  1. Markahi ang SD card nga naggamit sa MBR partitioning: parted -s /dev/mmcblk0 mklabel msdos
  2. Paghimo og seksyon sa ubos /boot alang sa 128 megabytes: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Ang una nga megabyte nga wala kinahanglan ibilin alang sa markup mismo ug alang sa bootloader.
  3. Naghimo kami og root file system alang sa tibuok nga nahabilin nga kapasidad: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Kung sa kalit ang imong partition files wala nahimo o wala mausab, kinahanglan nimo nga modagan ang `partprobe`, unya ang partition table basahon pag-usab.
  5. Paghimo og file system alang sa boot partition nga adunay label BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Paghimo og root file system nga adunay label ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Maayo, mahimo nimong pun-on kini. Alang niini kinahanglan nimo dugang debootstrap, usa ka gamit alang sa paghimo og mga root file system alang sa mga operating system nga sama sa Debian: apt install debootstrap.

Gikolekta namo ang FS:

  1. I-mount ang partition sa /mnt/ (gamit ug mas kombenyente nga mount point): mount /dev/mmcblk0p2 /mnt
  2. Gipuno gyud namo ang file system: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameter --include nagpaila sa dugang nga pag-instalar sa pipila ka mga pakete, akong gipiho ang usa ka statically built QEMU emulator. Kini nagtugot kanimo sa pagbuhat chroot sa palibot sa ARM. Ang kahulogan sa nahabilin nga mga kapilian makita sa man debootstrap. Ayaw kalimti nga dili tanan nga ARM board nagsuporta sa arkitektura armhf.
  3. Tungod sa kalainan sa arkitektura debootstrap gihimo sa duha ka yugto, ang ikaduha gihimo sama niini: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Karon kinahanglan nimo nga usbon kini: chroot /mnt /bin/bash
  5. Among pun-an /etc/hosts ΠΈ /etc/hostname target nga FS. Pun-i ang parehas sa sulud sa imong lokal nga kompyuter, hinumdomi nga pulihan ang hostname.
  6. Mahimo nimong ipasibo ang tanan nga uban pa. Sa partikular, akong gi-install locales (mga yawe sa repositoryo), i-reconfigure ang mga lokal ug time zone (dpkg-reconfigure locales tzdata). Ayaw kalimti ang pagbutang sa password gamit ang mando passwd.
  7. Pagbutang ug password para sa root team passwd.
  8. Ang pag-andam sa imahe alang kanako natapos sa pagpuno /etc/fstab sa sulod /mnt/.

Mag-upload ko subay sa nabuhat na nga mga tag, aron ang sulod mahimong sama niini:

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

Sa katapusan, mahimo nimong i-mount ang partition sa boot, kinahanglan namon kini alang sa kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

Pagtukod sa Linux

Aron matukod ang kernel (ug dayon ang bootloader) sa Debian Testing, kinahanglan nimo nga i-install ang usa ka standard set sa GCC, GNU Make ug GNU C Library header file alang sa target nga arkitektura (para kanako. armhf), ingon man ang mga ulohan sa OpenSSL, console calculator bc, bison ΠΈ flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Tungod kay ang default loader nangita alang sa file zImage sa file system sa boot partition, panahon na sa pagbahin sa flash drive.

  1. Dugay kaayo ang pag-clone sa kernel, mao nga mag-download lang ko: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Atong i-unpack ug adto sa direktoryo nga adunay mga tinubdan: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. I-configure sa dili pa i-compile: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Ang config nahimutang sa direktoryo arch/arm/configs/. Kung wala, mahimo nimong sulayan pagpangita ug i-download ang usa nga andam ug ipasa ang ngalan sa file sa kini nga direktoryo ingon usa ka parameter KBUILD_DEFCONFIG. Isip kataposang paagi, balhin dayon sa sunod nga punto.
  3. Opsyonal nga mahimo nimong i-tweak ang mga setting: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ug cross-compile ang imahe: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Karon mahimo nimong kopyahon ang kernel file: cp arch/arm/boot/zImage /mnt/boot/
  6. Ug mga file gikan sa DeviceTree (paghulagway sa hardware sa board): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ug i-install ang mga module nga nakolekta sa porma sa lahi nga mga file: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Andam na ang kernel. Mahimo nimong i-unmount ang tanan: umount /mnt/boot/ /mnt/

Das U-Boot

Tungod kay ang bootloader interactive, ang kinahanglan nimo nga sulayan ang operasyon niini mao ang board mismo, usa ka storage device, ug usa ka USB-to-UART device. Kana mao, mahimo nimong i-postpone ang kernel ug OS alang sa ulahi.

Ang kadaghanan sa mga tiggama nagtanyag sa paggamit sa Das U-Boot alang sa inisyal nga boot. Ang bug-os nga suporta sagad nga gihatag sa ilang kaugalingon nga tinidor, apan dili sila makalimot sa pag-amot sa upstream. Sa akong kaso, ang board gisuportahan sa mainlinebusa tinidor Gibaliwala nako.

Atong tipunon ang bootloader mismo:

  1. Gi-clone namo ang stable nga sanga sa repository: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Adto ta sa direktoryo mismo: cd u-boot
  3. Pag-andam sa configuration sa pagtukod: make mx6ull_14x14_evk_defconfig. Kini molihok lamang kung ang pag-configure naa sa Das U-Boot mismo, kung dili kinahanglan nimo pangitaon ang config sa tiggama ug ibutang kini sa gamut sa repository sa usa ka file .config, o pag-assemble sa bisan unsang paagi nga girekomenda sa tiggama.
  4. Among gi-assemble ang bootloader image mismo gamit ang cross-compiler armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Ingon usa ka sangputanan makuha namon ang file u-boot.imx, kini usa ka andam nga imahe nga mahimong isulat sa usa ka flash drive. Nagsulat kami sa SD card, gilaktawan ang unang 1024 bytes. Nganong gipili nako ang Target u-boot.imx? Nganong gimingaw man ko sa eksaktong 1024 bytes? Kini ang ilang gisugyot nga buhaton dokumentasyon. Alang sa ubang mga tabla, ang paghimo sa imahe ug proseso sa pagrekord mahimong lahi gamay.

Tapos na, mahimo ka mag-boot. Ang bootloader kinahanglan nga magreport sa kaugalingon nga bersyon, pipila ka kasayuran bahin sa board, ug pagsulay nga makit-an ang imahe sa kernel sa partisyon. Kung dili molampos, kini mosulay sa pag-boot sa network. Sa kinatibuk-an, ang output medyo detalyado, makit-an nimo ang sayup kung adunay problema.

Kay sa usa ka konklusyon

Nahibal-an ba nimo nga ang agtang sa dolphin dili bukog? Kini literal nga ikatulo nga mata, usa ka tambok nga lente alang sa echolocation!

Pagsugod sa GNU/Linux sa usa ka ARM board gikan sa wala (gamit ang Kali ug iMX.6 isip pananglitan)

Pagsugod sa GNU/Linux sa usa ka ARM board gikan sa wala (gamit ang Kali ug iMX.6 isip pananglitan)

Source: www.habr.com