tl; Dr.: Programda ARM bilgisayar için Kali Linux imajı yapıyorum debootstrap
, linux
и u-boot
.
Ç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
İndirme işlemi oldukça basittir:
- Donanım başlatıldı.
- Depolama aygıtının bazı alanlarından (SD kart/eMMC/vb.) önyükleyici okunur ve yürütülür.
- Önyükleyici, işletim sistemi çekirdeğini arar ve onu bir hafıza alanına yükler ve çalıştırır.
- Çekirdek işletim sisteminin geri kalanını yükler.
Bu detay seviyesi görevim için yeterli, detayları okuyabilirsiniz
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:
- SD kartı MBR bölümlemeyi kullanıyor olarak işaretleyin:
parted -s /dev/mmcblk0 mklabel msdos
- 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. - Kalan kapasitenin tamamı için bir kök dosya sistemi oluşturuyoruz:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- 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.
- Önyükleme bölümü için etiketiyle bir dosya sistemi oluşturun
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- 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 debootstrap
Debian benzeri işletim sistemleri için kök dosya sistemleri oluşturmaya yönelik bir yardımcı program: apt install debootstrap
.
FS'yi topluyoruz:
- Bölümü monte edin
/mnt/
(daha uygun bir bağlama noktası kullanın):mount /dev/mmcblk0p2 /mnt
- 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ğlarchroot
ARM ortamında. Kalan seçeneklerin anlamları şurada bulunabilir:man debootstrap
. Her ARM kartının mimariyi desteklemediğini unutmayın.armhf
. - Mimari farklılıktan dolayı
debootstrap
iki aşamada gerçekleştirilir, ikincisi şu şekilde gerçekleştirilir:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Şimdi bunu mahvetmeniz gerekiyor:
chroot /mnt /bin/bash
- 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. - 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
. - için bir şifre belirleyin
root
takımpasswd
. - 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.
- Ç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
- Derlemeden önce yapılandırın:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Yapılandırma dizinde bulunurarch/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. - İsteğe bağlı olarak ayarları değiştirebilirsiniz:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Ve görüntüyü çapraz derleyin:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Artık çekirdek dosyasını kopyalayabilirsiniz:
cp arch/arm/boot/zImage /mnt/boot/
- Ve DeviceTree'deki dosyalar (karttaki donanımın açıklaması):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- 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
Önyükleyicinin kendisini birleştirelim:
- Deponun kararlı dalını klonladık:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Dizinin kendisine gidelim:
cd u-boot
- 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..config
veya üreticinin tavsiye ettiği başka bir şekilde monte edin. - Ç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
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!
Kaynak: habr.com