我正在为内核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
答案 0 :(得分:1)
alloc_fd不会导出到模块。
这是内核开发人员的暗示,他们不希望鼓励模块开发人员调用该函数。现在,既然内核是开源的,你当然可以通过简单地修改内核源来导出函数来添加:“EXPORT_SYMBOL(alloc_fd);”就在fs / file.c中的函数之后
您尝试使用的某些功能已经导出 - 因此您不会收到警告。