Գործարկել GNU/Linux-ը ARM տախտակի վրա զրոյից (օգտագործելով Kali և iMX.6 որպես օրինակ)

tl; drԵս ծրագրում կառուցում եմ Kali Linux պատկեր ARM համակարգչի համար debootstrap, linux и u-boot.

Գործարկել GNU/Linux-ը ARM տախտակի վրա զրոյից (օգտագործելով Kali և iMX.6 որպես օրինակ)

Եթե ​​դուք գնել եք ոչ այնքան հայտնի մի վճարող, ապա կարող եք հանդիպել դրա համար ձեր սիրած բաշխման հավաքածուի պատկերի բացակայությանը: Մոտավորապես նույն բանը պատահեց պլանավորված Flipper One-ը. IMX6-ի համար Kali Linux-ը պարզապես չկա (ես պատրաստում եմ), այնպես որ ես պետք է ինքս հավաքեմ:

Ներբեռնման գործընթացը բավականին պարզ է.

  1. Սարքավորումը սկզբնավորվել է:
  2. Պահպանման սարքի որոշ տարածքից (SD քարտ/eMMC/և այլն) բեռնիչը կարդացվում և գործարկվում է:
  3. Բեռնիչը փնտրում է օպերացիոն համակարգի միջուկը և այն բեռնում է հիշողության որոշ տարածք և կատարում այն:
  4. Միջուկը բեռնում է ՕՀ-ի մնացած մասը:

Իմ առաջադրանքի համար մանրամասնության այս մակարդակը բավական է, կարող եք կարդալ մանրամասները մեկ այլ հոդվածում. Վերը նշված «որոշ» տարածքները տարբերվում են տախտակից տախտակ, ինչը ստեղծում է տեղադրման որոշ դժվարություններ: Սերվերի ARM հարթակների բեռնում փորձում է ստանդարտացնել օգտագործելով UEFI, բայց քանի դեռ այն հասանելի չէ բոլորի համար, դուք ստիպված կլինեք ամեն ինչ հավաքել առանձին:

Արմատային ֆայլային համակարգի կառուցում

Նախ անհրաժեշտ է պատրաստել բաժիններ. Das U-Boot-ն աջակցում է տարբեր ֆայլային համակարգերի, ես ընտրեցի FAT32-ը /boot և ext3 արմատի համար, սա ստանդարտ պատկերի նշագրումն է Kali-ի համար ARM-ի տակ: Ես կօգտագործեմ GNU Parted-ը, բայց դուք կարող եք նույնը ավելի ծանոթ դարձնել fdisk. Ձեզ նույնպես անհրաժեշտ կլինի dosfstools и e2fsprogs ֆայլային համակարգ ստեղծելու համար. apt install parted dosfstools e2fsprogs.

SD քարտի բաժանում.

  1. Նշեք SD քարտը որպես MBR բաժանման օգտագործմամբ. parted -s /dev/mmcblk0 mklabel msdos
  2. Ստեղծեք բաժին /boot 128 մեգաբայթի համար. parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Առաջին բաց թողնված մեգաբայթը պետք է մնա հենց նշագրման և բեռնիչի համար:
  3. Ստեղծեք արմատային FS մնացած հզորության համար. parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Եթե ​​հանկարծ դուք չեք ստեղծել կամ փոխել բաժանման ֆայլերը, դուք պետք է գործարկեք «partprobe», ապա բաժանման աղյուսակը կվերընթերցվի:
  5. Ստեղծեք պիտակավորված boot partition ֆայլային համակարգ BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Ստեղծեք արմատային ֆայլային համակարգ պիտակով ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Հիանալի է, հիմա կարող եք լրացնել այն: Սա լրացուցիչ կպահանջի debootstrapDebian-ի նման օպերացիոն համակարգերում root FS ստեղծելու օգտակար ծրագիր. apt install debootstrap.

Մենք հավաքում ենք FS:

  1. Տեղադրեք միջնորմը /mnt/ (օգտագործեք ձեզ համար ավելի հարմար մոնտաժային կետ). mount /dev/mmcblk0p2 /mnt
  2. Իրականում մենք լրացնում ենք ֆայլային համակարգը. debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Պարամետր --include սահմանում է լրացուցիչ տեղադրել որոշ փաթեթներ, ես նշել եմ ստատիկորեն կառուցված QEMU էմուլյատոր: Այն թույլ է տալիս կատարել chroot ARM միջավայրին. Մյուս տարբերակների իմաստը կարելի է գտնել man debootstrap. Մի մոռացեք, որ ARM-ի բոլոր տախտակները չեն աջակցում ճարտարապետությանը armhf.
  3. Ճարտարապետությունների տարբերության պատճառով debootstrap իրականացվում է երկու փուլով, երկրորդը կատարվում է հետևյալ կերպ. chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Այժմ դուք պետք է պտտեք. chroot /mnt /bin/bash
  5. Լցնում ենք /etc/hosts и /etc/hostname թիրախ FS. Լրացրեք նույնը, ինչ ձեր տեղական համակարգչի բովանդակությունը, հիշեք, որ փոխարինեք միայն հոսթի անունը:
  6. Դուք կարող եք հարմարեցնել մնացած ամեն ինչ: Մասնավորապես տեղադրում եմ locales (պահեստի ստեղներ), տեղանքների և ժամային գոտու վերակազմավորում (dpkg-reconfigure locales tzdata). Մի մոռացեք գաղտնաբառ սահմանել հրամանով passwd.
  7. Սահմանեք գաղտնաբառ root թիմը passwd.
  8. Պատկերի պատրաստումն ինձ համար ավարտվում է լրացնելով /etc/fstab ներսում /mnt/.

