Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

การแนะนำ

ในบทความชุดนี้ ฉันต้องการดูระบบ buildroot distribution build และแบ่งปันประสบการณ์ของฉันในการปรับแต่งมัน จะได้รับประสบการณ์จริงในการสร้างระบบปฏิบัติการขนาดเล็กพร้อมอินเทอร์เฟซแบบกราฟิกและฟังก์ชันการทำงานขั้นต่ำ

ก่อนอื่น คุณไม่ควรสับสนระหว่างระบบการสร้างและการแจกจ่าย Buildroot สามารถสร้างระบบจากชุดแพ็คเกจที่เสนอให้ Buildroot สร้างขึ้นจาก makefiles จึงมีความสามารถในการปรับแต่งได้มากมาย แทนที่แพ็คเกจด้วยเวอร์ชันอื่น, เพิ่มแพ็คเกจของคุณเอง, เปลี่ยนกฎสำหรับการสร้างแพ็คเกจ, ปรับแต่งระบบไฟล์หลังจากติดตั้งแพ็คเกจทั้งหมดแล้ว? buildroot สามารถทำทั้งหมดนี้ได้

ในรัสเซียมีการใช้ buildroot แต่ในความคิดของฉันมีข้อมูลภาษารัสเซียเพียงเล็กน้อยสำหรับผู้เริ่มต้น

เป้าหมายของงานคือการรวบรวมชุดการแจกจ่ายพร้อมการดาวน์โหลดสด อินเทอร์เฟซ icewm และเบราว์เซอร์ แพลตฟอร์มเป้าหมายคือ virtualbox

ทำไมต้องสร้างการกระจายสินค้าของคุณเอง? มักจำเป็นต้องมีฟังก์ชันการทำงานที่จำกัดกับทรัพยากรที่จำกัด บ่อยครั้งในระบบอัตโนมัติที่คุณต้องสร้างเฟิร์มแวร์ การปรับเปลี่ยนการแจกจ่ายเพื่อวัตถุประสงค์ทั่วไปโดยการล้างบรรจุภัณฑ์ที่ไม่จำเป็นออกแล้วเปลี่ยนเป็นเฟิร์มแวร์นั้นต้องใช้แรงงานมากกว่าการสร้างการแจกจ่ายใหม่ การใช้ Gentoo ก็มีข้อจำกัดเช่นกัน

ระบบ Buildroot นั้นทรงพลังมาก แต่จะไม่ทำอะไรให้คุณเลย สามารถเปิดใช้งานและทำให้กระบวนการประกอบเป็นอัตโนมัติเท่านั้น

ระบบการสร้างทางเลือก (yocto, ระบบ open build และอื่นๆ) จะไม่ได้รับการพิจารณาหรือเปรียบเทียบ

จะหาได้ที่ไหนและจะเริ่มต้นอย่างไร

เว็บไซต์โครงการ - buildroot.org. คุณสามารถดาวน์โหลดเวอร์ชันปัจจุบันและอ่านคู่มือได้ที่นี่ ที่นั่นคุณสามารถติดต่อกับชุมชนได้ โดยมีตัวติดตามจุดบกพร่อง รายชื่ออีเมล และช่องทาง irc

Buildroot ดำเนินการ defconfigs สำหรับบอร์ดเป้าหมายของบิลด์ Defconfig เป็นไฟล์กำหนดค่าที่เก็บเฉพาะตัวเลือกที่ไม่มีค่าเริ่มต้น เขาคือผู้กำหนดว่าจะรวบรวมอะไรและอย่างไร ในกรณีนี้ คุณสามารถกำหนดค่าการกำหนดค่าของ busybox, linux-kernel, uglibc, u-boot และ barebox bootloaders แยกต่างหากได้ แต่การกำหนดค่าทั้งหมดจะเชื่อมโยงกับบอร์ดเป้าหมาย
หลังจากคลายไฟล์เก็บถาวรที่ดาวน์โหลดมาหรือการโคลนจาก git เราก็จะได้ buildroot ที่พร้อมใช้งาน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับโครงสร้างไดเร็กทอรีได้ในคู่มือ ฉันจะบอกคุณเกี่ยวกับสิ่งที่สำคัญที่สุด:

