tl; dr: Saya sedang membina imej Kali Linux untuk komputer ARM, dalam program ini debootstrap
, linux
ΠΈ u-boot
.
Jika anda membeli perisian papan tunggal yang tidak begitu popular, anda mungkin berhadapan dengan kekurangan imej pengedaran kegemaran anda untuknya. Kira-kira perkara yang sama berlaku dengan
Proses muat turun agak mudah:
- Perkakasan dimulakan.
- Dari sesetengah kawasan pada peranti storan (kad SD/eMMC/dll) pemuat but dibaca dan dilaksanakan.
- Pemuat but mencari kernel sistem pengendalian dan memuatkannya ke beberapa kawasan memori dan melaksanakannya.
- Kernel memuatkan seluruh OS.
Tahap perincian ini sudah cukup untuk tugas saya, anda boleh membaca butirannya
Membina sistem fail akar
Mula-mula anda perlu menyediakan bahagian. Das U-Boot menyokong sistem fail yang berbeza, saya memilih FAT32 untuk /boot
dan ext3 untuk root, ini ialah susun atur imej standard untuk Kali pada ARM. Saya akan menggunakan GNU Parted, tetapi anda boleh melakukan perkara yang sama dengan cara yang lebih biasa fdisk
. Anda juga akan memerlukan dosfstools
ΠΈ e2fsprogs
untuk membuat sistem fail: apt install parted dosfstools e2fsprogs
.
Kami menandakan kad SD:
- Tandai kad SD sebagai menggunakan pembahagian MBR:
parted -s /dev/mmcblk0 mklabel msdos
- Buat bahagian di bawah
/boot
untuk 128 megabait:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Megabait pertama yang terlepas mesti ditinggalkan untuk penanda itu sendiri dan untuk pemuat but. - Kami mencipta sistem fail akar untuk keseluruhan baki kapasiti:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Jika tiba-tiba fail partition anda tidak dibuat atau tidak berubah, anda perlu menjalankan `partprobe`, kemudian jadual partition akan dibaca semula.
- Buat sistem fail untuk partition but dengan label
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Buat sistem fail akar dengan label
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Hebat, kini anda boleh mengisinya. Untuk ini anda juga perlu debootstrap
, utiliti untuk mencipta sistem fail akar untuk sistem pengendalian seperti Debian: apt install debootstrap
.
Kami mengumpul FS:
- Lekapkan partition ke dalam
/mnt/
(gunakan titik lekap yang lebih mudah):mount /dev/mmcblk0p2 /mnt
- Kami sebenarnya mengisi sistem fail:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. Parameter--include
menunjukkan untuk memasang beberapa pakej tambahan, saya menetapkan emulator QEMU yang dibina secara statik. Ia membolehkan anda membuat persembahanchroot
dalam persekitaran ARM. Maksud pilihan yang selebihnya boleh didapati diman debootstrap
. Jangan lupa bahawa tidak setiap papan ARM menyokong seni binaarmhf
. - Oleh kerana perbezaan seni bina
debootstrap
dilakukan dalam dua peringkat, yang kedua dilakukan seperti ini:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Sekarang anda perlu mengosongkannya:
chroot /mnt /bin/bash
- Mengisi
/etc/hosts
ΠΈ/etc/hostname
sasaran FS. Isikan sama seperti kandungan pada komputer tempatan anda, cuma ingat untuk menggantikan nama hos. - Anda boleh menyesuaikan semua yang lain. Khususnya, saya memasang
locales
(kunci repositori), konfigurasi semula tempat dan zon waktu (dpkg-reconfigure locales tzdata
). Jangan lupa untuk menetapkan kata laluan dengan arahanpasswd
. - Tetapkan kata laluan untuk
root
pasukanpasswd
. - Penyediaan gambar untuk saya diakhiri dengan pengisian
/etc/fstab
dalam/mnt/
.
Saya akan memuat naik mengikut tag yang dibuat sebelum ini, jadi kandungannya akan menjadi seperti ini:
LABEL=ROOTFS / ralat auto=remount-ro 0 1
LABEL=BOOT /boot auto lalai 0 0
Akhir sekali, anda boleh melekapkan partition but, kami memerlukannya untuk kernel: `mount /dev/mmcblk0p1 /mnt/boot/`
binaan Linux
Untuk membina kernel (dan kemudian pemuat but) pada Pengujian Debian, anda perlu memasang set standard fail pengepala GCC, GNU Make dan GNU C Library untuk seni bina sasaran (untuk saya armhf
), serta pengepala OpenSSL, kalkulator konsol bc
, bison
ΠΈ flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Oleh kerana pemuat lalai mencari fail zImage
pada sistem fail partition but, sudah tiba masanya untuk memisahkan pemacu denyar.
- Ia mengambil masa terlalu lama untuk mengklon kernel, jadi saya hanya akan memuat turun:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Mari kita bongkar dan pergi ke direktori sumber:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Konfigurasikan sebelum penyusunan:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfigurasi terletak dalam direktoriarch/arm/configs/
. Jika tiada, anda boleh cuba mencari dan memuat turun yang siap dan lulus nama fail dalam direktori ini sebagai parameterKBUILD_DEFCONFIG
. Sebagai pilihan terakhir, teruskan ke titik seterusnya. - Secara pilihan, anda boleh mengubah suai tetapan:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Dan susun silang imej:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Kini anda boleh menyalin fail kernel:
cp arch/arm/boot/zImage /mnt/boot/
- Dan fail dari DeviceTree (penerangan perkakasan pada papan):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- Dan pasang modul yang dikumpul dalam bentuk fail berasingan:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Inti sudah siap. Anda boleh menyahlekap semuanya: umount /mnt/boot/ /mnt/
Das U-Boot
Memandangkan pemuat but adalah interaktif, semua yang anda perlukan untuk menguji operasinya ialah papan itu sendiri, peranti storan, dan secara pilihan peranti USB-ke-UART. Iaitu, anda boleh menangguhkan kernel dan OS untuk kemudian.
Sebilangan besar pengeluar menawarkan untuk menggunakan Das U-Boot untuk but awal. Sokongan penuh biasanya disediakan dalam garpu mereka sendiri, tetapi mereka tidak lupa untuk menyumbang kepada huluan. Dalam kes saya, lembaga itu disokong dalam
Mari kumpulkan pemuat but itu sendiri:
- Kami mengklon cawangan stabil repositori:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Mari pergi ke direktori itu sendiri:
cd u-boot
- Menyediakan konfigurasi binaan:
make mx6ull_14x14_evk_defconfig
. Ini hanya berfungsi jika konfigurasi berada dalam Das U-Boot sendiri, jika tidak, anda perlu mencari konfigurasi pengilang dan meletakkannya di akar repositori dalam fail.config
, atau memasang dengan cara lain yang disyorkan oleh pengilang. - Kami memasang imej pemuat but itu sendiri menggunakan pengkompil silang
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Akibatnya kami mendapat fail u-boot.imx
, ini ialah imej sedia yang boleh ditulis pada pemacu denyar. Kami menulis pada kad SD, melangkau 1024 bait pertama. Mengapa saya memilih Sasaran u-boot.imx
? Mengapa saya terlepas tepat 1024 bait? Inilah yang mereka cadangkan untuk dilakukan
Selesai, anda boleh boot. Pemuat but mesti melaporkan versinya sendiri, beberapa maklumat tentang papan, dan cuba mencari imej kernel pada partition. Jika tidak berjaya, ia akan cuba boot melalui rangkaian. Secara umum, outputnya agak terperinci, anda boleh mencari ralat jika terdapat masalah.
Daripada kesimpulan
Adakah anda tahu bahawa dahi ikan lumba-lumba tidak bertulang? Ia betul-betul mata ketiga, kanta berlemak untuk ekolokasi!
Sumber: www.habr.com