tl; dr: Men dasturda ARM kompyuteri uchun Kali Linux tasvirini yaratmoqdaman debootstrap
, linux
ΠΈ u-boot
.
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
Yuklab olish jarayoni juda oddiy:
- Uskuna ishga tushirildi.
- Saqlash qurilmasining ba'zi joylaridan (SD karta/eMMC/va hokazo) yuklovchi o'qiladi va bajariladi.
- Bootloader operatsion tizim yadrosini qidiradi va uni ba'zi xotira maydoniga yuklaydi va uni bajaradi.
- Yadro operatsion tizimning qolgan qismini yuklaydi.
Bu darajadagi tafsilot mening vazifam uchun etarli, siz tafsilotlarni o'qishingiz mumkin
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:
- SD-kartani MBR bo'limidan foydalangan holda belgilang:
parted -s /dev/mmcblk0 mklabel msdos
- 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. - Qolgan barcha imkoniyatlar uchun ildiz fayl tizimini yaratamiz:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- 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.
- Yorliq bilan yuklash bo'limi uchun fayl tizimini yarating
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- 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:
- Bo'limni o'rnating
/mnt/
(qulayroq o'rnatish nuqtasidan foydalaning):mount /dev/mmcblk0p2 /mnt
- 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 beradichroot
ARM muhitida. Qolgan variantlarning ma'nosi bilan tanishish mumkinman debootstrap
. Shuni unutmangki, har bir ARM platasi arxitekturani qo'llab-quvvatlamaydiarmhf
. - Arxitekturadagi farq tufayli
debootstrap
ikki bosqichda bajariladi, ikkinchisi quyidagicha amalga oshiriladi:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Endi siz uni buzishingiz kerak:
chroot /mnt /bin/bash
- Biz to'ldiramiz
/etc/hosts
ΠΈ/etc/hostname
maqsadli FS. Mahalliy kompyuteringizdagi kontent bilan bir xil to'ldiring, faqat xost nomini almashtirishni unutmang. - 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 unutmangpasswd
. - uchun parol o'rnating
root
jamoapasswd
. - 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.
- 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
- Kompilyatsiya qilishdan oldin sozlang:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfiguratsiya katalogda joylashganarch/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. - Ixtiyoriy ravishda siz sozlamalarni o'zgartirishingiz mumkin:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Va tasvirni o'zaro kompilyatsiya qiling:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Endi siz yadro faylini nusxalashingiz mumkin:
cp arch/arm/boot/zImage /mnt/boot/
- Va DeviceTree fayllari (bortdagi apparat tavsifi):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- 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
Keling, yuklash moslamasini o'zi yig'amiz:
- Biz omborning barqaror filialini klonlaymiz:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Keling, katalogning o'ziga o'tamiz:
cd u-boot
- 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. - 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
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!
Manba: www.habr.com