คณะกรรมการ — ไดเร็กทอรีพร้อมไฟล์เฉพาะสำหรับแต่ละบอร์ด สิ่งเหล่านี้อาจเป็นสคริปต์สำหรับการสร้างอิมเมจระบบ (iso, sdcart, cpio และอื่นๆ) ไดเร็กทอรีโอเวอร์เลย์, การกำหนดค่าเคอร์เนล ฯลฯ
configs — defconfig ที่แท้จริงของบอร์ด Defconfig คือการกำหนดค่าบอร์ดที่ไม่สมบูรณ์ จะจัดเก็บเฉพาะพารามิเตอร์ที่แตกต่างจากการตั้งค่าเริ่มต้น
dl — ไดเร็กทอรีพร้อมซอร์สโค้ด/ไฟล์ที่ดาวน์โหลดสำหรับการประกอบ
เอาท์พุต/เป้าหมาย — ระบบไฟล์ที่ประกอบขึ้นของระบบปฏิบัติการผลลัพธ์ จากนั้น อิมเมจจะถูกสร้างขึ้นเพื่อดาวน์โหลด/ติดตั้ง
เอาท์พุต/โฮสต์ - โฮสต์สาธารณูปโภคสำหรับการประกอบ
เอาท์พุต/บิลด์ - แพ็คเกจที่ประกอบแล้ว

แอสเซมบลีได้รับการกำหนดค่าผ่าน KConfig ระบบเดียวกันนี้ใช้ในการสร้างเคอร์เนล Linux รายการคำสั่งที่ใช้บ่อยที่สุด (ดำเนินการในไดเร็กทอรี buildroot):

  • make menuconfig - เรียกการกำหนดค่า build คุณยังสามารถใช้อินเทอร์เฟซแบบกราฟิกได้ (สร้าง nconfig, สร้าง xconfig, สร้าง gconfig)
  • ทำ linux-menuconfig - เรียกการกำหนดค่าเคอร์เนล
  • make clean - ทำความสะอาดผลลัพธ์ของบิลด์ (ทุกอย่างที่เก็บไว้ในเอาต์พุต)
  • รับทำ-สร้างระบบ สิ่งนี้ไม่ได้ประกอบกระบวนการที่ประกอบไว้แล้วกลับคืนมา
  • ทำ defconfig_name - สลับการกำหนดค่าเป็น defconfig เฉพาะ
  • make list-defconfigs - แสดงรายการ defconfigs
  • สร้างซอร์ส - เพียงดาวน์โหลดไฟล์การติดตั้งโดยไม่ต้องสร้าง
  • ให้ความช่วยเหลือ - รายการคำสั่งที่เป็นไปได้

หมายเหตุสำคัญและเคล็ดลับที่เป็นประโยชน์

Buildroot จะไม่สร้างแพ็คเกจที่สร้างขึ้นใหม่! ดังนั้น สถานการณ์อาจเกิดขึ้นเมื่อจำเป็นต้องประกอบใหม่ทั้งหมด

คุณสามารถสร้างแพ็คเกจแยกต่างหากใหม่ได้ด้วยคำสั่ง สร้างชื่อแพ็คเกจ-สร้างใหม่ ตัวอย่างเช่น คุณสามารถสร้างเคอร์เนล Linux ใหม่ได้:

make linux-rebuild

Buildroot เก็บสถานะของแพ็กเกจใดๆ โดยการสร้างไฟล์ .stamp ในไดเร็กทอรี output/build/$packagename:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ดังนั้น คุณสามารถสร้าง root-fs และอิมเมจใหม่ได้โดยไม่ต้องสร้างแพ็คเกจใหม่:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

ตัวแปรที่มีประโยชน์

buildroot มีชุดของตัวแปรเพื่อให้กำหนดค่าได้ง่าย

  • $TOPDIR - ไดเร็กทอรี buildroot
  • $BASEDIR - ไดเรกทอรีผลลัพธ์
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - โฮสต์ fs, staging fs, ไดเร็กทอรีการสร้าง fs เป้าหมาย
  • $BUILD_DIR - ไดเร็กทอรีพร้อมแพ็กเกจที่คลายแพ็กและสร้างแล้ว

