Linux 如何从外部模块导出符号?
我在内核源代码树之外编码。有两个模块,第一个printty有一个函数Linux 如何从外部模块导出符号?,linux,gcc,linux-kernel,kernel,Linux,Gcc,Linux Kernel,Kernel,我在内核源代码树之外编码。有两个模块,第一个printty有一个函数printty()将字符串打印到当前tty,第二个模块hello在初始化期间调用printty() 我在模块printt中添加了EXPORT\u SYMBOL(printty),在insmod./printt.ko之后,printty()的信息可以在/proc/kallsyms中看到 模块的make过程正常。但是insmod./hello.ko将导致如下错误: insmod: ERROR: could not insert mo
printty()
将字符串打印到当前tty,第二个模块hello在初始化期间调用printty()
我在模块printt中添加了EXPORT\u SYMBOL(printty)
,在insmod./printt.ko
之后,printty()
的信息可以在/proc/kallsyms
中看到
模块的make
过程正常。但是insmod./hello.ko
将导致如下错误:
insmod: ERROR: could not insert module hello.ko: Invalid parameters
和dmesg
显示
hello: no symbol version for printtty
hello: Unknown symbol printtty (err -22)`.
我已经把它修好了
(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
(确保输入到printt模块的正确路径)
现在重新构建您的hello模块,它将很好地加载
有关详细信息,请参见“6.3其他外部模块的符号”