ARM platasida GNU/Linuxni noldan boshlash (misol sifatida Kali va iMX.6 dan foydalanish)

tl; dr: Men dasturda ARM kompyuteri uchun Kali Linux tasvirini yaratmoqdaman debootstrap, linux ΠΈ u-boot.

ARM platasida GNU/Linuxni noldan boshlash (misol sifatida Kali va iMX.6 dan foydalanish)

Agar siz juda mashhur bo'lmagan bitta platali dasturiy ta'minotni sotib olgan bo'lsangiz, u uchun sevimli distributivingizning tasviri yo'qligiga duch kelishingiz mumkin. Taxminan xuddi shu narsa bilan sodir bo'ldi rejalashtirilgan Flipper One. IMX6 uchun Kali Linux oddiygina yo'q (men tayyorlayapman), shuning uchun uni o'zim yig'ishim kerak.

Yuklab olish jarayoni juda oddiy:

  1. Uskuna ishga tushirildi.
  2. Saqlash qurilmasining ba'zi joylaridan (SD karta/eMMC/va hokazo) yuklovchi o'qiladi va bajariladi.
  3. Bootloader operatsion tizim yadrosini qidiradi va uni ba'zi xotira maydoniga yuklaydi va uni bajaradi.
  4. Yadro operatsion tizimning qolgan qismini yuklaydi.

Bu darajadagi tafsilot mening vazifam uchun etarli, siz tafsilotlarni o'qishingiz mumkin boshqa maqolada. Yuqorida aytib o'tilgan "ba'zi" joylar har bir taxtadan farq qiladi, bu esa o'rnatishda ba'zi qiyinchiliklarni keltirib chiqaradi. ARM server platformalari yuklanmoqda standartlashtirishga harakat qilmoqda UEFI-dan foydalanish, lekin bu hamma uchun mavjud bo'lmasa-da, siz hamma narsani alohida yig'ishingiz kerak bo'ladi.

Ildiz fayl tizimini yaratish

Avval siz bo'limlarni tayyorlashingiz kerak. Das U-Boot turli fayl tizimlarini qo'llab-quvvatlaydi, men uchun FAT32 ni tanladim /boot va root uchun ext3, bu ARMdagi Kali uchun standart tasvir tartibi. Men GNU Parted-dan foydalanaman, lekin siz ham xuddi shunday qilishingiz mumkin fdisk. Sizga ham kerak bo'ladi dosfstools ΠΈ e2fsprogs fayl tizimini yaratish uchun: apt install parted dosfstools e2fsprogs.

Biz SD-kartani belgilaymiz:

  1. SD-kartani MBR bo'limidan foydalangan holda belgilang: parted -s /dev/mmcblk0 mklabel msdos
  2. ostida bo'lim yarating /boot 128 megabayt uchun: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. O'tkazib yuborilgan birinchi megabayt belgining o'zi va yuklovchi uchun qoldirilishi kerak.
  3. Qolgan barcha imkoniyatlar uchun ildiz fayl tizimini yaratamiz: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Agar to'satdan sizning bo'lim fayllaringiz yaratilmagan yoki o'zgartirilmagan bo'lsa, siz "partprobe" ni ishga tushirishingiz kerak, keyin bo'limlar jadvali qayta o'qiladi.
  5. Yorliq bilan yuklash bo'limi uchun fayl tizimini yarating BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Yorliq bilan ildiz fayl tizimini yarating ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Ajoyib, endi uni to'ldirishingiz mumkin. Buning uchun sizga qo'shimcha kerak bo'ladi debootstrap, Debian-ga o'xshash operatsion tizimlar uchun ildiz fayl tizimlarini yaratish uchun yordamchi dastur: apt install debootstrap.

