मैं कैसे बता सकता हूं कि मैं किस डिवाइस ट्री ब्लॉब (dtb फ़ाइल) का उपयोग कर रहा हूं?


9

मैं TS-4900 के साथ काम कर रहा हूं, एक एम्बेडेड 'कंप्यूटर ऑन मॉड्यूल' एक बेसबोर्ड में प्लग किया गया है, जो योक्टो लिनक्स चला रहा है। यह शुरू करने के लिए यू-बूट का उपयोग करता है, और माना जाता है कि बेसबोर्ड के मॉडल पर आधारित यह सही dtb फ़ाइल को शुरू करने के लिए चुनता है, और संभवत: यदि यह सही पता लगाने में विफल रहता है तो यह मेरे मॉड्यूल के लिए एक 'जेनेरिक' पर वापस गिर जाता है।

लेकिन यह कैसे / कहाँ सही निर्धारित करता है? मैं कैसे बता सकता हूं कि कौन से .dtb का उपयोग किया गया था, या सेट किया गया था कि किसका उपयोग किया जाना चाहिए?

नीचे यू-बूट के बूट संदेश हैं।

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

मुझे इस पर देर हो रही है, लेकिन मैंने इस स्क्रिप्ट को लागू किया है और मैं इसे किसी ऐसे व्यक्ति के लिए संबोधित करूंगा जो इसे इंटरनेट खोज इंजन का उपयोग करके पाता है।

मॉड्यूल पर इस कंप्यूटर को शेल्फ टीएस या कस्टम बेसबोर्ड पर लगभग किसी भी जगह पर रखा जा सकता है, और हम चाहते थे कि यह स्वचालित रूप से काम करने वाले उपयोगकर्ताओं के बिना उपयोग किए गए डिवाइस ट्री को समायोजित करने के लिए हो। हमारे पास बेसबोर्ड के लिए एक अद्वितीय आईडी के साथ किसी भी वाहक वाहक बोर्ड पर 8-इनपुट शिफ्ट रजिस्टर है। टीएस -8550 पर, यह 0x13 है। http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

इसलिए यू-बूट में bbdetectहमने जो कमांड जोड़ी है वह इस शिफ्ट रजिस्टर से जुड़े GPIO को पढ़ता है और एक $ बेसबोर्डिड वातावरण चर सेट करता है। U- बूट पहले बेसबोर्ड विशिष्ट डिवाइस ट्री को लोड करने का प्रयास करेगा /boot/imx6${cpu}-ts4900-${baseboardid}.dtb। यदि यह एक को खोजने में विफल रहता है, तो यह फॉलबैक डिवाइस ट्री का उपयोग करेगा /boot/imx6${cpu}-ts4900.dtb। इस बाद की फ़ाइल में किसी भी वाहक बोर्ड पर काम करने वाले डिफ़ॉल्ट चूक हैं। TS-8550 को बेसबोर्ड विशिष्ट वाहक बोर्ड की आवश्यकता नहीं है, इसलिए यह मानक डिवाइस ट्री पर वापस गिरता है और बूट करना जारी रखता है।

अपने मूल प्रश्न का उत्तर देने के लिए,

cat /proc/device-tree/model

हमारे सभी डिवाइस ट्री में डिवाइस ट्री में थोड़ा अलग मॉडल होगा।
उदाहरण के लिए, सुरक्षित वापसी है:

  • "टेक्नोलॉजिकल सिस्टम i। एमएक्स 6 क्वाड टीएस -4900 (डिफॉल्ट डिवाइस ट्री)"

या टीएस-टीपीसी -8390 कैरियर बोर्ड एक विशिष्ट डिवाइस ट्री के साथ:

  • "टेक्नोलॉजिकल सिस्टम i। एमएक्स 6 क्वाड टीएस -4900 (टीएस-टीपीसी -8390)"

8

जब यू-बूट बूट कमांड निष्पादित करता है, तो यह कर्नेल के लिए मेमोरी एड्रेस और डिवाइस ट्री ब्लॉब के लिए मेमोरी एड्रेस प्रदान करता है। इसलिए, इस आदेश से पहले, इसे इन फ़ाइलों को मेमोरी में लोड करना होगा। आपके द्वारा दिए गए संदेशों के आधार पर हम देखते हैं कि दो फाइलें eMMC / SD कार्ड से लोड होने में विफल रहीं:

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

यह संभव है कि या तो ये फाइलें बस मौजूद नहीं थीं, उनका रास्ता गलत है या गलत डिवाइस: विभाजन को यू-बूट लोड कमांड दिया गया था। किसी भी स्थिति में, कमांड विफल रहता है। इस बिंदु पर, ऐसा प्रतीत होता है कि बूटलोडर "डिफ़ॉल्ट" डिवाइस ट्री को लोड करने की कोशिश करता है - संभवतः बूटलोडर के समान माध्यम पर संग्रहीत किया जाता है।

वास्तव में क्या हो रहा है, यह जानने के लिए, आप बूटलोडर पर बूट प्रक्रिया को रोकना चाहते हैं और यू-बूट कमांड प्रॉम्प्ट तक पहुंच सकते हैं। यहां से, आप प्रवेश कर सकते हैं:

printenv

यह U- बूट वातावरण चर का प्रिंट आउट लेगा। इनमें से कई चर अन्य चर का संदर्भ देते हैं। इनमें से कुछ चरों को अक्सर स्क्रिप्ट की तरह निष्पादित किया जाता है, इसलिए आप बूट स्क्रिप्ट, कर्नेल और fdt लोड स्क्रिप्ट आदि देख सकते हैं। बूट अनुक्रम का पता लगाने के लिए, bootcmd (या कुछ इसी तरह) नामक एक चर देखें । यह आमतौर पर बूट समय पर आखिरकार चलाया जाता है। आपको कई बिंदुओं के माध्यम से इस बिंदु से बूट अनुक्रम का पता लगाने की आवश्यकता होगी, लेकिन आपको यह देखना चाहिए कि मेमोरी में एफडीटी को लोड करने के लिए लोड कमांड का उपयोग कहां किया जाता है। यदि आप प्रिंटेनव के आउटपुट को पोस्ट करना चाहते हैं , तो हम यहां उपयोग किए गए सटीक तर्क की पहचान कर सकते हैं।


1
धन्यवाद। bootcmd एक प्रारंभिक चर है जिसमें प्रारंभिक स्टार्टअप स्क्रिप्ट शामिल है जिसकी मुझे आवश्यकता थी।
एसएफ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.