Mendapatkan GNU / Linux di papan ARM dari awal (misalnya, Kali dan iMX.6)

tl; dr : membangun image Kali Linux untuk komputer ARM, dalam program debootstrap, linux dan u-boot. Jika Anda membeli beberapa perangkat papan tunggal yang tidak terlalu populer, maka Anda mungkin dihadapkan pada kurangnya gambar kit distribusi favorit Anda untuknya. Hal yang sama terjadi dengan Flipper One yang direncanakan . Kali Linux untuk IMX6 tidak ada (saya sedang memasak), jadi saya harus membuatnya sendiri.











Proses pengunduhan cukup sederhana:



  1. Besi diinisialisasi.
  2. Dari beberapa area pada perangkat penyimpanan (kartu SD / eMMC / dll), bootloader dibaca dan dijalankan.
  3. Loader mencari kernel sistem operasi dan memuatnya ke beberapa area memori dan menjalankannya.
  4. Kernel memuat sisa OS.


Untuk tugas saya, tingkat detail ini cukup, Anda dapat membaca detailnya di artikel lain . Area "beberapa" yang disebutkan di atas berbeda dari papan ke papan, yang menciptakan beberapa kesulitan dengan pemasangan. Mereka mencoba untuk menstandarkan pemuatan platform ARM server menggunakan UEFI, tetapi karena ini tidak tersedia untuk semua orang, Anda harus mengumpulkan semuanya secara terpisah.



Membangun sistem file root



Pertama, Anda perlu menyiapkan bagiannya. Das U-Boot mendukung sistem file yang berbeda, saya memilih FAT32 untuk /bootdan ext3 untuk root, ini adalah markup gambar standar untuk Kali di bawah ARM. Saya akan menggunakan GNU Parted, tetapi Anda dapat membuat hal yang sama menjadi lebih familier fdisk. Juga perlu dosfstoolsdan e2fsprogsuntuk membuat sistem file: apt install parted dosfstools e2fsprogs.



Kami menandai kartu SD:



  1. Tandai kartu SD sebagai menggunakan markup MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Membuat bagian dengan /boot128 megabyte: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabyte pertama yang terlewat harus dibiarkan untuk markup itu sendiri dan untuk bootloader.
  3. Kami membuat sistem file root untuk seluruh kapasitas yang tersisa: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Jika tiba-tiba file partisi Anda belum dibuat atau diubah, Anda perlu menjalankan `partprobe`, maka tabel partisi akan dibaca ulang.
  5. Buat sistem file partisi boot dengan label BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Buat sistem file root dengan label ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2


Bagus, sekarang Anda bisa mengisinya. Untuk melakukan ini akan membutuhkan debootstraputilitas tambahan untuk membuat sistem file root sistem operasi berbasis Debian apt install debootstrap.



Kami mengumpulkan FS:



  1. Pasang partisi ke /mnt/(gunakan titik pemasangan yang lebih nyaman):mount /dev/mmcblk0p2 /mnt
  2. : debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. --include , QEMU. chroot ARM-. man debootstrap. , ARM- armhf.
  3. - debootstrap , : chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. : chroot /mnt /bin/bash
  5. /etc/hosts /etc/hostname . , .
  6. . locales ( ), (dpkg-reconfigure locales tzdata). passwd.
  7. Tetapkan kata sandi untuk rootperintah tersebut passwd.
  8. Persiapan gambar untuk saya diakhiri dengan pengisian /etc/fstabdi dalamnya /mnt/.


Saya akan memuat sesuai dengan tag yang dibuat tadi, sehingga isinya akan seperti ini:

LABEL = ROOTFS / kesalahan otomatis = remount-ro 0 1

LABEL = BOOT / boot default otomatis 0 0


Terakhir, Anda dapat memasang partisi boot, kami membutuhkannya untuk kernel: `mount / dev / mmcblk0p1 / mnt / boot /`



Membangun Linux



Untuk membangun kernel (dan kemudian boot loader) pada Debian Testing diperlukan untuk membangun satu set standar GCC, GNU Membuat dan file header GNU C Library untuk arsitektur target (I armhf), serta header OpenSSL, konsol kalkulator bc, bisondan flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Karena bootloader secara default mencari file zImagedi sistem file dari partisi boot, inilah waktunya untuk mempartisi USB flash drive.



  1. Clone inti terlalu lama, jadi hanya men-download: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Buka kemasannya dan buka direktori sumber:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurasi sebelum kompilasi: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurasi ada di direktori arch/arm/configs/. Jika tidak ada, Anda dapat mencoba mencari dan mendownload yang siap dan meneruskan nama file di direktori ini ke parameter KBUILD_DEFCONFIG. Sebagai upaya terakhir, langsung ke poin berikutnya.
  3. Secara opsional, Anda dapat menyesuaikan pengaturan: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Dan kami akan mengkompilasi gambar: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Sekarang Anda dapat menyalin file dengan kernel: cp arch/arm/boot/zImage /mnt/boot/
  6. Dan file dengan DeviceTree (deskripsi perangkat keras yang tersedia di papan): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Dan instal modul yang dirangkai sebagai file terpisah: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install


Kernel sudah siap. Anda dapat melepas semuanya:umount /mnt/boot/ /mnt/



Das U-Boot



Karena bootloader bersifat interaktif, papan itu sendiri, perangkat penyimpanan, dan perangkat USB-ke-UART opsional sudah cukup untuk menguji operasinya. Artinya, Anda dapat menunda kernel dan OS untuk nanti.



Sebagian besar produsen menyarankan penggunaan Das U-Boot untuk boot awal. Dukungan penuh biasanya diberikan di forknya sendiri, tetapi mereka tidak lupa untuk berkontribusi di upstream. Dalam kasus saya, papan didukung di jalur utama , jadi saya mengabaikan garpu .



Kami mengumpulkan bootloader itu sendiri:



  1. : git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. : cd u-boot
  3. : make mx6ull_14x14_evk_defconfig. Das U-Boot, .config, .
  4. - armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx


Hasilnya, kami mendapatkan file u-boot.imx, ini adalah gambar siap pakai yang dapat ditulis ke flash drive USB. Kami menulis ke kartu SD, melewati 1024 byte pertama. Mengapa saya memilih target u-boot.imx? Mengapa saya melewatkan tepat 1024 byte? Inilah yang disarankan oleh dokumentasi . Untuk papan lain, proses pembuatan dan pembakaran gambar mungkin sedikit berbeda.



Selesai, Anda bisa booting. Bootloader harus melaporkan versinya sendiri, beberapa informasi papan dan mencoba menemukan imej kernel pada partisi. Jika tidak berhasil, itu akan mencoba untuk boot melalui jaringan. Secara umum, outputnya cukup detail, Anda dapat menemukan kesalahan jika ada masalah.



Alih-alih kesimpulan



Tahukah Anda bahwa dahi lumba-lumba tidak bertulang? Ini benar-benar mata ketiga, lensa berlemak untuk ekolokasi!










All Articles