ไฟล์ u-Boot dtb คืออะไรและฉันจะใช้งานอย่างไร (BeagleBoard xM)


13

ฉันพยายามสร้าง Linux เองสำหรับ BeagleBoard xM (Rev. C) ฉันทำ C / C ++ มาก แต่ฉันเป็นผู้เริ่มต้นในการสร้างและติดตั้ง Linux ตั้งแต่เริ่มต้น

ฉันใช้เครื่องมือสร้าง Yocto Project ( https://www.yoctoproject.org/ ) ซึ่งดูมีแนวโน้ม - มันสร้างไฟล์สำหรับตัวบูตบูท u-Boot เคอร์เนล Linux และระบบไฟล์รูท

หน้านี้ให้คำแนะนำสำหรับการตั้งค่า micro SD การ์ดด้วยไฟล์ที่สร้างขึ้น Yocto อย่างไรก็ตามไฟล์รูปภาพรวมถึงไฟล์ ".dtb" ซึ่งไม่ได้กล่าวถึงในขั้นตอนการตั้งค่า

ไฟล์นี้มีส่วนเกี่ยวข้องกับฮาร์ดแวร์บอร์ดหรือไม่? ไซต์ต่างๆพูดถึงการโหลดไฟล์ dtd (อาจเป็น uEnv.txt?) แต่ฉันไม่พบข้อมูลโดยละเอียด

ฉันใช้คำแนะนำข้างต้นเพื่อตั้งค่าพาร์ติชันสำหรับเริ่มระบบด้วย MLO และ u-boot.img และทำข้อผิดพลาดเล็กน้อยกับ uEnv.txt ฉันยังตั้งค่าพาร์ติชันที่สองด้วยระบบไฟล์ราก

ฉันสามารถบูตและล็อกอิน (ผ่านทางคอนโซลพอร์ตอนุกรม) ได้ แต่ดูเหมือนว่าฮาร์ดแวร์บอร์ดส่วนใหญ่เช่นวิดีโอและอุปกรณ์ USB ทั้งหมดรวมถึงอีเธอร์เน็ตไม่ทำงาน อาจเป็นเพราะฉันไม่ได้ใช้ไฟล์. dtb

ใครสามารถอธิบาย dtb และวิธีใช้บนกระดานบีเกิล ขอบคุณ!


ปรากฎว่าฉันเข้าใจผิดชื่อไฟล์ - ตอนแรกฉันคิดว่ามันเป็นไฟล์ ".dtd" แต่มันเป็นจริง ".dtb" ซึ่งเป็นสาเหตุที่ฉันไม่สามารถหาข้อมูลเกี่ยวกับมันได้ คำถามได้รับการปรับปรุงแล้ว
Jeremy

ตัวอย่างน้อยที่สุดกับอุปกรณ์เสมือน QEMU เพื่อทำความเข้าใจแนวคิด: stackoverflow.com/questions/17488320//
Ciro Santilli 新疆改造中心中心法轮功事件事件

คำตอบ:


13

ตอบคำถามของฉันเองหลังจากฉันค้นหาสิ่งที่ต้องการค้นหา ไฟล์ "dtb" มี Device Tree Blob (หรือ Binary) (คำอธิบายที่ดีที่นี่ ) เป็นวิธีใหม่ในการส่งผ่านข้อมูลฮาร์ดแวร์เกี่ยวกับบอร์ดไปยังเคอร์เนลลินุกซ์

มันสามารถโหลดลงในหน่วยความจำและส่งผ่านไปยังเคอร์เนลโดย u-Boot

นี่คือคำสั่ง u-Boot ที่ฉันใช้:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000

zImage เป็นเคอร์เนลและ beagle-xm.dtb เป็น tree tree ของอุปกรณ์ ฉันทำการบูทอัตโนมัติโดยการตั้งค่าตัวแปร "uenvcmd = ... " ใน uEnv.txt (ตามข้างบน) แต่มันค่อนข้างน่าเกลียดและอาจมีวิธีที่ดีกว่า

โปรดทราบว่าสิ่งนี้บูตขึ้นและบอกว่ามันโหลดแผนผังอุปกรณ์ตกลง อย่างไรก็ตามฉันยังไม่มีอุปกรณ์ USB หรือวิดีโอ (เท่าที่ฉันสามารถบอกได้) อย่างไรก็ตามฉันสงสัยว่าอาจเป็นปัญหาอื่น


3
เป็นวิธีใหม่ในการส่งผ่านข้อมูลฮาร์ดแวร์เกี่ยวกับบอร์ดไปยังเคอร์เนลลินุกซ์ ไม่มีวิธีก่อนหน้านี้ในการส่งข้อมูลฮาร์ดแวร์ไปยังเคอร์เนล เคอร์เนลจะต้องรวมข้อมูลทั้งหมดและจะมีไฟล์ C เฉพาะบอร์ดเพื่อแสดงรายการการแมปเหล่านั้นทั้งหมด นี่เป็นฝันร้ายของการบำรุงรักษาจากมุมมองเคอร์เนล
BatchyX

ขอบคุณ! ฉันคิดวิธีการโหลดไฟล์ dtb และ Linux ตอนนี้บูทขึ้นและออกข้อความต่าง ๆ เกี่ยวกับการโหลดไดรเวอร์ แต่ฉันไม่เห็นอุปกรณ์ USB ใด ๆ (รวมถึงโมดูลอีเธอร์เน็ต) ดูคำถามใหม่: การเชื่อมโยง อาจมีบางสิ่งที่ฉันต้องกำหนดค่าด้วยตนเองใน Linux?
Jeremy

แต่ที่อยู่ใดที่จะใช้สำหรับไฟล์ dtb ตัวอย่างเช่นถ้า zImage ของฉันไปที่ที่อยู่ 0x43000000 (แทนตัวอย่างข้างบน 0x80300000) dtb ควรไปที่ไหน
André van Schoubroeck

2

ฉันใช้ Ubuntu 14.04 บนสายบีเกิ้ลดำดังนั้นการตั้งค่าของฉันอาจแตกต่างกันเล็กน้อย แต่นี่คือวิธีที่ฉันโหลด dtb ที่กำหนดเอง:

ใน uEnv.txt เพิ่มบรรทัดด้วย: dtb=name-of-desired.dtb

สถานสืบค้นควรจะระบุเป็นที่นี่ สำหรับฉันนี่คือ/boot/dtbs/linux-kernel/ที่ linux-kernel เป็นชื่อของรุ่นที่โหลด


0

โปรดทราบว่ามี 2 dtb u-boot dtb และเคอร์เนล dtb พวกมันต่างกัน 2 อย่าง U-boot board dts / dtb ไม่ได้ใช้เสมอไม่ใช่บังคับ btw ใน u-boot คุณสามารถใช้ "u-boot" dtb ฝังไว้ใน u-boot หรือเชื่อมต่อกับ u-boot

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.