Ես կբեռնեմ ավելի վաղ ստեղծված պիտակների համաձայն, այնպես որ բովանդակությունը կլինի այսպիսին.

LABEL = ROOTFS / ավտոմատ սխալներ = remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0

Վերջապես, դուք կարող եք տեղադրել boot partition-ը, այն մեզ անհրաժեշտ կլինի միջուկի համար՝ «mount /dev/mmcblk0p1 /mnt/boot/»:

Linux-ի կառուցում

Debian Testing-ի վրա միջուկը (և այնուհետև բեռնիչը) կառուցելու համար դուք պետք է տեղադրեք GCC, GNU Make և GNU C գրադարանի վերնագրի ֆայլերի ստանդարտ փաթեթը թիրախային ճարտարապետության համար (ես ունեմ armhf), ինչպես նաև OpenSSL վերնագրեր, կոնսոլային հաշվիչ bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Քանի որ լռելյայն բեռնիչը փնտրում է ֆայլ zImage boot partition-ի ֆայլային համակարգում ժամանակն է կոտրել ֆլեշ կրիչը:

  1. Միջուկի կլոնավորումը չափազանց երկար է, ուստի ես պարզապես կներբեռնեմ. wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Բացեք փաթեթավորումը և անցեք աղբյուրի գրացուցակ. tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Կազմավորելուց առաջ կազմաձևեք՝ make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Կազմաձևը գրացուցակում է arch/arm/configs/. Եթե ​​չկա, կարող եք փորձել գտնել և ներբեռնել պատրաստը և փոխանցել այս գրացուցակի ֆայլի անունը պարամետրին: KBUILD_DEFCONFIG. Ծայրահեղ դեպքերում անմիջապես անցեք հաջորդ պարբերությանը:
  3. Դուք կարող եք կամայականորեն ուղղել կարգավորումները. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Եվ խաչաձև կազմեք պատկերը. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Այժմ դուք կարող եք պատճենել միջուկի ֆայլը. cp arch/arm/boot/zImage /mnt/boot/
  6. Եվ DeviceTree-ից ստացված ֆայլերը (տախտակի վրա առկա սարքավորումների նկարագրությունը). cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Եվ տեղադրեք առանձին ֆայլերով հավաքված մոդուլները. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Միջուկը պատրաստ է։ Դուք կարող եք ապամոնտաժել ամեն ինչ. umount /mnt/boot/ /mnt/

Das U Boot

Քանի որ bootloader-ը ինտերակտիվ է, ինքնին տախտակը, պահեստավորման սարքը և կամընտիր USB-to-UART սարքը բավարար են դրա աշխատանքը ստուգելու համար: Այսինքն՝ միջուկը և ՕՀ-ն կարող եք հետաձգել ավելի ուշ։

Արտադրողների ճնշող մեծամասնությունը առաջարկում է օգտագործել Das U-Boot հիմնական բեռնախցիկի համար: Ամբողջական աջակցությունը սովորաբար տրամադրվում է իր պատառաքաղով, բայց մի մոռացեք նպաստել հոսանքին հակառակ: Իմ դեպքում, խորհուրդը աջակցվում է հիմնականԱյնքան պատառաքաղ Ես անտեսեցի.

Մենք ինքնին հավաքում ենք bootloader-ը.

  1. Կլոնավորեք պահեստի կայուն մասնաճյուղը. git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Եկեք գնանք ինքնին գրացուցակ. cd u-boot
  3. Կառուցման կոնֆիգուրացիայի պատրաստում. make mx6ull_14x14_evk_defconfig. Սա աշխատում է միայն այն դեպքում, եթե կոնֆիգուրացիան ինքնին Das U-Boot-ում է, հակառակ դեպքում դուք պետք է գտնեք արտադրողի կոնֆիգուրը և տեղադրեք այն ֆայլի պահեստի արմատում: .config, կամ հավաքվել է արտադրողի կողմից առաջարկվող այլ եղանակով:
  4. Մենք ինքնին հավաքում ենք bootloader պատկերը խաչաձեւ կոմպիլյատորով armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Արդյունքում մենք ստանում ենք ֆայլը u-boot.imx, սա պատրաստի պատկեր է, որը կարելի է գրել USB ֆլեշ կրիչում։ Մենք գրում ենք SD քարտին՝ բաց թողնելով առաջին 1024 բայթը: Ինչու՞ ընտրեցի թիրախը u-boot.imx? Ինչու՞ բաց թողել ուղիղ 1024 բայթ: Սա այն է, ինչ նրանք առաջարկում են անել փաստաթղթավորում. Այլ տախտակների համար պատկերի կառուցման և այրման գործընթացը կարող է մի փոքր տարբեր լինել:

Կատարված է, կարող եք ներբեռնել: Bootloader-ը պետք է զեկուցի իր սեփական տարբերակը, որոշ տեղեկություններ տախտակի մասին և փորձի գտնել միջուկի պատկերը միջնորմում: Եթե ​​այն ձախողվի, այն կփորձի բեռնել ցանցի միջոցով: Ընդհանուր առմամբ, ելքը բավականին մանրամասն է, խնդրի դեպքում կարող եք սխալ գտնել։

Փոխարենը մի եզրակացության

Իսկ դուք գիտեի՞ք, որ դելֆինի ճակատը ոսկրոտ չէ։ Դա բառացիորեն երրորդ աչք է, էխոլոկացիայի համար ճարպային ոսպնյակ:

Գործարկել GNU/Linux-ը ARM տախտակի վրա զրոյից (օգտագործելով Kali և iMX.6 որպես օրինակ)

Գործարկել GNU/Linux-ը ARM տախտակի վրա զրոյից (օգտագործելով Kali և iMX.6 որպես օրինակ)

Source: www.habr.com