2014-11-28 2 views
2

Я новичок в ядре Linux.
Насколько я знаю, в более старых версиях ядра был файл с конкретными советами, в котором были зарегистрированы все устройства (с использованием некоторых API, таких как platform_get_register и т. Д.).
И в более новых версиях ядра информация, необходимая для устройств, передается через Дерево устройств.
Мои вопросы: как ядро ​​извлекает информацию для драйверов из дерева устройств? Как устройства регистрируются в ядре через Device Tree?Как ядро ​​linux получает данные из дерева устройств?

+0

http://stackoverflow.com/questions/26992858/beaglebone-black-device-tree-based-approach/27032068#27032068 – raghav3276

ответ

2

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

Подсистема ядра, расположенная в подкаталоге <kernel>/drivers/of, затем будет ходить по дереву и для каждой записи устройства будет пытаться создать необходимое устройство через device_add() и друзей (обычный процесс создания устройств в Linux). Если подсистема драйвера может найти подходящий драйвер, то обратный вызов *_probe() этого драйвера сможет получить параметры, найденные в записи устройства OF из (возможно, подкласса) device объекта, переданного ему.

+0

спасибо за ваш ответ. У меня есть некоторые сомнения: 1) если мы передадим регистр через Дерево устройств. Тогда как мы можем получить доступ к регистру в драйвере/ядре? 2) Есть ли другие API, похожие на device_add()? – vin

+0

1. Вы можете использовать функции__информации_и_и_и_и_и_и_и_и_и_и_и_()/of_find_node_by_path()/etc, чтобы выкапывать произвольные данные из дерева. Это просто древовидная коллекция струн, ничего волшебного в этом нет. 2. Все устройства в экземпляре Linux в конечном итоге создаются с помощью device_add() и друзей. Какой еще API вам может понадобиться? – oakad

Смежные вопросы