Biz FS yig'amiz:

  1. Bo'limni o'rnating /mnt/ (qulayroq o'rnatish nuqtasidan foydalaning): mount /dev/mmcblk0p2 /mnt
  2. Biz aslida fayl tizimini to'ldiramiz: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametr --include ba'zi paketlarni qo'shimcha ravishda o'rnatishni bildiradi, men statik ravishda qurilgan QEMU emulyatorini ko'rsatdim. Bu sizga bajarishga imkon beradi chroot ARM muhitida. Qolgan variantlarning ma'nosi bilan tanishish mumkin man debootstrap. Shuni unutmangki, har bir ARM platasi arxitekturani qo'llab-quvvatlamaydi armhf.
  3. Arxitekturadagi farq tufayli debootstrap ikki bosqichda bajariladi, ikkinchisi quyidagicha amalga oshiriladi: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Endi siz uni buzishingiz kerak: chroot /mnt /bin/bash
  5. Biz to'ldiramiz /etc/hosts ΠΈ /etc/hostname maqsadli FS. Mahalliy kompyuteringizdagi kontent bilan bir xil to'ldiring, faqat xost nomini almashtirishni unutmang.
  6. Qolgan hamma narsani sozlashingiz mumkin. Xususan, men o'rnataman locales (ombor kalitlari), mahalliy va vaqt mintaqasini qayta sozlang (dpkg-reconfigure locales tzdata). Buyruq bilan parolni o'rnatishni unutmang passwd.
  7. uchun parol o'rnating root jamoa passwd.
  8. Men uchun tasvirni tayyorlash to'ldirish bilan tugaydi /etc/fstab ichida /mnt/.

Men avval yaratilgan teglarga muvofiq yuklayman, shuning uchun tarkib quyidagicha bo'ladi:

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

Nihoyat, yuklash bo'limini o'rnatishingiz mumkin, bizga yadro uchun kerak bo'ladi: `mount /dev/mmcblk0p1 /mnt/boot/`

Linux qurish

Debian testida yadro (va keyin yuklovchini) yaratish uchun maqsadli arxitektura uchun GCC, GNU Make va GNU C Library sarlavhalarining standart toΚ»plamini oΚ»rnatishingiz kerak (men uchun) armhf), shuningdek, OpenSSL sarlavhalari, konsol kalkulyatori bc, bison ΠΈ flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Chunki standart yuklovchi faylni qidiradi zImage yuklash bo'limining fayl tizimida flesh-diskni bo'lish vaqti keldi.

  1. Yadroni klonlash juda ko'p vaqt oladi, shuning uchun men yuklab olaman: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Keling, paketni ochamiz va manba katalogiga o'tamiz: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Kompilyatsiya qilishdan oldin sozlang: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguratsiya katalogda joylashgan arch/arm/configs/. Agar yo'q bo'lsa, siz tayyorni topib yuklab olishga urinib ko'rishingiz va ushbu katalogdagi fayl nomini parametr sifatida kiritishingiz mumkin. KBUILD_DEFCONFIG. Oxirgi chora sifatida darhol keyingi nuqtaga o'ting.
  3. Ixtiyoriy ravishda siz sozlamalarni o'zgartirishingiz mumkin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Va tasvirni o'zaro kompilyatsiya qiling: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Endi siz yadro faylini nusxalashingiz mumkin: cp arch/arm/boot/zImage /mnt/boot/
  6. Va DeviceTree fayllari (bortdagi apparat tavsifi): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Va alohida fayllar shaklida to'plangan modullarni o'rnating: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Yadro tayyor. Siz hamma narsani o'chirib qo'yishingiz mumkin: umount /mnt/boot/ /mnt/

U-Boot

Yuklash moslamasi interaktiv bo'lgani uchun uning ishlashini sinab ko'rish uchun plataning o'zi, xotira qurilmasi va ixtiyoriy ravishda USB-to-UART qurilmasi kerak bo'ladi. Ya'ni, siz yadro va OTni keyinroqqa qoldirishingiz mumkin.

Ishlab chiqaruvchilarning aksariyati dastlabki yuklash uchun Das U-Boot-dan foydalanishni taklif qilishadi. To'liq qo'llab-quvvatlash odatda o'z vilkalarida taqdim etiladi, lekin ular yuqori oqimga hissa qo'shishni unutmang. Mening vaziyatimda kengash qo'llab-quvvatlanadi asosiy chiziq, shuning uchun sanchqi Men bunga e'tibor bermadim.

Keling, yuklash moslamasini o'zi yig'amiz:

  1. Biz omborning barqaror filialini klonlaymiz: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Keling, katalogning o'ziga o'tamiz: cd u-boot
  3. Qurilish konfiguratsiyasini tayyorlash: make mx6ull_14x14_evk_defconfig. Bu faqat konfiguratsiya Das U-Boot-ning o'zida bo'lsa ishlaydi, aks holda siz ishlab chiqaruvchining konfiguratsiyasini topib, uni fayldagi omborning ildiziga qo'yishingiz kerak bo'ladi. .config, yoki ishlab chiqaruvchi tomonidan tavsiya etilgan boshqa usulda yig'ing.
  4. Biz yuklovchi tasvirini o'zaro kompilyator yordamida yig'amiz armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Natijada biz faylni olamiz u-boot.imx, bu flesh-diskga yozilishi mumkin bo'lgan tayyor tasvir. Biz birinchi 1024 baytni o'tkazib yuborgan holda SD-kartaga yozamiz. Nega men Targetni tanladim u-boot.imx? Nima uchun men 1024 baytni o'tkazib yubordim? Ular buni qilishni taklif qilishadi hujjatlar. Boshqa taxtalar uchun tasvirni yaratish va yozish jarayoni biroz boshqacha bo'lishi mumkin.

Bajarildi, siz yuklashingiz mumkin. Bootloader o'z versiyasini, kengash haqida ba'zi ma'lumotlarni xabar qilishi va bo'limda yadro tasvirini topishga harakat qilishi kerak. Muvaffaqiyatsiz bo'lsa, u tarmoq orqali yuklashga harakat qiladi. Umuman olganda, chiqish juda batafsil, agar muammo bo'lsa, xatoni topishingiz mumkin.

Xulosa o'rniga

Delfinning peshonasi suyak emasligini bilasizmi? Bu tom ma'noda uchinchi ko'z, aksolokatsiya uchun yog'li linza!

ARM platasida GNU/Linuxni noldan boshlash (misol sifatida Kali va iMX.6 dan foydalanish)

ARM platasida GNU/Linuxni noldan boshlash (misol sifatida Kali va iMX.6 dan foydalanish)

Manba: www.habr.com