การแสดง

buildroot มีฟีเจอร์แสดงภาพ คุณสามารถสร้างไดอะแกรมการพึ่งพา กราฟเวลาบิลด์ และกราฟขนาดแพ็คเกจในระบบสุดท้าย ผลลัพธ์จะอยู่ในรูปแบบไฟล์ pdf (คุณสามารถเลือกได้จาก svn,png) ในไดเร็กทอรีเอาต์พุต/กราฟ

ตัวอย่างคำสั่งการแสดงภาพ:

  • make graph-depends สร้างแผนผังการพึ่งพา
  • make <pkg>-graph-depends สร้างแผนผังการพึ่งพาสำหรับแพ็คเกจเฉพาะ
  • BR2_GRAPH_OUT=png make graph-build เวลาสร้างพล็อตด้วยเอาต์พุต PNG
  • make graph-size ขนาดแพ็กเก็ตพล็อต

สคริปต์ที่มีประโยชน์

มีไดเร็กทอรีย่อยอยู่ในไดเร็กทอรี buildroot utils พร้อมสคริปต์ที่มีประโยชน์ เช่น มีสคริปต์ตรวจสอบความถูกต้องของคำอธิบายแพ็คเกจ สิ่งนี้อาจมีประโยชน์เมื่อเพิ่มแพ็คเกจของคุณเอง (ฉันจะทำในภายหลัง) ไฟล์ utils/readme.txt มีคำอธิบายของสคริปต์เหล่านี้

มาสร้างการกระจายหุ้นกันเถอะ

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

ลองดูรายการการกำหนดค่า:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

สลับไปที่การกำหนดค่า qemu_x86_64_defconfig

make qemu_x86_64_defconfig

และเราเริ่มการชุมนุม

make

การสร้างเสร็จสมบูรณ์แล้ว ดูผลลัพธ์:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

Buildroot ได้รวบรวมอิมเมจที่คุณสามารถเรียกใช้ใน Qemu และตรวจสอบว่ารูปภาพเหล่านั้นใช้งานได้

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

ผลลัพธ์คือระบบที่ทำงานใน qemu:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

การสร้างการกำหนดค่าบอร์ดของคุณเอง

การเพิ่มไฟล์บอร์ด

ลองดูรายการการกำหนดค่า:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ในรายการเราเห็น pc_x86_64_efi_defconfig เราจะสร้างบอร์ดของเราเองโดยคัดลอกมาจากการกำหนดค่า:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

มาสร้างไดเร็กทอรีบอร์ดทันทีเพื่อจัดเก็บสคริปต์ rootfs-overlay และไฟล์ที่จำเป็นอื่นๆ ของเรา:

mkdir board/my_x86_board

สลับไปที่ defconfig นี้:

make my_x86_board_defconfig

ดังนั้น ตอนนี้การกำหนดค่าบิลด์ (เก็บไว้ใน .config ในรูทของไดเร็กทอรี buildroot) จะสอดคล้องกับเครื่องเป้าหมายการบูต x86-64 รุ่นเก่า (bios)

มาคัดลอกการกำหนดค่า linux-kernel (มีประโยชน์ในภายหลัง):

cp board/pc/linux.config board/my_x86_board/

การตั้งค่าพารามิเตอร์บิลด์ผ่าน KConfig

มาเริ่มการตั้งค่ากันดีกว่า:

make menuconfig 

หน้าต่าง KConfig จะเปิดขึ้น เป็นไปได้ที่จะกำหนดค่าด้วยอินเทอร์เฟซแบบกราฟิก (สร้าง nconfig, สร้าง xconfig, สร้าง gconfig):

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

