编译Linux内核模块ko时遇到ERROR: modpost undefined的解决方法

背景

笔者在编译ko模块时,遇到了如下报错:
modpost提示的都是常用函数啊,比如_printkkfreekmallocmemset啥的)

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!

报错信息,都是ERROR: modpost!

一度怀疑是自己的Makefile、交叉编译器等出了问题…

解决方案

问题出在Linux内核原码的.config文件上!

CONFIG_TRIM_UNUSED_KSYMS关闭掉就可以了!修改后记得重新make一下Linux源码! 修改后记得重新make一下Linux源码!

可以通过menuconfig修改,这里以MIPS的menuconfig为例:
menuconfig一级菜单 Enable loadable moudle support
关闭 Trim unused exported kernel symbols
也可以直接怼.config文件,把:

CONFIG_TRIM_UNUSED_KSYMS=y

直接换成

# CONFIG_TRIM_UNUSED_KSYMS is not set

修改后记得重新make一下Linux源码! 修改后记得重新make一下Linux源码!

猜你喜欢

转载自blog.csdn.net/weixin_52027058/article/details/132019367
今日推荐