ฉันจะบอกได้ว่าอุปกรณ์ทรี blob (ไฟล์ dtb) ใดที่ฉันกำลังใช้อยู่


9

ฉันกำลังทำงานกับ TS-4900 ซึ่งเป็น 'คอมพิวเตอร์บนโมดูล' ที่เสียบเข้ากับกระดานข้างก้นโดยใช้ Yocto Linux มันใช้ U-Boot ในการเริ่มต้นและคาดว่าจะพิจารณาจากรูปแบบของ baseboard มันเลือกไฟล์ dtb ที่เหมาะสมในการเริ่มต้นและอาจเป็นไปได้ว่าหากไม่สามารถหาตำแหน่งที่ถูกต้องมันจะกลับไปที่ 'generic' สำหรับโมดูลของฉัน

แต่มันจะกำหนดได้อย่างไร? ฉันจะทราบได้อย่างไรว่า. dtb ถูกใช้งานหรือตั้งค่าที่ควรใช้

ด้านล่างนี้เป็นข้อความบูตของ U-Boot

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)

CPU:   Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   using phy at 7
FEC [PRIME]
Press Ctrl+C to abort autoboot in 1 second(s)
(Re)start USB...
USB0:   Port not available.
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
No storage devices, perhaps not 'usb start'ed..?
Booting from the eMMC ...
** File not found /boot/boot.ub **
** File not found /boot/imx6dl-ts4900-13.dtb **
Booting default device tree
42507 bytes read in 196 ms (210.9 KiB/s)
118642 bytes read in 172 ms (672.9 KiB/s)
ICE40 FPGA reloaded successfully
4609784 bytes read in 337 ms (13 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.17-1.0.0-technologic+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4609720 Bytes = 4.4 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
EHCI failed to shut down host controller.
   Loading Kernel Image ... OK
   Using Device Tree in place at 18000000, end 1800d60a

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0

(Kernel startup commences...)

คำตอบ:


7

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

คอมพิวเตอร์บนโมดูลนี้สามารถนำไปวางได้เกือบทุกชั้นวางของ TS หรือ baseboard แบบกำหนดเองและเราต้องการให้มันทำงานโดยอัตโนมัติโดยที่ผู้ใช้ไม่ต้องปรับโครงสร้างอุปกรณ์ที่ใช้ เรามีการลงทะเบียนกะ 8 อินพุตบนกระดานของผู้ให้บริการที่มี id เฉพาะสำหรับกระดานข้างก้น บน TS-8550 นี่คือ 0x13 http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

ดังนั้นใน U-Boot bbdetectคำสั่งที่เราเพิ่มอ่าน GPIO ที่เชื่อมต่อกับ shift register นี้และตั้งค่าตัวแปรสภาพแวดล้อม $ baseboardid U-Boot /boot/imx6${cpu}-ts4900-${baseboardid}.dtbครั้งแรกจะพยายามที่จะโหลดต้นไม้อุปกรณ์กระดานข้างก้นเฉพาะที่ /boot/imx6${cpu}-ts4900.dtbถ้ามันล้มเหลวที่จะหาคนก็จะใช้ต้นไม้อุปกรณ์สำรองที่ ไฟล์หลังนี้มีค่าเริ่มต้นที่มีสติซึ่งสามารถใช้งานได้กับบอร์ดของผู้ให้บริการ TS-8550 ไม่จำเป็นต้องใช้บอร์ดผู้ให้บริการเฉพาะกระดานหลักจึงกลับไปที่โครงสร้างอุปกรณ์มาตรฐานและทำการบู๊ตต่อไป

เพื่อตอบคำถามเดิมของคุณ

cat /proc/device-tree/model

ทรีอุปกรณ์ของเราทั้งหมดจะมีโมเดลที่แตกต่างกันเล็กน้อยในทรีอุปกรณ์
ตัวอย่างเช่นทางเลือกที่ปลอดภัยคือ:

  • "ระบบเทคโนโลยี i.MX6 Quad TS-4900 (ทรีอุปกรณ์เริ่มต้น)"

หรือบอร์ดผู้ให้บริการ TS-TPC-8390 ที่มีโครงสร้างอุปกรณ์เฉพาะ:

  • "ระบบเทคโนโลยี i.MX6 Quad TS-4900 (TS-TPC-8390)"

8

เมื่อ U-Boot เรียกใช้งานคำสั่งการบู๊ตจะมีที่อยู่หน่วยความจำสำหรับเคอร์เนลและที่อยู่หน่วยความจำสำหรับแผนผังต้นไม้ของอุปกรณ์ ดังนั้นก่อนคำสั่งนี้จะต้องโหลดไฟล์เหล่านี้ลงในหน่วยความจำ จากข้อความที่คุณให้เราเห็นว่าไม่สามารถโหลดสองไฟล์จาก eMMC / SD การ์ด:

/boot/boot.ub
/boot/imx6dl-ts4900-13.dtb

อาจเป็นไปได้ว่าไฟล์เหล่านี้ไม่ได้มีอยู่พา ธ ของพวกเขาผิดหรืออุปกรณ์ไม่ถูกต้อง: พาร์ติชันถูกกำหนดให้กับคำสั่งโหลด U-Boot ในกรณีใด ๆ คำสั่งล้มเหลว ณ จุดนี้ปรากฏว่า bootloader พยายามโหลดทรีอุปกรณ์ "เริ่มต้น" - อาจเก็บไว้ในสื่อเดียวกันกับ bootloader เอง

หากต้องการทราบว่าเกิดอะไรขึ้นคุณจะต้องหยุดกระบวนการบู๊ตที่ bootloader และเข้าถึงพรอมต์คำสั่ง U-Boot จากที่นี่คุณสามารถป้อน:

printenv

สิ่งนี้จะพิมพ์ตัวแปรสภาวะแวดล้อม U-boot ตัวแปรเหล่านี้หลายตัวอ้างอิงตัวแปรอื่น ๆ ตัวแปรเหล่านี้บางตัวมักจะถูกเรียกใช้งานเช่นสคริปต์ดังนั้นคุณอาจเห็นสคริปต์บูต, สคริปต์โหลดเคอร์เนล & fdt เป็นต้นหากต้องการหาลำดับการบูตให้ค้นหาตัวแปรที่เรียกว่าbootcmd (หรือบางอย่างที่คล้ายกัน) นี่คือสิ่งที่เรียกใช้ในเวลาบูตในท้ายที่สุด คุณจะต้องติดตามลำดับการบู๊ตจากจุดนี้ผ่านตัวแปรหลายตัว แต่คุณควรดูว่าคำสั่ง load นั้นถูกใช้เพื่อโหลด FDT ในหน่วยความจำ หากคุณต้องการโพสต์ผลลัพธ์ของprintenvเราสามารถระบุตรรกะที่แน่นอนที่ใช้ที่นี่


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