কোনও চলমান কার্নেলের / sys ব্যবহার করে কোনও ডিভাইস ট্রি সম্পর্কিত তথ্য পাওয়া সম্ভব?


20

সাধারণত আর্ম সিস্টেমগুলির জন্য, ডিভাইস ট্রিগুলি কার্নেল (লিনাক্স) এ হার্ডওয়্যার সম্পর্কিত তথ্য সরবরাহ করে। এই ডিভাইস গাছগুলি ডিটিএস (ডিভাইস ট্রি উত্স) ফাইল হিসাবে উপস্থিত রয়েছে যা কার্নেলের মধ্যে সংকলিত এবং লোড করা হয়েছে। সমস্যাটি হ'ল আমার কাছে এমন কোনও dtsফাইলে অ্যাক্সেস নেই , এমনকি কোনও dtbফাইলও নেই।

আমি এক্সেস আছে /sysএবং /procমেশিনে এবং আমি জিজ্ঞাসা করতে যে যদি আমাকে একটা DTS ব্যবহৃত হবে "সঠিক মান অনুমান" এ সম্ভব হবে চেয়েছিলেন?

এছাড়াও সম্ভাব্য উত্তর অতিরিক্ত দিকটিকেও হাইলাইট করতে পারে যদি এই প্রশ্নের উত্তরটিও নির্ভর করে যে ডিভাইস ট্রি ইন্টারফেসটি প্রথম স্থানে ব্যবহৃত হয়েছিল (যেমন একটি dtbতৈরি হয়েছিল এবং কার্নেলের কাছে সরবরাহ করা হয়েছিল) আরও কিছু হ্যাকিংয়ের পরিবর্তে "আমরা কেবল ভ্যানিলা থেকে সরিয়ে ফেলি" এবং কার্নেলটি প্যাচ করবেন যাতে কেবল আমাদের কার্নেলের জন্য ডিভাইসের তথ্য সমস্যা সমাধান করা যায় "সমাধান?


বুট ইমেজে আপনার কি অ্যাক্সেস আছে? আপনি সেখান থেকে ডিভাইস ট্রি বের করতে পারবেন। আমি সাহায্য করতে পারি.
পিএইচকে

উত্তর:


27

/proc/device-tree অথবা /sys/firmware/devicetree/base

আমি মনে করি উভয়ই উপাধি, /sys/firmware/devicetree/base সম্ভবত পরে আরও ভাল পছন্দ /proc

তারপরে আপনি ফাইলগুলি থেকে ডিএসটি বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারবেন:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

পূর্ণসংখ্যার জন্য আউটপুট ফর্ম্যাট বাইনারি হয়, তাই hexdumpপ্রয়োজন।

dtc -I fs

ফাইল সিস্টেম থেকে একটি সম্পূর্ণ ডিভাইস ট্রি পান:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

stdout থেকে dts আউটপুট।

আরও দেখুন: কীভাবে কার্নেল ডিভাইস ট্রি তালিকাভুক্ত করবেন ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জ

dtc বিল্ড্রোটে

বিল্ডরোট লাগানোর জন্য একটি BR2_PACKAGE_DTC=yকনফিগার আছেdtc মূল ফাইল সিস্টেমের ভিতরে ।

QEMU দ্বারা -machine dumpdtb

আপনি যদি কিউইএমইউ-র ভিতরে লিনাক্স চালিয়ে যাচ্ছেন, আপনি যদি এটিকে স্পষ্টভাবে না দিয়ে থাকেন তবে কিউইএমইউ স্বয়ংক্রিয়ভাবে ডিটিবি তৈরি করে -dtbএবং তাই এটি এটি সরাসরি ডাম্প করতে সক্ষম:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

যেমনটি উল্লেখ করা হয়েছে: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

সাথে পরীক্ষিত এই QEMU দ্বারা + + Buildroot সেটআপ লিনাক্স কার্নেল v4.19 arm64 উপর।


4

আমি আপনাকে সঠিকভাবে বুঝতে পারি কিনা তা নিশ্চিত নই।

আপনি যদি এমন কোনও সিস্টেমে থাকেন যা কোনও ডিটিবি ব্যবহার করে বুট করেছে তবে আপনার ডিভাইস ট্রিটি ডিবাগফের ভিতরে অ্যাক্সেসযোগ্য হওয়া উচিত।

আপনি প্যান্টেলিস অ্যান্টোনিউ দ্বারা ডিটিসি সরঞ্জামগুলিও চেষ্টা করে দেখতে পারেন, এগুলি fdtdump এবং fdtget অন্তর্ভুক্ত করে যা একটি ব্লব থেকে dts প্রিন্ট করে।

আপনার কাছে যদি কোনও ডিভাইস ট্রি না থাকে এবং কোনও ডিটিবি থেকে বুট বুট না করে থাকে, তবে আপনাকে নিজেরাই মেশিন কোডটি দিয়ে যেতে হবে এবং সমস্ত ডিভাইসের নির্দিষ্ট বৈশিষ্ট্য এবং নোডগুলি আপনার ডিটিএসে যুক্ত করতে হবে। এই ধরনের বুটের জন্য কোনও "সিন্থেটিক" ডিভাইস ট্রি তৈরি করা হয়নি। একটি শুরুর পয়েন্টটি অনুরূপ মেশিন বা পিতা বা মাতা হতে পারে এবং তারপরে সিস্টেমে আপনার ওয়ে সিস্টেমকে কাজ করে।


ধন্যবাদ, স্পষ্ট করার জন্য। একটা সুযোগ করে dtbdebugfs মাধ্যমে মাধ্যমে অ্যাক্সেসযোগ্য হতে পারে এখনও উপর নির্ভর করবে CONFIG_DEBUG_FSমধ্যে .configএবং এমনকি সেট এখনও নিছক বাতিক যে তারা আসলে একটি ব্যবহৃত যদি dtbদিয়ে শুরু করতে, আমি এই অধিকার পড়া? সুতরাং কিছু "দুর্ভাগ্য" দিয়ে তারা না করে এবং ডিভাইস ট্রি ইন্টারফেসের ইনস্ট্যান্সড ডাইরেক্ট কার্নেল প্যাচিং কোনও ধরণের ব্যবহার করেছে, তাই না? সুতরাং এর অর্থ হ'ল শেষ রিসর্টটি মেশিন কোড হবে, যদি তারা জিপিএলভি 2 লঙ্ঘন করে এবং কার্নেল বন্ধ করে দেয়, তাই না?
মানবতাঅ্যান্ডপিস

হ্যাঁ এবং হ্যাঁ প্রথম দুজনের জন্য। সর্বশেষে, আইএনএল, তবে মেশিনের খিলান / ??? / mach - ??? / বোর্ড - ???। সি পুরানো কার্নেলগুলিতে একটি মেশিনের জন্য উপস্থিত বিশেষ ডিভাইসগুলি ধারণ করে। এটি জিপিএল দ্বারা আচ্ছাদিত হওয়া উচিত এবং কোনও ফির জন্য উপলব্ধ থাকতে হবে। ব্যক্তিগত ডিভাইস ড্রাইভাররা বন্ধ উত্স হতে পারে, কোনও লঙ্ঘন নেই।
এফআরব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.