การเริ่มต้น GNU/Linux บนบอร์ด ARM ตั้งแต่เริ่มต้น (โดยใช้ Kali และ iMX.6 เป็นตัวอย่าง)

TL; DR: ฉันกำลังสร้างอิมเมจ Kali Linux สำหรับคอมพิวเตอร์ ARM ในโปรแกรม debootstrap, linux и u-boot.

การเริ่มต้น GNU/Linux บนบอร์ด ARM ตั้งแต่เริ่มต้น (โดยใช้ Kali และ iMX.6 เป็นตัวอย่าง)

หากคุณซื้อผู้ชำระเงินรายเดียวที่ไม่เป็นที่นิยม คุณอาจพบว่าไม่มีรูปภาพของชุดการแจกจ่ายที่คุณชื่นชอบ สิ่งเดียวกันเกือบทั้งหมดเกิดขึ้นกับ Flipper One ที่วางแผนไว้. ไม่มี Kali Linux สำหรับ IMX6 (ฉันกำลังทำอาหาร) ดังนั้นฉันจึงต้องประกอบเอง

ขั้นตอนการดาวน์โหลดค่อนข้างง่าย:

  1. ฮาร์ดแวร์ถูกเตรียมใช้งาน
  2. จากพื้นที่บางส่วนบนอุปกรณ์เก็บข้อมูล (การ์ด SD/eMMC/อื่นๆ) bootloader จะถูกอ่านและดำเนินการ
  3. ตัวโหลดจะค้นหาเคอร์เนลของระบบปฏิบัติการและโหลดลงในพื้นที่หน่วยความจำบางส่วนและดำเนินการ
  4. เคอร์เนลจะโหลดส่วนที่เหลือของระบบปฏิบัติการ

สำหรับงานของฉัน รายละเอียดระดับนี้ก็เพียงพอแล้ว คุณสามารถอ่านรายละเอียดได้ ในบทความอื่น. พื้นที่ "บางส่วน" ที่กล่าวถึงข้างต้นแตกต่างกันไปในแต่ละบอร์ด ซึ่งสร้างปัญหาในการติดตั้ง กำลังโหลดแพลตฟอร์ม ARM ของเซิร์ฟเวอร์ พยายามสร้างมาตรฐาน ใช้ UEFI แต่ตราบใดที่ไม่พร้อมใช้งานสำหรับทุกคน คุณจะต้องรวบรวมทุกอย่างแยกกัน

สร้างระบบไฟล์รูท

ก่อนอื่นคุณต้องเตรียมส่วนต่างๆ Das U-Boot รองรับระบบไฟล์ที่แตกต่างกัน ฉันเลือก FAT32 สำหรับ /boot และ ext3 สำหรับรูท นี่คือมาร์กอัปรูปภาพมาตรฐานสำหรับ Kali ภายใต้ ARM ฉันจะใช้ GNU Parted แต่คุณสามารถทำให้คุ้นเคยมากขึ้นได้ fdisk. คุณจะต้อง dosfstools и e2fsprogs เพื่อสร้างระบบไฟล์: apt install parted dosfstools e2fsprogs.

การแบ่งพาร์ติชันการ์ด SD:

  1. ทำเครื่องหมายการ์ด SD ว่าใช้การแบ่งพาร์ติชัน MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. สร้างส่วนสำหรับ /boot สำหรับ 128 เมกะไบต์: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. ต้องเหลือเมกะไบต์แรกที่พลาดไว้สำหรับตัวมาร์กอัปเองและสำหรับ bootloader
  3. สร้างรูท FS สำหรับความจุที่เหลือ: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. หากคุณไม่ได้สร้างหรือเปลี่ยนไฟล์พาร์ติชัน คุณต้องเรียกใช้ `partprobe` จากนั้นตารางพาร์ติชันจะถูกอ่านซ้ำ
  5. สร้างระบบไฟล์พาร์ติชันสำหรับบูตที่มีป้ายกำกับ BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. สร้างระบบไฟล์รูทด้วยป้ายกำกับ ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

เยี่ยมมาก ตอนนี้คุณสามารถกรอกข้อมูลได้แล้ว สิ่งนี้จะต้องใช้เพิ่มเติม debootstrapยูทิลิตี้สำหรับสร้าง root FS บนระบบปฏิบัติการแบบเดเบียน: apt install debootstrap.

