Если вы говорите об использовании чего-то другого, кроме insmod
, то нет: insmod
— это единственный известный мне способ инициализировать ваш модуль.
В противном случае эта вещь module_init
является макросом и на самом деле не является вызовом функции (вы не можете вызывать функцию из глобальной области видимости в C). Он расширяется до некоторого предопределенного «конструктора модуля», который вызывает вашу функцию инициализации, в зависимости от того, компилируете ли вы как динамический модуль или как объект, встроенный в ядро. Его роль состоит в том, чтобы избежать #ifdef
чрезмерных усилий при разработке модуля и упростить процесс разработки (см. -again.html" rel="nofollow">это).
Итак, если по какой-то причине (но я не рекомендую вам это делать) вы хотите вызвать свою функцию инициализации из кода вашего модуля, то просто вызовите ее напрямую. Например:
static void some_other_function(void) {
// ...
initialize();
// ...
}
static int initialize(void) {
// your initialization code
}
module_init(initialize);
Изменить: удалено __init
после комментария Евгения.
Однако я рекомендую, чтобы только расширение module_init
вызывало вашу функцию инициализации, а другой общий код находился в отдельной функции:
static void some_other_function(void) {
// ...
something_that_might_get_called_afterwards_also();
// ...
}
static int __init initialize(void) {
// your initialization code (done only once)
something_that_might_get_called_afterwards_also();
// some other one-time code
}
module_init(initialize);
person
eepp
schedule
20.07.2012