Я новичок в ядре Linux.
Насколько я знаю, в более старых версиях ядра был файл с конкретными советами, в котором были зарегистрированы все устройства (с использованием некоторых API, таких как platform_get_register
и т. Д.).
И в более новых версиях ядра информация, необходимая для устройств, передается через Дерево устройств.
Мои вопросы: как ядро извлекает информацию для драйверов из дерева устройств? Как устройства регистрируются в ядре через Device Tree?Как ядро linux получает данные из дерева устройств?
ответ
Если вы имеете в виду деревья устройств OpenFirmware, они упаковываются в специальный формат (изображение dtb) и помещаются в ОЗУ загрузчиком вместе с изображением ядра. Затем загрузчик вызывает точку входа ядра, передающую адрес изображения dtb в ОЗУ в качестве одного из параметров.
Подсистема ядра, расположенная в подкаталоге <kernel>/drivers/of
, затем будет ходить по дереву и для каждой записи устройства будет пытаться создать необходимое устройство через device_add()
и друзей (обычный процесс создания устройств в Linux). Если подсистема драйвера может найти подходящий драйвер, то обратный вызов *_probe()
этого драйвера сможет получить параметры, найденные в записи устройства OF из (возможно, подкласса) device
объекта, переданного ему.
спасибо за ваш ответ. У меня есть некоторые сомнения: 1) если мы передадим регистр через Дерево устройств. Тогда как мы можем получить доступ к регистру в драйвере/ядре? 2) Есть ли другие API, похожие на device_add()? – vin
1. Вы можете использовать функции__информации_и_и_и_и_и_и_и_и_и_и_и_()/of_find_node_by_path()/etc, чтобы выкапывать произвольные данные из дерева. Это просто древовидная коллекция струн, ничего волшебного в этом нет. 2. Все устройства в экземпляре Linux в конечном итоге создаются с помощью device_add() и друзей. Какой еще API вам может понадобиться? – oakad
- 1. ARM Linux Atags против дерева устройств
- 2. Как загрузить наложение дерева устройств на ядро 3.19+
- 3. Ядро Linux: CMA и дерево устройств
- 4. генерация дерева устройств для встроенного linux
- 5. Как разные драйверы дерева устройств Linux имеют общие регистры?
- 6. Как загрузить ядро Linux из u-boot?
- 7. Как встроить дерево устройств blob, (dtb) в ядро linux?
- 8. Дерево устройств Linux (AD5628)
- 9. Идентификация наложения дерева устройств
- 10. Как ядро Linux получает информацию о процессорах и ядрах?
- 11. Как получить часы из узла дерева устройств
- 12. Как реализовано ядро linux?
- 13. Ядро Linux: создайте модуль вне дерева, соответствующий исходному дереву версии
- 14. Как исправить ядро Linux?
- 15. Как тестируется ядро Linux?
- 16. recvmsg linux получает неверные данные
- 17. Как программировать файлы дерева устройств .dts?
- 18. Создайте модуль ядра Linux из исходного дерева
- 19. PHP получает использование ЦП на ядро на сервере linux
- 20. Не получает данные из Arduino - Bluetooth для Android устройств
- 21. Изменение дерева устройств для Beaglebone Black
- 22. Понимание механизма дерева устройств
- 23. Linux - Как удалить записи из/Proc/устройств
- 24. Как сопоставить ресурсы двух устройств в одном драйвере ядра Linux с использованием дерева устройств?
- 25. Как отладить ядро ARM Linux (msleep()) заблокировать?
- 26. Как ядро Linux реализует реентракцию?
- 27. Как ядро Linux прерывает приложение?
- 28. Как проверить скомпилированное ядро Linux?
- 29. Как разобрать текущее ядро Linux?
- 30. Linux/Unix запускается как ядро
http://stackoverflow.com/questions/26992858/beaglebone-black-device-tree-based-approach/27032068#27032068 – raghav3276