Разговор пойдет о модулях, но не о их внутренностях и их работе, а о том как с ними работает ядро. Модули состоят из двух логических частей, init и самого выполняемого тела модуля. Как в целом механизм работает мне известно, функции, что где происходит где запускается на выполение init часть, тут все ясно. А не ясно мне где и как начинает выполняться вторая "core" часть. Мне даже неважно в какой момент она начинает выполнятся, важно именно как это происходит ? По этому поводу мне вообще ничего неизвестно, хотя есть малость предположение что они запускаются через одну из функций создания процессов, потому что в функции copy_process(...)(которая используется в функции do_fork (которая создает процессы)) есть место где идет проверка что запускаемый процесс это модуль и если да то увеличивается счетчик его обращение. Но этого очень мало, нужно больше инфы, может кто подскажет по этому поводу.
PS. все выше описанное следует понимать в конексте ядра linux.
О том как ядро модулями вертит (Работа с модулями со стороны ядра)
Модератор: Модераторы разделов
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: О том как ядро модулями вертит
Обычно в init выполняется настройка структур (sysfs_ops и т.д.), подобных kobject, указателями на функции из "второй части модуля", после чего выполняется регистрация некой сущности - драйвера устройства, обработчика файловых операций, загрузчика исполняемых файлов и т.д. Ядро вызывает указанные функции модуля, когда это необходимо.
-
- Сообщения: 4
Re: О том как ядро модулями вертит
serzh-z писал(а): ↑06.01.2010 23:57Обычно в init выполняется настройка структур (sysfs_ops и т.д.), подобных kobject, указателями на функции из "второй части модуля", после чего выполняется регистрация некой сущности - драйвера устройства, обработчика файловых операций, загрузчика исполняемых файлов и т.д. Ядро вызывает указанные функции модуля, когда это необходимо.
а вот как оно их вызывает ?) это и интересует. Например init часть вызывается следующим образом (в общих чертах):
В функции load_module, в переменной mod структуры module, выделяет памятя для поля mod->init размера mod->init_size (размер этой самой init части) и в него копируется init часть подуля. Далее выйдя уже из функции load_module (и находясь в функции системного прерывания) вызов инит части происходит вот так fn(), где fn() указывает на mod->init. (примерно так, надеюсь вы поняли)
Собсно интересует как вызывается core часть модуля
-
- Сообщения: 116
- ОС: RFRemix 18
Re: О том как ядро модулями вертит
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 часть модуля
через системные вызовы. инит регистрирует обработчики для различных операций над неким добавляемым в систему объектом (устройством). когда программа выполняет ввод или вывод в указанный хэндл, вызываются ваши обработчики. вот и всё.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Сообщения: 4
Re: О том как ядро модулями вертит
вызываются ваши обработчики. вот и всё.
не сочтите за издевки, но вот как они это делают ?) сам механизм запуска, они как обычная функция ядра выполняются (в основе системного вызова ведь тоже функция лежит), или же как отдельный процесс ?
Кстати это уже что то. Не могли бы направить на более подробный материал.
Не понял вопроса...
увы, видно плохо обяснил. Как, по вашему, запускается init часть ?
-
- Сообщения: 116
- ОС: RFRemix 18
Re: О том как ядро модулями вертит
Cupper писал(а): ↑09.01.2010 19:28вызываются ваши обработчики. вот и всё.
не сочтите за издевки, но вот как они это делают ?) сам механизм запуска, они как обычная функция ядра выполняются (в основе системного вызова ведь тоже функция лежит), или же как отдельный процесс ?
Кстати это уже что то. Не могли бы направить на более подробный материал.
Вот почитайте.
http://av5.com/journals-magazines-online/1/27/200
Системный вызов это софт-прерывание, на которое "навешивается" ваш обработчик. Вызывается он как колбэк главным обработчиком системных вызовов. В контектсе прерывания, естесственно.
-
- Сообщения: 4
Re: О том как ядро модулями вертит
stari_maček писал(а): ↑10.01.2010 20:16Вот почитайте.
http://av5.com/journals-magazines-online/1/27/200
Системный вызов это софт-прерывание, на которое "навешивается" ваш обработчик. Вызывается он как колбэк главным обработчиком системных вызовов. В контектсе прерывания, естесственно.
спасибо за сылку, материал интересный, правда пока не осознаю чем он мне поможет, надеюсь это временно
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu