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

我正在为内核linux 2.6.32进行一次新的系统调用,目的是让myOpen与原始开放非常接近。 我用一个新变量修改了原始结构文件(linux / fs.h),并且我想继续使用myOpen原始文件表(我希望在原始打开的代码中添加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

alloc_fd不会导出到模块。

这是内核开发人员暗示他们不希望模块开发人员调用该函数的暗示。 现在,由于内核是开源的,因此无论如何只要修改内核源代码即可添加以下内容:“EXPORT_SYMBOL(alloc_fd);” 在fs / file.c中的函数后面

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

链接地址: http://www.djcxy.com/p/87887.html

上一篇: Undefined function inserting new module in kernel linux

下一篇: Where to start with Linux Kernel Modules?