tl; dr: Po ndërtoj një imazh Kali Linux për një kompjuter ARM, në program debootstrap
, linux
и u-boot
.
Nëse keni blerë disa softuer jo shumë të njohur me një tabelë, mund të përballeni me mungesën e një imazhi të shpërndarjes suaj të preferuar për të. Përafërsisht e njëjta gjë ndodhi me
Procesi i shkarkimit është mjaft i thjeshtë:
- Pajisja është inicializuar.
- Nga disa zona në pajisjen e ruajtjes (karta SD/eMMC/etj) ngarkuesi i ngarkimit lexohet dhe ekzekutohet.
- Bootloader kërkon kernelin e sistemit operativ dhe e ngarkon atë në një zonë memorie dhe e ekzekuton atë.
- Kerneli ngarkon pjesën tjetër të OS.
Ky nivel detajesh është i mjaftueshëm për detyrën time, ju mund të lexoni detajet
Ndërtimi i sistemit të skedarëve rrënjë
Së pari ju duhet të përgatisni seksionet. Das U-Boot mbështet sisteme të ndryshme skedarësh, unë zgjodha FAT32 për të /boot
dhe ext3 për root, kjo është faqosja standarde e imazhit për Kali në ARM. Unë do të përdor GNU Parted, por ju mund të bëni të njëjtën gjë në një mënyrë më të njohur fdisk
. Do t'ju duhet gjithashtu dosfstools
и e2fsprogs
për të krijuar një sistem skedari: apt install parted dosfstools e2fsprogs
.
Ne shënojmë kartën SD:
- Shënoni kartën SD si duke përdorur ndarjen MBR:
parted -s /dev/mmcblk0 mklabel msdos
- Krijo një seksion nën
/boot
për 128 megabajt:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Megabajti i parë i humbur duhet të lihet për vetë shënimin dhe për ngarkuesin. - Ne krijojmë një sistem skedari rrënjësor për të gjithë kapacitetin e mbetur:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Nëse papritmas skedarët e ndarjes nuk janë krijuar ose nuk janë ndryshuar, ju duhet të ekzekutoni 'partprobe', atëherë tabela e ndarjes do të rilexohet.
- Krijo një sistem skedari për ndarjen e nisjes me etiketën
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Krijo një sistem skedari rrënjë me një etiketë
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Shkëlqyeshëm, tani mund ta plotësoni. Për këtë do t'ju duhet gjithashtu debootstrap
, një mjet për krijimin e sistemeve të skedarëve rrënjë për sistemet operative të ngjashme me Debian: apt install debootstrap
.
Ne mbledhim FS:
- Montoni ndarjen brenda
/mnt/
(përdor një pikë montimi më të përshtatshme):mount /dev/mmcblk0p2 /mnt
- Ne në fakt mbushim sistemin e skedarëve:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
... Parametri--include
tregon për të instaluar shtesë disa paketa, kam specifikuar një emulator QEMU të ndërtuar në mënyrë statike. Ju lejon të performonichroot
në mjedisin ARM. Kuptimi i opsioneve të mbetura mund të gjendet nëman debootstrap
. Mos harroni se jo çdo bord ARM e mbështet arkitekturënarmhf
. - Për shkak të ndryshimit në arkitekturë
debootstrap
kryhet në dy faza, e dyta kryhet si kjo:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Tani ju duhet ta vidhosni atë:
chroot /mnt /bin/bash
- Ne plotësojmë
/etc/hosts
и/etc/hostname
objektiv FS. Plotësoni njësoj si përmbajtjen në kompjuterin tuaj lokal, thjesht mos harroni të zëvendësoni emrin e hostit. - Ju mund të personalizoni gjithçka tjetër. Në veçanti, unë instaloj
locales
(çelësat e depove), rikonfiguroni vendndodhjet dhe zonën kohore (dpkg-reconfigure locales tzdata
). Mos harroni të vendosni fjalëkalimin me komandënpasswd
. - Vendosni një fjalëkalim për
root
ekipipasswd
. - Përgatitja e imazhit për mua përfundon me mbushje
/etc/fstab
brenda/mnt/
.
Unë do të ngarkoj në përputhje me etiketat e krijuara më parë, kështu që përmbajtja do të jetë si kjo:
LABEL=ROOTFS / gabime automatike=rimontim-ro 0 1
LABEL=BOOT /parazgjedhjet automatike të nisjes 0 0
Më në fund, mund të montoni ndarjen e nisjes, do të na duhet për kernelin: `mount /dev/mmcblk0p1 /mnt/boot/`
Ndërtimi i Linux-it
Për të ndërtuar kernelin (dhe më pas ngarkuesin) në Debian Testing, ju duhet të instaloni një grup standard të skedarëve të titullit GCC, GNU Make dhe GNU C për arkitekturën e synuar (për mua armhf
), si dhe kokat e OpenSSL, kalkulatori i konsolës bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Meqenëse ngarkuesi i paracaktuar kërkon skedarin zImage
në sistemin e skedarëve të ndarjes së nisjes, është koha për të ndarë flash drive.
- Duhet shumë kohë për të klonuar kernelin, kështu që unë thjesht do të shkarkoj:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Le të shpaketojmë dhe të shkojmë te drejtoria e burimit:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Konfiguro para përpilimit:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfigurimi ndodhet në drejtoriarch/arm/configs/
. Nëse nuk ka asnjë, mund të provoni të gjeni dhe shkarkoni një të gatshme dhe të kaloni emrin e skedarit në këtë drejtori si parametër.KBUILD_DEFCONFIG
. Si mjet i fundit, kaloni menjëherë në pikën tjetër. - Opsionale mund të ndryshoni cilësimet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Dhe ndërthurni imazhin:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Tani mund të kopjoni skedarin e kernelit:
cp arch/arm/boot/zImage /mnt/boot/
- Dhe skedarët nga DeviceTree (përshkrimi i harduerit në tabelë):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- Dhe instaloni modulet e mbledhura në formën e skedarëve të veçantë:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Bërthama është gati. Mund të çmontoni gjithçka: umount /mnt/boot/ /mnt/
Das U-Boot
Meqenëse ngarkuesi është interaktiv, gjithçka që ju nevojitet për të testuar funksionimin e tij është vetë bordi, një pajisje ruajtëse dhe opsionalisht një pajisje USB-në-UART. Kjo do të thotë, ju mund ta shtyni kernelin dhe OS për më vonë.
Shumica dërrmuese e prodhuesve ofrojnë të përdorin Das U-Boot për çizmet fillestare. Mbështetja e plotë zakonisht ofrohet në pirunin e tyre, por ata nuk harrojnë të kontribuojnë në rrjedhën e sipërme. Në rastin tim, bordi mbështetet brenda
Le të mbledhim vetë ngarkuesin:
- Ne klonojmë degën e qëndrueshme të depove:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Le të shkojmë te vetë drejtoria:
cd u-boot
- Përgatitja e konfigurimit të ndërtimit:
make mx6ull_14x14_evk_defconfig
. Kjo funksionon vetëm nëse konfigurimi është në vetë Das U-Boot, përndryshe do t'ju duhet të gjeni konfigurimin e prodhuesit dhe ta vendosni në rrënjën e depove në një skedar.config
, ose montoni në çdo mënyrë tjetër të rekomanduar nga prodhuesi. - Ne mbledhim vetë imazhin e ngarkuesit duke përdorur një ndër-përpilues
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Si rezultat marrim skedarin u-boot.imx
, ky është një imazh i gatshëm që mund të shkruhet në një flash drive. Ne shkruajmë në kartën SD, duke kapërcyer 1024 bajtët e parë. Pse zgjodha Target u-boot.imx
? Pse humba saktësisht 1024 bajt? Kjo është ajo që ata propozojnë të bëjnë në
U krye, mund të nisësh. Bootloader duhet të raportojë versionin e tij, disa informacione rreth bordit dhe të përpiqet të gjejë imazhin e kernelit në ndarje. Nëse nuk ka sukses, do të përpiqet të niset përmes rrjetit. Në përgjithësi, dalja është mjaft e detajuar, mund ta gjeni gabimin nëse ka një problem.
Në vend të një përfundimi
A e dini se balli i një delfini nuk është kockor? Është fjalë për fjalë një sy i tretë, një lente yndyrore për ekolokacion!
Burimi: www.habr.com