เรารวบรวม FS:

  1. ติดตั้งพาร์ติชันไปที่ /mnt/ (ใช้จุดเชื่อมต่อที่สะดวกกว่าสำหรับตัวคุณเอง): 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 FS เป้าหมาย กรอกข้อมูลเหมือนกับเนื้อหาในเครื่องคอมพิวเตอร์ของคุณ อย่าลืมแทนที่ชื่อโฮสต์เท่านั้น
  6. คุณสามารถปรับแต่งอย่างอื่นได้ โดยเฉพาะอย่างยิ่งฉันติดตั้ง locales (คีย์ที่เก็บ), การกำหนดค่าโลแคลและโซนเวลาใหม่ (dpkg-reconfigure locales tzdata). อย่าลืมตั้งรหัสผ่านด้วยคำสั่ง passwd.
  7. ตั้งรหัสผ่านสำหรับ root ทีม passwd.
  8. การเตรียมภาพสำหรับฉันเสร็จสิ้นโดยการเติม /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 ในระบบไฟล์ของพาร์ติชั่นสำหรับเริ่มระบบถึงเวลาที่จะทำลายแฟลชไดรฟ์

  1. การโคลนเคอร์เนลนั้นยาวเกินไป ดังนั้นฉันจะดาวน์โหลด: 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
  2. กำหนดค่าก่อนรวบรวม: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. การกำหนดค่าอยู่ในไดเร็กทอรี arch/arm/configs/. หากไม่มีคุณสามารถค้นหาและดาวน์โหลดไฟล์สำเร็จรูปและส่งชื่อไฟล์ในไดเร็กทอรีนี้ไปยังพารามิเตอร์ KBUILD_DEFCONFIG. ในกรณีที่รุนแรง ให้ไปที่ย่อหน้าถัดไปทันที
  3. คุณสามารถเลือกปรับแต่งการตั้งค่า: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. และรวบรวมภาพข้าม: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. ตอนนี้คุณสามารถคัดลอกไฟล์เคอร์เนล: cp arch/arm/boot/zImage /mnt/boot/
  6. และไฟล์จาก DeviceTree (คำอธิบายของฮาร์ดแวร์ที่มีอยู่ในบอร์ด): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. และติดตั้งโมดูลที่ประกอบเป็นไฟล์แยกต่างหาก: 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 เอง:

  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. เรารวบรวมอิมเมจ bootloader ด้วยคอมไพเลอร์ข้าม armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

เป็นผลให้เราได้รับไฟล์ u-boot.imxนี่เป็นภาพสำเร็จรูปที่สามารถเขียนลงในแฟลชไดรฟ์ USB เราเขียนไปยังการ์ด SD โดยข้าม 1024 ไบต์แรก ทำไมฉันถึงเลือกเป้าหมาย u-boot.imx? ทำไมพลาด 1024 ไบต์อย่างแน่นอน นี่คือสิ่งที่พวกเขาเสนอให้ทำใน เอกสาร. สำหรับบอร์ดอื่นๆ การสร้างภาพและกระบวนการเขียนภาพอาจแตกต่างออกไปเล็กน้อย

เสร็จแล้วคุณสามารถดาวน์โหลด bootloader ควรรายงานเวอร์ชันของตัวเอง ข้อมูลบางอย่างเกี่ยวกับบอร์ด และพยายามค้นหาอิมเมจเคอร์เนลบนพาร์ติชัน หากล้มเหลวก็จะพยายามบูตผ่านเครือข่าย โดยทั่วไป เอาต์พุตมีรายละเอียดค่อนข้างมาก คุณสามารถค้นหาข้อผิดพลาดได้ในกรณีที่เกิดปัญหา

แทนการสรุป

คุณรู้หรือไม่ว่าหน้าผากของปลาโลมาไม่มีกระดูก? แท้จริงแล้วมันคือตาที่สาม เลนส์ไขมันสำหรับตำแหน่ง echolocation!

การเริ่มต้น GNU/Linux บนบอร์ด ARM ตั้งแต่เริ่มต้น (โดยใช้ Kali และ iMX.6 เป็นตัวอย่าง)

การเริ่มต้น GNU/Linux บนบอร์ด ARM ตั้งแต่เริ่มต้น (โดยใช้ Kali และ iMX.6 เป็นตัวอย่าง)

ที่มา: will.com