未定义的函数在内核linux中插入新模块

时间:2014-08-19 17:01:01

标签: c linux module linux-kernel kernel

我正在为内核linux 2.6.32进行新的系统调用,目的是使myOpen非常接近原始的open。 我用新的变量修改了原始的struct文件(linux / fs.h),我想继续使用原始的fileTable和myOpen(我希望在原来的open代码中添加myOpen,切换到我的情况只是一个标志)。

要做到这一点,我在一个模块(module.ko)中编译我的代码并在我的内核(修改了fs.h的内核)上加载它。

现在的问题是,如果我使用一些相对于文件系统的函数(例如:get_unused_fd_flags(flags); fd_install(fd,f);等等),则找不到某些变量(我将其视为警告,也是在内核终端)。

我认为问题在于我尝试使用一些内核函数,但我和其他像filp_open一样,我没有发现错误。我怎么解决这个问题?

终端:

make -C /lib/modules/2.6.32progb/build M=/home/mauro/Scrivania modules 
make[1]: ingresso nella directory "/home/mauro/Scrivania/linux-2.6.32.B" 
    Building modules, stage 2. 
    MODPOST 1 modules 
WARNING: "alloc_fd" [/home/mauro/Scrivania/moduloB.ko] undefined! 
make[1]: uscita dalla directory "/home/mauro/Scrivania/linux-2.6.32.B" 
[sudo] password for mauro: insmod: error inserting 'moduloB.ko': -1 Unknown symbol in module

1 个答案:

答案 0 :(得分:1)

alloc_fd不会导出到模块。

这是内核开发人员的暗示,他们不希望鼓励模块开发人员调用该函数。现在,既然内核是开源的,你当然可以通过简单地修改内核源来导出函数来添加:“EXPORT_SYMBOL(alloc_fd);”就在fs / file.c中的函数之后

您尝试使用的某些功能已经导出 - 因此您不会收到警告。