GNU/Linux'u ARM kartında sıfırdan başlatmak (örnek olarak Kali ve iMX.6'yı kullanarak)

tl; Dr.: Programda ARM bilgisayar için Kali Linux imajı yapıyorum debootstrap, linux и u-boot.

GNU/Linux'u ARM kartında sıfırdan başlatmak (örnek olarak Kali ve iMX.6'yı kullanarak)

Çok popüler olmayan tek kartlı bir yazılım satın aldıysanız, favori dağıtımınızın görselinin eksikliğiyle karşı karşıya kalabilirsiniz. Yaklaşık olarak aynı şey oldu Planlanan Flipper One. IMX6 için Kali Linux yok (hazırlıyorum), bu yüzden onu kendim kurmam gerekiyor.

İndirme işlemi oldukça basittir:

  1. Donanım başlatıldı.
  2. Depolama aygıtının bazı alanlarından (SD kart/eMMC/vb.) önyükleyici okunur ve yürütülür.
  3. Önyükleyici, işletim sistemi çekirdeğini arar ve onu bir hafıza alanına yükler ve çalıştırır.
  4. Çekirdek işletim sisteminin geri kalanını yükler.

Bu detay seviyesi görevim için yeterli, detayları okuyabilirsiniz başka bir makalede. Yukarıda belirtilen "bazı" alanlar karttan panele farklılık gösterir ve bu da bazı kurulum zorlukları yaratır. ARM sunucu platformları yükleniyor standartlaştırmaya çalışıyorum UEFI kullanarak, ancak bu herkes için mevcut olmasa da, her şeyi ayrı ayrı birleştirmeniz gerekecek.

Kök dosya sistemini oluşturma

Öncelikle bölümleri hazırlamanız gerekiyor. Das U-Boot farklı dosya sistemlerini destekliyor, ben FAT32'yi seçtim /boot ve kök için ext3, bu ARM'de Kali için standart görüntü düzenidir. Ben GNU Parted kullanacağım ama siz de aynısını daha tanıdık bir şekilde yapabilirsiniz fdisk. Ayrıca ihtiyacınız olacak dosfstools и e2fsprogs bir dosya sistemi oluşturmak için: apt install parted dosfstools e2fsprogs.

SD kartı işaretliyoruz:

  1. SD kartı MBR bölümlemeyi kullanıyor olarak işaretleyin: parted -s /dev/mmcblk0 mklabel msdos
  2. Altında bir bölüm oluşturun /boot 128 megabayt için: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Kaçırılan ilk megabayt, işaretlemenin kendisi ve önyükleyici için bırakılmalıdır.
  3. Kalan kapasitenin tamamı için bir kök dosya sistemi oluşturuyoruz: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Aniden bölüm dosyalarınız oluşturulmadıysa veya değiştirilmediyse, 'partprobe'u çalıştırmanız gerekir, ardından bölüm tablosu yeniden okunacaktır.
  5. Önyükleme bölümü için etiketiyle bir dosya sistemi oluşturun BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Etiketli bir kök dosya sistemi oluşturma ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Harika, şimdi doldurabilirsiniz. Bunun için ayrıca ihtiyacınız olacak debootstrapDebian benzeri işletim sistemleri için kök dosya sistemleri oluşturmaya yönelik bir yardımcı program: apt install debootstrap.

FS'yi topluyoruz:

  1. Bölümü monte edin /mnt/ (daha uygun bir bağlama noktası kullanın): mount /dev/mmcblk0p2 /mnt
  2. Aslında dosya sistemini dolduruyoruz: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parametre --include bazı paketlerin ek olarak kurulacağını belirtirken, statik olarak oluşturulmuş bir QEMU öykünücüsü belirttim. gerçekleştirmenizi sağlar chroot ARM ortamında. Kalan seçeneklerin anlamları şurada bulunabilir: man debootstrap. Her ARM kartının mimariyi desteklemediğini unutmayın. armhf.
  3. Mimari farklılıktan dolayı debootstrap iki aşamada gerçekleştirilir, ikincisi şu şekilde gerçekleştirilir: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Şimdi bunu mahvetmeniz gerekiyor: chroot /mnt /bin/bash
  5. Doldurmak /etc/hosts и /etc/hostname FS'yi hedef alın. Yerel bilgisayarınızdaki içeriğin aynısını doldurun, yalnızca ana bilgisayar adını değiştirmeyi unutmayın.
  6. Diğer her şeyi özelleştirebilirsiniz. Özellikle yüklüyorum locales (depo anahtarları), yerel ayarları ve saat dilimini yeniden yapılandırın (dpkg-reconfigure locales tzdata). komutuyla şifreyi ayarlamayı unutmayın. passwd.
  7. için bir şifre belirleyin root takım passwd.
  8. Benim için görselin hazırlanması doldurma ile bitiyor /etc/fstab içinde /mnt/.