เราเข้าสู่ส่วนแรก ตัวเลือกเป้าหมาย ที่นี่คุณสามารถเลือกสถาปัตยกรรมเป้าหมายที่จะทำการสร้างได้

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ตัวเลือกการสร้าง - มีการตั้งค่าการสร้างต่างๆ ที่นี่ คุณสามารถระบุไดเร็กทอรีด้วยซอร์สโค้ด จำนวนเธรดสำหรับบิลด์ มิเรอร์สำหรับการดาวน์โหลดซอร์สโค้ด และการตั้งค่าอื่นๆ ปล่อยให้การตั้งค่าเป็นค่าเริ่มต้น

Toolchain – เครื่องมือสร้างได้รับการกำหนดค่าที่นี่ อ่านเพิ่มเติมเกี่ยวกับเขา

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ประเภท Toolchain – ประเภทของ Toolchain ที่ใช้ นี่อาจเป็น toolchain ที่สร้างไว้ใน buildroot หรือภายนอก (คุณสามารถระบุไดเร็กทอรีด้วยไดเร็กทอรีที่สร้างไว้แล้วหรือ URL สำหรับการดาวน์โหลด) มีตัวเลือกเพิ่มเติมสำหรับสถาปัตยกรรมที่แตกต่างกัน ตัวอย่างเช่น สำหรับ arm คุณสามารถเลือกเวอร์ชัน Linaro ของ toolchain ภายนอกได้

ไลบรารี C – การเลือกไลบรารี C การทำงานของทั้งระบบขึ้นอยู่กับสิ่งนี้ โดยทั่วไปแล้ว จะใช้ glibc ซึ่งรองรับฟังก์ชันการทำงานที่เป็นไปได้ทั้งหมด แต่อาจมีขนาดใหญ่เกินไปสำหรับระบบฝังตัว ดังนั้นจึงมักเลือก uglibc หรือ musl เราจะเลือก glibc (จะต้องใช้ในภายหลังเพื่อใช้ systemd)

ซีรีส์ Kernel Headers และ Kernel Headers แบบกำหนดเอง – ต้องตรงกับเวอร์ชันของเคอร์เนลที่จะอยู่ในระบบที่ประกอบ สำหรับส่วนหัวของเคอร์เนล คุณยังสามารถระบุเส้นทางไปยังที่เก็บ tarball หรือ git ได้อีกด้วย

GCC COMPILER VERSIONS – เลือกเวอร์ชันคอมไพเลอร์ที่จะใช้สำหรับการสร้าง
เปิดใช้งานการสนับสนุน C++ – เลือกเพื่อสร้างด้วยการสนับสนุนไลบรารี C++ ในระบบ สิ่งนี้จะเป็นประโยชน์ต่อเราในอนาคต

ตัวเลือก gcc เพิ่มเติม - คุณสามารถตั้งค่าตัวเลือกคอมไพเลอร์เพิ่มเติมได้ เราไม่ต้องการมันในตอนนี้

