由于情况各异,若本文方案解决不了,大家也可以参考本文评论区各路大佬的解决方案尝试解决。
注意!
本文仅针对找不到常用函数有用!!!
比如_printk
、kfree
、kmalloc
、memset
啥的;
如果不是常用函数,是自己其他模块中的函数,本文不适用。
背景
笔者在编译ko
模块时,遇到了如下报错:
modpost
提示的都是常用函数啊,比如_printk
、kfree
、kmalloc
、memset
啥的
ERROR: modpost: "__raw_copy_from_user" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "_printk" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "nonseekable_open" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "kmalloc_caches" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "kmalloc_trace" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "kfree" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "warn_slowpath_fmt" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "memset" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
ERROR: modpost: "__register_chrdev" [/home/geng/Item/nscscc_drivers/lcd/lcd.ko] undefined!
一度怀疑是自己的Makefile、交叉编译器等出了问题…
解决方案
问题出在Linux内核原码的.config
文件上!
把CONFIG_TRIM_UNUSED_KSYMS
关闭掉就可以了!修改后记得重新make
一下Linux源码! 修改后记得重新make
一下Linux源码!
可以通过menuconfig修改,这里以MIPS的menuconfig为例:
也可以直接怼.config
文件,把:
CONFIG_TRIM_UNUSED_KSYMS=y
直接换成
# CONFIG_TRIM_UNUSED_KSYMS is not set
修改后记得重新make
一下Linux源码! 修改后记得重新make
一下Linux源码!