GNU/Linux-u ARM lövhəsində sıfırdan başlamaq (məsələn, Kali və iMX.6-dan istifadə etməklə)

tl dr: Proqramda ARM kompüteri üçün Kali Linux şəklini qururam debootstrap, linux и u-boot.

GNU/Linux-u ARM lövhəsində sıfırdan başlamaq (məsələn, Kali və iMX.6-dan istifadə etməklə)

Çox populyar olmayan tək ödəyici almısınızsa, onun üçün sevimli paylama dəstinizin təsvirinin olmaması ilə qarşılaşa bilərsiniz. Demək olar ki, eyni şey baş verdi planlaşdırılmış Flipper One. Sadəcə olaraq IMX6 üçün Kali Linux yoxdur (mən bişirirəm), ona görə də onu özüm yığmalıyam.

Yükləmə prosesi olduqca sadədir:

  1. Avadanlıq işə salınıb.
  2. Yaddaş qurğusunun bəzi sahəsindən (SD kart/eMMC/s.) yükləyici oxunur və icra olunur.
  3. Yükləyici əməliyyat sisteminin nüvəsini axtarır və onu hansısa yaddaş sahəsinə yükləyir və icra edir.
  4. Kernel OS-nin qalan hissəsini yükləyir.

Tapşırığım üçün bu səviyyəli detal kifayətdir, detalları oxuya bilərsiniz başqa bir məqalədə. Yuxarıda göstərilən "bəzi" sahələr lövhədən lövhəyə görə fərqlənir, bu da quraşdırmada bəzi çətinliklər yaradır. Server ARM platformaları yüklənir standartlaşdırmağa çalışır UEFI istifadə edərək, lakin hər kəs üçün mövcud olmadığı müddətcə hər şeyi ayrıca toplamalı olacaqsınız.

Kök fayl sisteminin qurulması

Əvvəlcə bölmələri hazırlamalısınız. Das U-Boot müxtəlif fayl sistemlərini dəstəkləyir, mən FAT32-ni seçdim /boot və kök üçün ext3, bu ARM altında Kali üçün standart şəkil işarəsidir. Mən GNU Parted-dən istifadə edəcəyəm, amma siz eyni şeyi daha tanış edə bilərsiniz fdisk. Sizə də lazım olacaq dosfstools и e2fsprogs fayl sistemi yaratmaq üçün: apt install parted dosfstools e2fsprogs.

SD kartın bölünməsi:

  1. SD kartı MBR bölməsindən istifadə kimi qeyd edin: parted -s /dev/mmcblk0 mklabel msdos
  2. üçün bölmə yaradın /boot 128 meqabayt üçün: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. İlk buraxılmış meqabayt işarələmənin özü və yükləyici üçün qalmalıdır.
  3. Tutumun qalan hissəsi üçün kök FS yaradın: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Birdən bölmə fayllarını yaratmamısınızsa və ya dəyişdirməmisinizsə, `partprobe` icra etməlisiniz, onda bölmə cədvəli yenidən oxunacaq.
  5. Etiketli bir yükləmə bölməsi fayl sistemi yaradın BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Etiket ilə kök fayl sistemi yaradın ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Əla, indi onu doldura bilərsiniz. Bu əlavə tələb edəcək debootstrap, Debian kimi əməliyyat sistemlərində kök FS yaratmaq üçün bir yardım proqramı: apt install debootstrap.

FS toplayırıq:

  1. Bölməni quraşdırın /mnt/ (özünüz üçün daha əlverişli montaj nöqtəsindən istifadə edin): mount /dev/mmcblk0p2 /mnt
  2. Əslində fayl sistemini doldururuq: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametr --include bəzi paketləri əlavə olaraq quraşdırmağı təyin edir, mən statik olaraq qurulmuş QEMU emulyatorunu təyin etdim. İcra etməyə imkan verir chroot ARM mühitinə. Digər variantların mənasını burada tapa bilərsiniz man debootstrap. Unutmayın ki, hər ARM lövhəsi arxitekturanı dəstəkləmir armhf.
  3. Memarlıq fərqliliyinə görə debootstrap iki mərhələdə həyata keçirilir, ikincisi aşağıdakı kimi həyata keçirilir: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. İndi fırlatmaq lazımdır: chroot /mnt /bin/bash
  5. doldururuq /etc/hosts и /etc/hostname hədəf FS. Yerli kompüterinizdəki məzmunla eyni şəkildə doldurun, yalnız host adını dəyişdirməyi unutmayın.
  6. Qalan hər şeyi fərdiləşdirə bilərsiniz. Xüsusilə quraşdırıram locales (repozitor açarları), yerlilərin və saat qurşağının yenidən konfiqurasiyası (dpkg-reconfigure locales tzdata). Komanda ilə parol təyin etməyi unutmayın passwd.
  7. üçün parol təyin edin root komanda passwd.
  8. Mənim üçün şəklin hazırlanması doldurmaqla tamamlanır /etc/fstab daxilində /mnt/.

