我正在编写内核源代码之外的代码。有两个模块,第一个名为printt,其中包含一个函数printtty()
,用于向当前终端打印字符串,第二个模块名为hello,在初始化期间调用printtty()
。
我已经在模块printt中添加了EXPORT_SYMBOL(printtty)
,并且在执行insmod ./printt.ko
之后,可以在/proc/kallsyms
中看到printtty()
的信息。
模块hello的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 文件中。
但是我想知道是否有一种方法可以仅从外部模块导出符号(而无需修改内核源代码树)?