О том как ядро модулями вертит (Работа с модулями со стороны ядра)

Взгляд изнутри

Модератор: Модераторы разделов

Cupper
Сообщения: 4

О том как ядро модулями вертит

Сообщение Cupper »

Разговор пойдет о модулях, но не о их внутренностях и их работе, а о том как с ними работает ядро. Модули состоят из двух логических частей, init и самого выполняемого тела модуля. Как в целом механизм работает мне известно, функции, что где происходит где запускается на выполение init часть, тут все ясно. А не ясно мне где и как начинает выполняться вторая "core" часть. Мне даже неважно в какой момент она начинает выполнятся, важно именно как это происходит ? По этому поводу мне вообще ничего неизвестно, хотя есть малость предположение что они запускаются через одну из функций создания процессов, потому что в функции copy_process(...)(которая используется в функции do_fork (которая создает процессы)) есть место где идет проверка что запускаемый процесс это модуль и если да то увеличивается счетчик его обращение. Но этого очень мало, нужно больше инфы, может кто подскажет по этому поводу.

PS. все выше описанное следует понимать в конексте ядра linux.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: О том как ядро модулями вертит

Сообщение serzh-z »

Cupper писал(а):
06.01.2010 22:48
А не ясно мне где и как начинает выполняться вторая "core" часть. Мне даже неважно в какой момент она начинает выполнятся, важно именно как это происходит ?
Обычно в init выполняется настройка структур (sysfs_ops и т.д.), подобных kobject, указателями на функции из "второй части модуля", после чего выполняется регистрация некой сущности - драйвера устройства, обработчика файловых операций, загрузчика исполняемых файлов и т.д. Ядро вызывает указанные функции модуля, когда это необходимо.
Спасибо сказали:
Cupper
Сообщения: 4

Re: О том как ядро модулями вертит

Сообщение Cupper »

serzh-z писал(а):
06.01.2010 23:57
Cupper писал(а):
06.01.2010 22:48
А не ясно мне где и как начинает выполняться вторая "core" часть. Мне даже неважно в какой момент она начинает выполнятся, важно именно как это происходит ?
Обычно в init выполняется настройка структур (sysfs_ops и т.д.), подобных kobject, указателями на функции из "второй части модуля", после чего выполняется регистрация некой сущности - драйвера устройства, обработчика файловых операций, загрузчика исполняемых файлов и т.д. Ядро вызывает указанные функции модуля, когда это необходимо.

а вот как оно их вызывает ?) это и интересует. Например init часть вызывается следующим образом (в общих чертах):
В функции load_module, в переменной mod структуры module, выделяет памятя для поля mod->init размера mod->init_size (размер этой самой init части) и в него копируется init часть подуля. Далее выйдя уже из функции load_module (и находясь в функции системного прерывания) вызов инит части происходит вот так fn(), где fn() указывает на mod->init. (примерно так, надеюсь вы поняли)
Собсно интересует как вызывается core часть модуля :)
Спасибо сказали:
Аватара пользователя
stari_maček
Сообщения: 116
ОС: RFRemix 18

Re: О том как ядро модулями вертит

Сообщение stari_maček »

Cupper писал(а):
08.01.2010 00:00
а вот как оно их вызывает ?) это и интересует. Например init часть вызывается следующим образом (в общих чертах):
В функции load_module, в переменной mod структуры module, выделяет памятя для поля mod->init размера mod->init_size (размер этой самой init части) и в него копируется init часть подуля. Далее выйдя уже из функции load_module (и находясь в функции системного прерывания) вызов инит части происходит вот так fn(), где fn() указывает на mod->init. (примерно так, надеюсь вы поняли)
Собсно интересует как вызывается core часть модуля :)

через системные вызовы. инит регистрирует обработчики для различных операций над неким добавляемым в систему объектом (устройством). когда программа выполняет ввод или вывод в указанный хэндл, вызываются ваши обработчики. вот и всё.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: О том как ядро модулями вертит

Сообщение serzh-z »

Cupper писал(а):
08.01.2010 00:00
а вот как оно их вызывает ?)
Не понял вопроса... Молча, как ещё.
Спасибо сказали:
Cupper
Сообщения: 4

Re: О том как ядро модулями вертит

Сообщение Cupper »

вызываются ваши обработчики. вот и всё.

:) не сочтите за издевки, но вот как они это делают ?) сам механизм запуска, они как обычная функция ядра выполняются (в основе системного вызова ведь тоже функция лежит), или же как отдельный процесс ?
Кстати это уже что то. Не могли бы направить на более подробный материал.
Не понял вопроса...

увы, видно плохо обяснил. Как, по вашему, запускается init часть ?
Спасибо сказали:
Аватара пользователя
stari_maček
Сообщения: 116
ОС: RFRemix 18

Re: О том как ядро модулями вертит

Сообщение stari_maček »

Cupper писал(а):
09.01.2010 19:28
вызываются ваши обработчики. вот и всё.

:) не сочтите за издевки, но вот как они это делают ?) сам механизм запуска, они как обычная функция ядра выполняются (в основе системного вызова ведь тоже функция лежит), или же как отдельный процесс ?
Кстати это уже что то. Не могли бы направить на более подробный материал.

Вот почитайте.
http://av5.com/journals-magazines-online/1/27/200
Системный вызов это софт-прерывание, на которое "навешивается" ваш обработчик. Вызывается он как колбэк главным обработчиком системных вызовов. В контектсе прерывания, естесственно.
Спасибо сказали:
Cupper
Сообщения: 4

Re: О том как ядро модулями вертит

Сообщение Cupper »

stari_maček писал(а):
10.01.2010 20:16
Вот почитайте.
http://av5.com/journals-magazines-online/1/27/200
Системный вызов это софт-прерывание, на которое "навешивается" ваш обработчик. Вызывается он как колбэк главным обработчиком системных вызовов. В контектсе прерывания, естесственно.

спасибо за сылку, материал интересный, правда пока не осознаю чем он мне поможет, надеюсь это временно :)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: О том как ядро модулями вертит

Сообщение serzh-z »

Cupper писал(а):
10.01.2010 22:10
надеюсь это временно
Тоже надеюсь.

http://maddog.sitengine.ru/smart-question-ru.html
Спасибо сказали: