qwe*_*eah 7 linux gcc kernel linux-kernel
我在内核源代码树之外编码.有两个模块,第一个printt具有将printtty()字符串打印到当前tty 的函数,第二个模块helloprinttty()在初始化期间调用.
我已经EXPORT_SYMBOL(printtty)在模块printt中添加了,之后insmod ./printt.ko,printtty()可以看到的信息/proc/kallsyms.
make模块hello的过程可以正常进行.但insmod ./hello.ko会导致如下错误:
insmod: ERROR: could not insert module hello.ko: Invalid parameters
Run Code Online (Sandbox Code Playgroud)
并dmesg显示
hello: no symbol version for printtty
hello: Unknown symbol printtty (err -22)`.
Run Code Online (Sandbox Code Playgroud)
我已经修好了
(1)将.ko文件复制到/ lib/modules/version/kernel下面的位置
(2)将导出的符号添加到/lib/modules/version/build/Module.symvers
但我想知道有没有办法从外部模块导出符号(不修改内核源代码树)?
在你的hello模块的Makefile 的最顶部添加这一行:
KBUILD_EXTRA_SYMBOLS := /home/your-user/path/to/printt/Module.symvers
Run Code Online (Sandbox Code Playgroud)
(务必将正确的路径放入printt模块).
现在重建你的hello模块,它将被加载得很好.
有关详细信息,请参阅Documentation/kbuild/modules.txt,"6.3来自另一个外部模块的符号".