LINUX.ORG.RU

device file -> device structure


0

0

Как Linux по файлу устройства (major+minor) узнаёт, какой модуль вызвать и где находятся соответствующие c_dev или gen_disk структуры? Судя по сигнатуре вызова open(), например, структура gen_disk доступна через inode*, говорит ли это о том, что в самих файлах устройств хранятся эти структуры, либо они всё -таки лежат где-то в ядре и прописываются по вызову add_disk || cdev_add? Заранее спасибо!



Последнее исправление: crystal (всего исправлений: 2)

Если у вас есть устройство в директории /dev, значит, модуль, обслуживающий это устройство, уже загружен (кто бы еще устройство создал). Как только вы к устройству обращаетесь, ядро по файлу устройства узнает, какой модуль это устройство создал - т.е. к кому дальше обращаться.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

файлы в /dev создаются ручками, структура [i]gen_disk[/]может быть уже загружена в память при инициализации модуля, а файла ещё нет. По файлу устройства, я так понял, ядро может узнать только major & minor; и каждый драйвер регистрирует все устройства с одним major... Вот только где прописывается, что данный модуль должен вызываеться при обращении к файлу устройства с конкретным major?

По-моему, просто тупо все структуры устройств проходятся , а в поле owner cструктуры block_device_operations есть ccылка на конкретный модуль...Но проблема в том, что это всё мои предположения, вот я и хотел спросить у знаеющих...

К тому же непонятно происхождение названия типа [b]*inode[/b] во многих функциях типа open, ioctl модуля ... Он как бы подразумевает, что его данные содержатся в файле, но я в этом сомневаюсь, потому что , я так понимаю, файл лишь пара major+minor..

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

Посмотри в любой доке по написанию дров под линукс, там в первых главах это пишут. Я в книге Померанца сто лет назад читал, сейчас не помню, увы.

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