gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:37 25 4
gpt4 key购买 nike

我正在为内核 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 中的函数之后

您尝试使用的一些函数已经导出 - 因此您不会收到针对它们的警告。

关于c - 未定义的函数在内核linux中插入新模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25389057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com