Можно ли получить информацию для дерева устройств, используя / sys работающего ядра?

20

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

У меня есть доступ к /sysи /procна машине , и я хотел бы спросить , если это позволит мне «угадать правильные значения» , чтобы использоваться в DTS?

Также потенциальный ответ может дополнительно выделить аспект, если ответ на этот вопрос также зависит от того, использовался ли интерфейс дерева устройств в первую очередь (т. Е. dtbБыл создан и предоставлен ядру) вместо какого-либо взлома, - мы просто отвлекаемся от vanilla и исправить ядро, чтобы решить проблему с информацией об устройстве только для нашего ядра.

humanityANDpeace
источник
У вас есть доступ к загрузочному образу? Вы можете извлечь дерево устройств оттуда. Я могу помочь.
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 в стандартный вывод.

Смотрите также: Как составить список дерева устройств ядра | Unix & Linux Stack Exchange

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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
4

Я не уверен, правильно ли я вас понимаю.

Если вы работаете в системе, которая загружается с помощью dtb, ваше дерево устройств должно быть доступно внутри debugfs.

Вы также можете попробовать инструменты dtc от Pantelis Antoniou, они включают в себя fdtdump и fdtget, которые печатают точки из BLOB-объекта.

Если у вас вообще нет дерева устройств и вы не загрузили загрузку с dtb, вам придется самостоятельно просмотреть машинный код и добавить все специфические для устройства атрибуты и узлы в dts. Для такой загрузки не создается "синтетическое" дерево устройств. Отправной точкой будет аналогичная машина или родитель, а затем система будет работать по системе.

Frob
источник
Спасибо, чтобы уточнить. Существует вероятность того, что dtbможет быть доступен через через debugfs еще , что будет опираться на CONFIG_DEBUG_FSв .configи даже если он установлен еще на простой прихоти , что они на самом деле используется dtbдля начала, я прочитал это право? Таким образом, с некоторой «неудачей» они не сделали ни одного и использовали какое-то прямое исправление ядра вместо интерфейса дерева устройств, верно? Так что это будет означать, что последним средством будет машинный код, поскольку они нарушают GPLv2 и закрывают исходные тексты ядра, верно?
человечество
Да и да для первых двух. Наконец, IANAL, но машинная арка / ??? / mach-??? / board-???. C будет содержать специальные устройства, присутствующие для машины в старых ядрах. Это должно быть покрыто GPL и должно быть доступно за плату. Отдельные драйверы устройств могут быть закрытыми, без нарушений.
Frob