আমি কীভাবে বলতে পারি যে আমি কোন ডিভাইস ট্রি ব্লব (ডিটিবি ফাইল) ব্যবহার করছি?


9

আমি টিএস -৯৯০০ নিয়ে কাজ করছি, একটি এম্বেডড 'কম্পিউটার অন মডিউল' একটি বেসবোর্ডে প্লাগড, ইয়োকো লিনাক্স চালাচ্ছি। এটি শুরু করতে ইউ-বুট ব্যবহার করে, এবং সম্ভবত বেসবোর্ডের মডেলটির উপর ভিত্তি করে এটি শুরু করার জন্য ডান ডিটিবি ফাইলটি বেছে নেয় এবং সম্ভবত এটি যদি সঠিক একটিটি সনাক্ত করতে ব্যর্থ হয় তবে এটি আমার মডিউলটির জন্য 'জেনেরিক' একটিতে ফিরে আসে।

তবে কীভাবে / কোথায় এটি সঠিকটি নির্ধারণ করে? কোনটি .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আমরা যে কমান্ডটি যুক্ত করেছি তা এই শিফট রেজিস্টারে সংযুক্ত জিপিআইও পড়ে এবং একটি $ বেসবোর্ড এনভায়রনমেন্ট ভেরিয়েবল সেট করে। ইউ-বুট প্রথমে একটি বেসবোর্ড নির্দিষ্ট ডিভাইস ট্রি লোড করার চেষ্টা করবে /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

যখন ইউ-বুট বুট কমান্ডটি কার্যকর করে, এটি কার্নেলের জন্য একটি মেমরি ঠিকানা এবং ডিভাইস ট্রি ব্লবের জন্য একটি মেমরি ঠিকানা সরবরাহ করে। অতএব, এই আদেশের পূর্বে, অবশ্যই এই ফাইলগুলিকে মেমরিতে লোড করতে হবে। আপনার প্রদত্ত বার্তাগুলির উপর ভিত্তি করে আমরা দেখতে পাচ্ছি যে দুটি ফাইল ইএমএমসি / এসডি কার্ড থেকে লোড করা যায়নি:

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

এটি সম্ভবত এই ফাইলগুলি কেবল উপস্থিত ছিল না, তাদের পথটি ভুল বা ভুল ডিভাইস: পার্টিশনটি ইউ-বুট লোড কমান্ডকে দেওয়া হয়েছিল। যে কোনও ক্ষেত্রে, আদেশটি ব্যর্থ হয়। এই মুহুর্তে, বুটলোডার একটি "ডিফল্ট" ডিভাইস ট্রি লোড করার চেষ্টা করে - সম্ভবত বুটলোডার নিজেই একই মাধ্যমটিতে সঞ্চিত থাকে।

ঠিক কী ঘটছে তা জানতে, আপনি বুটলোডারটিতে বুট প্রক্রিয়াটি থামাতে এবং ইউ-বুট কমান্ড প্রম্পটটি অ্যাক্সেস করতে চান। এখান থেকে, আপনি প্রবেশ করতে পারেন:

printenv

এটি ইউ-বুট এনভায়রনমেন্ট ভেরিয়েবলগুলি মুদ্রণ করবে। এই ভেরিয়েবলগুলির মধ্যে অনেকগুলি অন্যান্য ভেরিয়েবলগুলি উল্লেখ করে। এর মধ্যে কিছু ভেরিয়েবল প্রায়শই স্ক্রিপ্টগুলির মতো কার্যকর করা হয়, যাতে আপনি বুট স্ক্রিপ্ট, কার্নেল এবং fdt লোড স্ক্রিপ্ট ইত্যাদি দেখতে পাবেন বুট সিকোয়েন্সটি সনাক্ত করার জন্য, বুটকিমিড (বা অনুরূপ কিছু) নামক একটি ভেরিয়েবল সন্ধান করুন । এটি সাধারণত বুট সময়ে চূড়ান্তভাবে চালিত হয়। আপনাকে একাধিক ভেরিয়েবলের মাধ্যমে এই বিন্দু থেকে বুট সিকোয়েন্সটি সন্ধান করতে হবে তবে এফডিটি লোড মেমরিতে লোড কমান্ডগুলি কোথায় ব্যবহার করা হবে তা আপনার দেখতে হবে। আপনি যদি প্রিন্টেনভের আউটপুট পোস্ট করতে চান তবে আমরা এখানে ব্যবহৃত সঠিক যুক্তি সনাক্ত করতে পারি।


1
ধন্যবাদ। বুটমিসিডি হ'ল এক এনভির ভেরিয়েবল যা প্রাথমিক স্টার্টআপ স্ক্রিপ্টটি আমার প্রয়োজনীয় ছিল।
এসএফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.