การกำหนดค่าระบบช่วยให้คุณสามารถตั้งค่าพารามิเตอร์ในอนาคตของระบบที่สร้างขึ้น:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ประเด็นส่วนใหญ่ชัดเจนจากชื่อเรื่อง ให้ความสนใจกับประเด็นต่อไปนี้:
เส้นทางไปยังตารางผู้ใช้ - ตารางที่มีผู้ใช้ที่จะสร้าง (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

ไฟล์ตัวอย่าง. ผู้ใช้ ผู้ใช้จะถูกสร้างขึ้นด้วยผู้ดูแลระบบรหัสผ่าน, gid/uid อัตโนมัติ, /bin/sh เชลล์, ผู้ใช้กลุ่มเริ่มต้น, รูทสมาชิกกลุ่ม, ผู้ใช้ความคิดเห็น Foo

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

ไดเร็กทอรีโอเวอร์เลย์ระบบไฟล์รูท - ไดเร็กทอรีวางซ้อนที่ด้านบนของ target-fs ที่ประกอบแล้ว เพิ่มไฟล์ใหม่และแทนที่ไฟล์ที่มีอยู่

สคริปต์แบบกำหนดเองเพื่อรันก่อนสร้างอิมเมจระบบไฟล์ - สคริปต์จะดำเนินการทันทีก่อนที่จะพับระบบไฟล์เป็นอิมเมจ ปล่อยให้สคริปต์ว่างเปล่าไว้ก่อน

ไปที่ส่วนเคอร์เนลกัน

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

การตั้งค่าเคอร์เนลได้รับการตั้งค่าไว้ที่นี่ เคอร์เนลนั้นได้รับการกำหนดค่าผ่าน make linux-menuconfig
คุณสามารถตั้งค่าเวอร์ชันเคอร์เนลได้หลายวิธี: เลือกจากเวอร์ชันที่มีให้ ป้อนเวอร์ชันด้วยตนเอง ระบุพื้นที่เก็บข้อมูลหรือ tarball สำเร็จรูป

การกำหนดค่าเคอร์เนล — เส้นทางไปยังการกำหนดค่าเคอร์เนล คุณสามารถเลือกการกำหนดค่าเริ่มต้นสำหรับสถาปัตยกรรมที่เลือกหรือ defocnfig จาก Linux แหล่งที่มาของ Linux มีชุด defconfig สำหรับระบบเป้าหมายที่แตกต่างกัน คุณสามารถค้นหาสิ่งที่คุณต้องการ โดยดูแหล่งที่มาโดยตรงที่นี่. ตัวอย่างเช่น คุณสามารถทำกระดานดำกระดูกบีเกิ้ลได้ เลือกการกำหนดค่า.

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

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

Bootloaders - การเลือก bootloaders ที่จะรวบรวม เรามาเลือกไอโซลินิกกันดีกว่า

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

การกำหนดค่า Systemd

Systemd กำลังกลายเป็นหนึ่งในเสาหลักของ Linux พร้อมด้วยเคอร์เนลและ glibc ดังนั้นฉันจึงย้ายการตั้งค่าไปยังรายการอื่น

กำหนดค่าผ่าน make menuconfig จากนั้นเลือกแพ็คเกจเป้าหมาย → เครื่องมือระบบ → systemd ที่นี่คุณสามารถระบุบริการ systemd ที่จะติดตั้งและเริ่มต้นเมื่อระบบเริ่มทำงาน

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

กำลังบันทึกการกำหนดค่าระบบ

เราบันทึกการกำหนดค่านี้ผ่าน KConfig

จากนั้นบันทึก defconfig ของเรา:

make savedefconfig

การกำหนดค่าเคอร์เนล Linux

การกำหนดค่าเคอร์เนล Linux ถูกเรียกใช้ด้วยคำสั่งต่อไปนี้:

make linux-menuconfig

มาเพิ่มการรองรับการ์ดแสดงผล Virtualbox

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

มาเพิ่มการรองรับการรวม Virtualbox Guest กัน

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

บันทึกและออก. ที่สำคัญ: การกำหนดค่าจะถูกบันทึกไว้ใน output/build/linux-$version/config แต่ไม่ใช่ใน board/my_x86_board/linux.config

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

ดังนั้น คุณจะต้องคัดลอกการกำหนดค่าไปยังตำแหน่งที่จัดเก็บข้อมูลด้วยตนเอง:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

หลังจากนั้นเราจะประกอบระบบทั้งหมดอีกครั้งโดยสมบูรณ์ buildroot ไม่ได้สร้างสิ่งที่สร้างไว้แล้วขึ้นมาใหม่ คุณต้องระบุแพ็คเกจสำหรับการสร้างใหม่ด้วยตนเอง เพื่อไม่ให้เสียเวลาและความเครียด การสร้างระบบขนาดเล็กขึ้นมาใหม่ทั้งหมดจะง่ายกว่า):

make clean;make

เมื่อสร้างเสร็จแล้ว ให้เปิด VirtualBox (ทดสอบบนเวอร์ชัน 5.2 และ 6.0) โดยบูตจากซีดี พารามิเตอร์ระบบ:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

วิ่งจาก iso ที่ประกอบ:

Buildroot - ตอนที่ 1 ข้อมูลทั่วไป การประกอบระบบขั้นต่ำ การกำหนดค่าผ่านเมนู

รายการวัสดุที่ใช้

  1. คู่มือ Buildroot

ที่มา: will.com

เพิ่มความคิดเห็น