Daha önce oluşturulan etiketlere uygun olarak yükleme yapacağım, yani içerik şu şekilde olacak:

LABEL=ROOTFS / otomatik hatalar=yeniden bağlama-ro 0 1
LABEL=BOOT /önyükleme otomatik varsayılanları 0 0

Son olarak, önyükleme bölümünü bağlayabilirsiniz, çekirdek için buna ihtiyacımız olacak: `mount /dev/mmcblk0p1 /mnt/boot/'

Linux yapısı

Çekirdeği (ve ardından önyükleyiciyi) Debian Testing'de oluşturmak için, hedef mimariye yönelik standart bir GCC, GNU Make ve GNU C Kitaplığı başlık dosyaları seti yüklemeniz gerekir (benim için) armhf), OpenSSL başlıklarının yanı sıra konsol hesaplayıcısı bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Varsayılan yükleyici dosyayı aradığından zImage önyükleme bölümünün dosya sisteminde flash sürücüyü bölme zamanı geldi.

  1. Çekirdeği kopyalamak çok uzun sürüyor, o yüzden hemen indireceğim: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Paketi açıp kaynak dizine gidelim: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Derlemeden önce yapılandırın: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Yapılandırma dizinde bulunur arch/arm/configs/. Eğer yoksa hazır bir tane bulup indirmeyi deneyebilir ve bu dizindeki dosyanın adını parametreye iletebilirsiniz. KBUILD_DEFCONFIG. Son çare olarak hemen bir sonraki noktaya geçin.
  3. İsteğe bağlı olarak ayarları değiştirebilirsiniz: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ve görüntüyü çapraz derleyin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Artık çekirdek dosyasını kopyalayabilirsiniz: cp arch/arm/boot/zImage /mnt/boot/
  6. Ve DeviceTree'deki dosyalar (karttaki donanımın açıklaması): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ve toplanan modülleri ayrı dosyalar halinde yükleyin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Çekirdek hazır. Her şeyin bağlantısını kaldırabilirsiniz: umount /mnt/boot/ /mnt/

Das U-Boot

Önyükleyici etkileşimli olduğundan çalışmasını test etmek için ihtiyacınız olan tek şey anakartın kendisi, bir depolama aygıtı ve isteğe bağlı olarak bir USB'den UART'a aygıttır. Yani çekirdeği ve işletim sistemini daha sonraya erteleyebilirsiniz.

Üreticilerin büyük çoğunluğu ilk önyükleme için Das U-Boot'u kullanmayı teklif ediyor. Tam destek genellikle kendi çatallarında sağlanır, ancak yukarı akışa katkıda bulunmayı da unutmazlar. Benim durumumda yönetim kurulu destekleniyor ana hatBu yüzden çatal Görmezden geldim.

Önyükleyicinin kendisini birleştirelim:

  1. Deponun kararlı dalını klonladık: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Dizinin kendisine gidelim: cd u-boot
  3. Derleme yapılandırmasının hazırlanması: make mx6ull_14x14_evk_defconfig. Bu yalnızca yapılandırma Das U-Boot'un kendisindeyse işe yarar, aksi takdirde üreticinin yapılandırmasını bulmanız ve onu bir dosyadaki deponun kök dizinine yerleştirmeniz gerekecektir. .configveya üreticinin tavsiye ettiği başka bir şekilde monte edin.
  4. Çapraz derleyici kullanarak önyükleyici görüntüsünün kendisini bir araya getiriyoruz armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Sonuç olarak dosyayı alıyoruz u-boot.imx, bu bir flash sürücüye yazılabilen hazır bir görüntüdür. İlk 1024 baytı atlayarak SD karta yazıyoruz. Neden Hedefi seçtim? u-boot.imx? Neden tam olarak 1024 baytı kaçırdım? Yapmayı teklif ettikleri şey bu belgeleme. Diğer kartlar için görüntü oluşturma ve kaydetme süreci biraz farklı olabilir.

Bitti, önyükleme yapabilirsiniz. Önyükleyici kendi sürümünü, kart hakkında bazı bilgileri bildirmeli ve bölümdeki çekirdek görüntüsünü bulmaya çalışmalıdır. Başarısız olursa ağ üzerinden önyükleme yapmayı deneyecektir. Genel olarak çıktı oldukça detaylıdır, sorun varsa hatayı bulabilirsiniz.

Bunun yerine bir sonuca

Yunusun alnının kemikli olmadığını biliyor muydunuz? Kelimenin tam anlamıyla üçüncü bir göz, ekolokasyon için yağlı bir mercek!

GNU/Linux'u ARM kartında sıfırdan başlatmak (örnek olarak Kali ve iMX.6'yı kullanarak)

GNU/Linux'u ARM kartında sıfırdan başlatmak (örnek olarak Kali ve iMX.6'yı kullanarak)

Kaynak: habr.com