Mən əvvəllər yaradılmış etiketlərə uyğun olaraq yükləyəcəyəm, ona görə də məzmun belə olacaq:

LABEL=ROOTFS / avtomatik xətalar=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0

Nəhayət, siz yükləmə bölməsini quraşdıra bilərsiniz, bizə kernel üçün lazımdır: `mount /dev/mmcblk0p1 /mnt/boot/`

Linux qurmaq

Debian Testində nüvəni (və sonra yükləyicini) qurmaq üçün siz hədəf arxitektura üçün standart GCC, GNU Make və GNU C Library başlıq fayllarını quraşdırmalısınız (məndə armhf), həmçinin OpenSSL başlıqları, konsol kalkulyatoru bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Defolt yükləyici fayl axtarır zImage yükləmə bölməsinin fayl sistemində, flash sürücünü qırmağın vaxtı gəldi.

  1. Kernelin klonlanması çox uzundur, ona görə də sadəcə yükləyəcəm: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Paketdən çıxarın və mənbə qovluğuna keçin: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Tərtib etməzdən əvvəl konfiqurasiya edin: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiqurasiya kataloqdadır arch/arm/configs/. Heç biri yoxdursa, hazır olanı tapıb yükləməyə cəhd edə və bu kataloqdakı faylın adını parametrə keçirə bilərsiniz. KBUILD_DEFCONFIG. Həddindən artıq hallarda dərhal növbəti abzasa keçin.
  3. Siz isteğe bağlı olaraq parametrləri düzəldə bilərsiniz: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Və şəkli çarpaz tərtib edin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. İndi kernel faylını kopyalaya bilərsiniz: cp arch/arm/boot/zImage /mnt/boot/
  6. Və DeviceTree-dən fayllar (boardda mövcud olan avadanlıqların təsviri): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Və ayrıca fayllar kimi yığılmış modulları quraşdırın: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel hazırdır. Hər şeyi ayıra bilərsiniz: umount /mnt/boot/ /mnt/

Das U Boot

Yükləyici interaktiv olduğundan onun işini yoxlamaq üçün lövhənin özü, yaddaş qurğusu və isteğe bağlı USB-to-UART cihazı kifayətdir. Yəni kernel və OS-ni sonraya təxirə sala bilərsiniz.

İstehsalçıların böyük əksəriyyəti əsas yükləmə üçün Das U-Boot istifadə etməyi təklif edir. Tam dəstək adətən öz çəngəlində verilir, lakin yuxarı axınında töhfə verməyi unutmayın. Mənim vəziyyətimdə board dəstəklənir əsas xəttbu səbəbdən çəngəl Mən məhəl qoymadım.

Yükləyicinin özünü toplayırıq:

  1. Anbarın sabit filialını klonlayın: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Gəlin kataloqun özünə keçək: cd u-boot
  3. Quraşdırma konfiqurasiyasının hazırlanması: make mx6ull_14x14_evk_defconfig. Bu, yalnız konfiqurasiya Das U-Boot-da olarsa işləyir, əks halda siz istehsalçının konfiqurasiyasını tapmalı və onu fayldakı deponun kökünə qoymalısınız. .config, və ya istehsalçı tərəfindən tövsiyə edilən başqa bir şəkildə yığılmışdır.
  4. Bootloader şəklinin özünü çarpaz tərtibçi ilə toplayırıq armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Nəticədə faylı alırıq u-boot.imx, bu, USB flash sürücüsünə yazıla bilən hazır bir şəkildir. İlk 1024 baytı atlayaraq SD karta yazırıq. Niyə hədəf seçdim u-boot.imx? Niyə tam olaraq 1024 baytı qaçırdınız? Bunu etməyi təklif edirlər sənədləşdirmə. Digər lövhələr üçün təsvirin qurulması və yandırılması prosesi bir qədər fərqli ola bilər.

Hazırdır, yükləyə bilərsiniz. Yükləyici öz versiyasını, lövhə haqqında bəzi məlumatları bildirməli və bölmədə nüvə şəklini tapmağa çalışmalıdır. Əgər uğursuz olarsa, o, şəbəkə üzərindən yükləməyə çalışacaq. Ümumiyyətlə, çıxış olduqca ətraflıdır, problem olduqda bir səhv tapa bilərsiniz.

Bunun əvəzinə bir nəticəyə

Delfinin alnının sümüklü olmadığını bilirdinizmi? Bu, sözün əsl mənasında üçüncü gözdür, ekolokasiya üçün yağlı lensdir!

GNU/Linux-u ARM lövhəsində sıfırdan başlamaq (məsələn, Kali və iMX.6-dan istifadə etməklə)

GNU/Linux-u ARM lövhəsində sıfırdan başlamaq (məsələn, Kali və iMX.6-dan istifadə etməklə)

Mənbə: www.habr.com