LINUX.ORG.RU

Как на железе с не x86-ой архитектурой грузятся модули ядра?

 , ,


1

2

Понятно, что ядро анализирует dtb-файл, строит структуру устройств. Что дальше? Как устанавливается связь между конкретным модулем с некоторым именем в соответствующем каталоге с конкретным устройством, описанном в dtb-файле?

compatible = "My-super-device"

Ну и в драйвере, со-но:

static const struct of_device_id my_driver_match_table = {
    { .compatible = "My-super-device", },
    {},
};
MODULE_DEVICE_TABLE(of, my_driver_match_table);
UVV ★★★★★
()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от UVV

А я правильно понимаю, что потом, когда делается make modules, то строится какой-то файл с индексами соответствия «My-super-device» и пути к файлу модуля?

zloy_starper ★★★
() автор топика
Ответ на: комментарий от zloy_starper

Не, оно вообще не обязано быть модулем и с модулями мало связано. Оно будет работать и если ты просто вкомпилишь драйвер в ядро. Чтобы найти как именно он нужный драйвер подгружает, нужно дальше в MODULE_DEVICE_TABLE залезть и посмотреть, или скорее даже в of_* файлы.

Вот ещё немного про compatible https://elinux.org/Device_Tree_Usage#Understanding_the_compatible_Property , но там тоже самое, что и в этом треде. Т.е. не написано, как оно под капотом работает.

UVV ★★★★★
()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от UVV

Ну когда код драйвера прямо в ядро вкомпилен - тут все понятно. А вот интересно, как это работает, когда драйвер отдельным модулем собран. Почему некоторые модули автоматом грузятся, а другие - нет?

zloy_starper ★★★
() автор топика
Ответ на: комментарий от zloy_starper

https://stackoverflow.com/questions/38493999/how-devices-in-device-tree-and-platform-drivers-were-connected

Вот здесь больше инфы:

All ID tables (in your case OF tables) are packed in the special section in the kernel binary (and thus in the memory when loaded and unpacked). The OF core during intialization takes on input the DT blob and matches each compatible string from the DT with the list of registered (made duting compilation of kernel) drivers. Besides that the depmod database and device helper (udev, for example) help with resolving dependencies.

Почему некоторые модули автоматом грузятся, а другие - нет?

Это ваще с device tree не связано.

UVV ★★★★★
()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от zloy_starper

Кстати, есть ещё в dts коварное свойство status, которое может быть выставлено в disabled. Его надо выставить в okay, чтобы включить устройство. Ну это так, просто то, на что неоднократно напарывался ;)

UVV ★★★★★
()

Есть ли какой нибудь туториал, что въехать в эти dtb/dts? Мне приходилось однажды редактировать dts и засовывать в dtb после моих правок, но правки я делал в полубессознательном состоянии

Так что мне, как и ТС-у, тоже интересно было бы разобраться доскональнее

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Ну на свой вопрос про автозагрузку модулей я некоторый ответ нашел здесь: [url]http://xillybus.com/tutorials/device-tree-zynq-3[/url]

С поправкой, что идентификаторы, по которым ищутся модули сохраняются не в /lib/modules/{kernel version}/modules.ofmap а в /lib/modules/{kernel version}/modules.alias.

От себя добавлю, что и dts/dtsi и частенько модуль с драйвером представляют собой довольно развесистую клюкву. И ошибиться/промахнуться указав не то, что требуется довольно легко. А потом можно долго искать, что же там не так, когда все должно работать, но не работает.

zloy_starper ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.