TL; DR: ฉันกำลังสร้างอิมเมจ Kali Linux สำหรับคอมพิวเตอร์ ARM ในโปรแกรม debootstrap
, linux
и u-boot
.
หากคุณซื้อผู้ชำระเงินรายเดียวที่ไม่เป็นที่นิยม คุณอาจพบว่าไม่มีรูปภาพของชุดการแจกจ่ายที่คุณชื่นชอบ สิ่งเดียวกันเกือบทั้งหมดเกิดขึ้นกับ
ขั้นตอนการดาวน์โหลดค่อนข้างง่าย:
- ฮาร์ดแวร์ถูกเตรียมใช้งาน
- จากพื้นที่บางส่วนบนอุปกรณ์เก็บข้อมูล (การ์ด SD/eMMC/อื่นๆ) bootloader จะถูกอ่านและดำเนินการ
- ตัวโหลดจะค้นหาเคอร์เนลของระบบปฏิบัติการและโหลดลงในพื้นที่หน่วยความจำบางส่วนและดำเนินการ
- เคอร์เนลจะโหลดส่วนที่เหลือของระบบปฏิบัติการ
สำหรับงานของฉัน รายละเอียดระดับนี้ก็เพียงพอแล้ว คุณสามารถอ่านรายละเอียดได้
สร้างระบบไฟล์รูท
ก่อนอื่นคุณต้องเตรียมส่วนต่างๆ Das U-Boot รองรับระบบไฟล์ที่แตกต่างกัน ฉันเลือก FAT32 สำหรับ /boot
และ ext3 สำหรับรูท นี่คือมาร์กอัปรูปภาพมาตรฐานสำหรับ Kali ภายใต้ ARM ฉันจะใช้ GNU Parted แต่คุณสามารถทำให้คุ้นเคยมากขึ้นได้ fdisk
. คุณจะต้อง dosfstools
и e2fsprogs
เพื่อสร้างระบบไฟล์: apt install parted dosfstools e2fsprogs
.
การแบ่งพาร์ติชันการ์ด SD:
- ทำเครื่องหมายการ์ด SD ว่าใช้การแบ่งพาร์ติชัน MBR:
parted -s /dev/mmcblk0 mklabel msdos
- สร้างส่วนสำหรับ
/boot
สำหรับ 128 เมกะไบต์:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. ต้องเหลือเมกะไบต์แรกที่พลาดไว้สำหรับตัวมาร์กอัปเองและสำหรับ bootloader - สร้างรูท FS สำหรับความจุที่เหลือ:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- หากคุณไม่ได้สร้างหรือเปลี่ยนไฟล์พาร์ติชัน คุณต้องเรียกใช้ `partprobe` จากนั้นตารางพาร์ติชันจะถูกอ่านซ้ำ
- สร้างระบบไฟล์พาร์ติชันสำหรับบูตที่มีป้ายกำกับ
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- สร้างระบบไฟล์รูทด้วยป้ายกำกับ
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
เยี่ยมมาก ตอนนี้คุณสามารถกรอกข้อมูลได้แล้ว สิ่งนี้จะต้องใช้เพิ่มเติม debootstrap
ยูทิลิตี้สำหรับสร้าง root FS บนระบบปฏิบัติการแบบเดเบียน: apt install debootstrap
.
เรารวบรวม FS:
- ติดตั้งพาร์ติชันไปที่
/mnt/
(ใช้จุดเชื่อมต่อที่สะดวกกว่าสำหรับตัวคุณเอง):mount /dev/mmcblk0p2 /mnt
- จริง ๆ แล้วเราเติมระบบไฟล์:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. พารามิเตอร์--include
ระบุให้ติดตั้งเพิ่มเติมบางแพ็คเกจ ฉันระบุตัวจำลอง QEMU ที่สร้างขึ้นแบบคงที่ ช่วยให้คุณสามารถดำเนินการได้chroot
สู่สภาพแวดล้อม ARM ความหมายของตัวเลือกอื่น ๆ สามารถพบได้ในman debootstrap
. อย่าลืมว่าบอร์ด ARM บางตัวไม่รองรับสถาปัตยกรรมนี้armhf
. - เนื่องจากความแตกต่างทางสถาปัตยกรรม
debootstrap
ดำเนินการในสองขั้นตอน ที่สองดำเนินการดังนี้:chroot /mnt/ /debootstrap/debootstrap --second-stage
- ตอนนี้คุณต้องหมุน:
chroot /mnt /bin/bash
- กรอก
/etc/hosts
и/etc/hostname
FS เป้าหมาย กรอกข้อมูลเหมือนกับเนื้อหาในเครื่องคอมพิวเตอร์ของคุณ อย่าลืมแทนที่ชื่อโฮสต์เท่านั้น - คุณสามารถปรับแต่งอย่างอื่นได้ โดยเฉพาะอย่างยิ่งฉันติดตั้ง
locales
(คีย์ที่เก็บ), การกำหนดค่าโลแคลและโซนเวลาใหม่ (dpkg-reconfigure locales tzdata
). อย่าลืมตั้งรหัสผ่านด้วยคำสั่งpasswd
. - ตั้งรหัสผ่านสำหรับ
root
ทีมpasswd
. - การเตรียมภาพสำหรับฉันเสร็จสิ้นโดยการเติม
/etc/fstab
ภายใน/mnt/
.
ฉันจะอัปโหลดตามแท็กที่สร้างไว้ก่อนหน้านี้ ดังนั้นเนื้อหาจะเป็นดังนี้:
LABEL=ROOTFS / ข้อผิดพลาดอัตโนมัติ=remount-ro 0 1
LABEL=BOOT /boot ค่าเริ่มต้นอัตโนมัติ 0 0
สุดท้าย คุณสามารถเมานต์พาร์ติชันสำหรับเริ่มระบบได้ เราจะต้องใช้มันสำหรับเคอร์เนล: `เมานต์ /dev/mmcblk0p1 /mnt/boot/'
สร้างลินุกซ์
ในการสร้างเคอร์เนล (และ bootloader) บน Debian Testing คุณต้องติดตั้งชุดมาตรฐานของ GCC, GNU Make และไฟล์ส่วนหัวของ GNU C Library สำหรับสถาปัตยกรรมเป้าหมาย (ฉันมี armhf
) เช่นเดียวกับส่วนหัว OpenSSL เครื่องคำนวณคอนโซล bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. เนื่องจากตัวโหลดเริ่มต้นค้นหาไฟล์ zImage
ในระบบไฟล์ของพาร์ติชั่นสำหรับเริ่มระบบถึงเวลาที่จะทำลายแฟลชไดรฟ์
- การโคลนเคอร์เนลนั้นยาวเกินไป ดังนั้นฉันจะดาวน์โหลด:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. แตกไฟล์และไปที่ไดเร็กทอรีต้นทาง:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- กำหนดค่าก่อนรวบรวม:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. การกำหนดค่าอยู่ในไดเร็กทอรีarch/arm/configs/
. หากไม่มีคุณสามารถค้นหาและดาวน์โหลดไฟล์สำเร็จรูปและส่งชื่อไฟล์ในไดเร็กทอรีนี้ไปยังพารามิเตอร์KBUILD_DEFCONFIG
. ในกรณีที่รุนแรง ให้ไปที่ย่อหน้าถัดไปทันที - คุณสามารถเลือกปรับแต่งการตั้งค่า:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- และรวบรวมภาพข้าม:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- ตอนนี้คุณสามารถคัดลอกไฟล์เคอร์เนล:
cp arch/arm/boot/zImage /mnt/boot/
- และไฟล์จาก DeviceTree (คำอธิบายของฮาร์ดแวร์ที่มีอยู่ในบอร์ด):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- และติดตั้งโมดูลที่ประกอบเป็นไฟล์แยกต่างหาก:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
เคอร์เนลพร้อมแล้ว คุณสามารถยกเลิกการต่อเชื่อมทุกอย่าง: umount /mnt/boot/ /mnt/
ดาส ยู บูต
เนื่องจาก bootloader เป็นแบบโต้ตอบ ตัวบอร์ดเอง อุปกรณ์จัดเก็บข้อมูล และอุปกรณ์ USB-to-UART ที่เป็นอุปกรณ์เสริมจึงเพียงพอที่จะทดสอบการทำงานของมันได้ นั่นคือคุณสามารถเลื่อนเคอร์เนลและระบบปฏิบัติการได้ในภายหลัง
ผู้ผลิตส่วนใหญ่แนะนำให้ใช้ Das U-Boot สำหรับการบู๊ตหลัก การสนับสนุนอย่างเต็มที่มักจะมีให้ในส้อมของตัวเอง แต่อย่าลืมที่จะมีส่วนร่วมในต้นน้ำ ในกรณีของฉัน บอร์ดรองรับใน
เรารวบรวม bootloader เอง:
- โคลนสาขาที่เสถียรของที่เก็บ:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- ไปที่ไดเร็กทอรีกัน:
cd u-boot
- กำลังเตรียมการกำหนดค่าบิลด์:
make mx6ull_14x14_evk_defconfig
. ใช้งานได้เฉพาะเมื่อการกำหนดค่าอยู่ใน Das U-Boot เท่านั้น มิฉะนั้นคุณจะต้องค้นหาการกำหนดค่าของผู้ผลิตและวางไว้ในรูทของที่เก็บในไฟล์.config
หรือประกอบด้วยวิธีอื่นที่ผู้ผลิตแนะนำ - เรารวบรวมอิมเมจ bootloader ด้วยคอมไพเลอร์ข้าม
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
เป็นผลให้เราได้รับไฟล์ u-boot.imx
นี่เป็นภาพสำเร็จรูปที่สามารถเขียนลงในแฟลชไดรฟ์ USB เราเขียนไปยังการ์ด SD โดยข้าม 1024 ไบต์แรก ทำไมฉันถึงเลือกเป้าหมาย u-boot.imx
? ทำไมพลาด 1024 ไบต์อย่างแน่นอน นี่คือสิ่งที่พวกเขาเสนอให้ทำใน
เสร็จแล้วคุณสามารถดาวน์โหลด bootloader ควรรายงานเวอร์ชันของตัวเอง ข้อมูลบางอย่างเกี่ยวกับบอร์ด และพยายามค้นหาอิมเมจเคอร์เนลบนพาร์ติชัน หากล้มเหลวก็จะพยายามบูตผ่านเครือข่าย โดยทั่วไป เอาต์พุตมีรายละเอียดค่อนข้างมาก คุณสามารถค้นหาข้อผิดพลาดได้ในกรณีที่เกิดปัญหา
แทนการสรุป
คุณรู้หรือไม่ว่าหน้าผากของปลาโลมาไม่มีกระดูก? แท้จริงแล้วมันคือตาที่สาม เลนส์ไขมันสำหรับตำแหน่ง echolocation!
ที่มา: will.com