Поместить объявление обратных вызовов модуля init / exit в заголовочный файл? - PullRequest
0 голосов
/ 05 октября 2019

Я очень новичок в разработке модулей ядра Linux и у меня есть вопрос относительно структуры модуля. Рассмотрим следующий простой модуль:

Случай 1.

init.h

#include <linux/module.h>

int __init bda_init(void);

void __exit bda_exit(void);

module_init(bda_init);
module_exit(bda_exit);

init.c

#include <linux/module.h>
#include "init.h"

int __init bda_init(void){
    printk(KERN_INFO "Init module\n");
    return 0;
}

void __exit bda_exit(void){
    printk(KERN_INFO "Exit module\n");
}
* 1014Проблема, о которой я подумал при реализации инициализации таким образом, заключалась в том, что функции bda_init и bda_exit оба объявлены с внешней связью и поэтому должны быть связаны в коде ядра. Я осмотрел /proc/kallsyms
$ grep "bda" /proc/kallsyms 
0000000000000000 r _note_6      [bda_md]
0000000000000000 d __this_module        [bda_md]
0000000000000000 t cleanup_module       [bda_md]
0000000000000000 t bda_exit     [bda_md]

и обнаружил, что bda_exit было указано в каллсимах, но bda_int не было.

Случай 2.

При переписывании модуля просто как

#include <linux/module.h>

static int __init bda_init(void){
    printk(KERN_INFO "Init module\n");
    return 0;
}

static void __exit bda_exit(void){
    printk(KERN_INFO "Exit module\n");
}

module_init(bda_init);
module_exit(bda_exit);

Я думаю, что bda_exit исчезнет из kallsyms, но это не так. Kallsyms абсолютно одинаковы:

$ grep "bda" /proc/kallsyms                                                                                                                                                       
0000000000000000 t bda_exit     [bda_md]
0000000000000000 r _note_6      [bda_md]
0000000000000000 d __this_module        [bda_md]
0000000000000000 t cleanup_module       [bda_md]  

ВОПРОС : Почему объявление static не влияет на ksyms, введенное модулем, и является ли онообычная практика объявлять обратные вызовы init / exit в заголовке при реализации LKM?

...