Чи можливо отримати інформацію про дерево пристрою за допомогою / sys запущеного ядра?


20

Зазвичай для систем зброї, дерева пристроїв постачають інформацію про апаратне забезпечення ядра (Linux). Ці дерева пристроїв існують у вигляді файлів dts (джерело дерева пристроїв), які компілюються та завантажуються в ядро. Проблема в тому, що я не маю доступу до такого dtsфайлу, навіть до dtbфайлу.

У мене є доступ до машини /sysі /procна ній, і я хотів запитати, чи це дозволить мені "вгадати правильні значення", які будуть використовуватися в точці?

Також потенційна відповідь може додатково виділити аспект, якщо відповідь на це питання також залежить від того, чи був використаний інтерфейс дерева пристроїв в першу чергу (тобто, dtbстворений і надається ядро) замість ще якогось злому, "ми просто переходимо з ванілі і закріпіть ядро ​​так, щоб вирішити проблему інформації пристрою лише для нашого ядра "-розв’язання?


У вас є доступ до завантажувального зображення? Ви можете витягти звідти дерево пристрою. Я можу допомогти.
phk

Відповіді:


27

/proc/device-tree або /sys/firmware/devicetree/base

Я думаю, що обидва - псевдоніми, /sys/firmware/devicetree/baseймовірно, кращий вибір після приручення /proc.

Потім ви можете отримати доступ до властивостей dts з файлів:

 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

виводить dts в stdout.

Дивіться також: Як перелічити дерево пристрою ядра | Обмін стеками Unix та Linux

dtc у Buildroot

Buildroot має BR2_PACKAGE_DTC=yконфігурацію для розміщення dtcвсередині кореневої файлової системи.

QEMU -machine dumpdtb

Якщо ви використовуєте Linux всередині QEMU, QEMU автоматично генерує DTB, якщо ви не надаєте це явно за допомогою -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 на ядрі Linux v4.19 arm64.


4

Я не впевнений, чи правильно я вас зрозумів.

Якщо ви працюєте в системі, яка завантажується за допомогою dtb, дерево вашого пристрою повинно бути доступним всередині налагоджень.

Ви також можете спробувати інструменти dtc Pantelis Antoniou, вони включають fdtdump та fdtget, які друкують dts від краплі.

Якщо у вас взагалі немає дерева пристроїв і ви не завантажували завантаження з dtb, тоді вам доведеться самостійно пройти машинний код і додати всі атрибути та вузли конкретного пристрою до dts. Для такого завантаження не створюється "синтетичне" дерево пристроїв. Початковою точкою буде аналогічна машина або батько, а потім працює ваша система за системою.


Дякую, уточнити. Існує ймовірність того, що dtbможе бути доступний через через debugfs ще , що буде спиратися на CONFIG_DEBUG_FSв .configі навіть якщо він встановлений ще на простий примхи , що вони на насправді використовується dtbдля початку, я прочитав це право? Тож з деякою «невдачею» вони не зробили жодного і використали якесь пряме виправлення ядра, встановлене в інтерфейсі дерева пристроїв, також правда? Отже, це означатиме, що останнім засобом стане машинний код, враховуючи, що вони порушують GPLv2 і закривають джерело ядра, правда?
humanityANDpeace

Так і так для перших двох. Останнє, IANAL, але машинна арка / ??? / mach - ??? / board - ???. C містила б спеціальні пристрої, наявні для машини у старих ядрах. Це повинно покриватися GPL та має бути доступне за певну плату. Окремі драйвери пристроїв можуть бути закритим джерелом, порушень там немає.
FRob
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.