insmod lcd.ko:module has no symbols (stripped?)

探讨了在生成文件系统过程中lcd.ko模块的符号表丢失问题,通过使用nm工具对比模块在不同阶段的符号表变化,定位问题出现在文件系统构建步骤中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 insmod lcd.ko:


lcd: module has no symbols (stripped?)  (加载时候没有符号表,用nm可看的)

 

原因:lcd这个驱动与板上的内核不相配??

 

注意有可能不是因为这个原因:

 

我这里是因为 在生成文件系统的时候,需要把编译成模块的驱动放到文件系统,让系统运行统起来后加载进内核,就是在系统启动好后加载时候出错!!!

 

原因我也仔细查了哈子,用nm看生成的模块lcd.ko时有符号表的:

[root@Mike modules]# nm lcd.ko
00000000 T cleanup_module
00000064 T CloseLCD
0000010c T clr_screen
         U __copy_user
00000244 T disp_screen
00000000 T init_module
0000000c r __kstrtab_CloseLCD
...

 

但是只要生成文件系统后:

make rootfs

 

lcd.ko符号表就没有了

[root@Mike modules]# nm lcd.ko
nm: lcd.ko:无符号
这下就晕死了,估计是因为制作文件系统的时候把符号表去掉了:

 

 

[root@Mike LDE]# make rootfs
 
Checking build system dependencies:
sed works:                          Ok
GNU make version '3.79.1,':         Ok
gcc version '3.3.2':                Ok
which installed:                    Ok
bison installed:                    Ok
flex installed:                     Ok
gettext installed:                  Ok
Build system dependencies:          Ok
 
/sbin/ldconfig -r /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/root 2>/dev/null
# Use fakeroot to pretend all target binaries are owned by root
rm -f /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
touch /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/.fakeroot.00000
cat /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/.fakeroot* > /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
echo "chown -R root:root /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/root" >> /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
# Use fakeroot to pretend to create all needed device nodes
echo "/home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/bin/makedevs -d target/generic/device_table.txt /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/root" /
        >> /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
# Use fakeroot so mkfs.jffs2 believes the previous fakery
echo "/home/innova/LDE/user/buildroot-20060919-1/toolchain_build_mipsel/mtd_orig/util/mkfs.jffs2 -e 0x10000 -l -d /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/root -o /home/innova/LDE/user/buildroot-20060919-1/rootfs.mipsel.jffs2" /
        >> /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
chmod a+x /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
/home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/usr/bin/fakeroot -- /home/innova/LDE/user/buildroot-20060919-1/build_mipsel/staging_dir/_fakeroot.rootfs.mipsel.jffs2
rootdir=/home/innova/LDE/user/buildroot-20060919-1/build_mipsel/root
table='target/generic/device_table.txt'
-rw-r--r--    1 root     root      1355192  4月  4 11:04 /home/innova/LDE/user/buildroot-20060919-1/rootfs.mipsel.jffs2

 

记得以前都没有出现过这样的事情的,真是怪异的很,搞的我又要去看makefile 了,并且现在打印机的缺纸检测也还不行,,,惨了 。。。

 

先吃个饭下午再写吧。。。还不知道在Mikefile哪里改~~~【别急着离开,后续解决办法在后一篇文章中哦!!】

 

### 解析 "Function Not Implemented" 错误 当尝试通过 `insmod` 命令加载内核模块时遇到 `'Function not implemented'` 的错误提示,通常意味着所编译的模块与正在使用的内核版本不匹配[^1]。这种情况下,模块可能试图调用不存在于当前内核配置中的函数或特性。 #### 验证内核版本一致性 为了确保兼容性,应当确认用于编译模块的内核源代码树版本与目标系统的运行内核版本完全一致。可以通过比较 `/proc/version` 和源码目录下的 `.vermagic` 文件来验证这一点: ```bash cat /proc/version grep VERMAGIC_STRING /usr/src/linux/include/generated/uapi/linux/compile.h ``` #### 正确设置内核开发环境 如果发现版本不符,则需调整至正确的内核头文件路径并重新编制模块。对于大多数发行版而言,默认情况下会安装对应版本的内核头文件包(如 Debian/Ubuntu 中的 `linux-headers-$(uname -r)`),这有助于维持良好的兼容性[^4]。 #### 编译前清理旧对象 有时残留的目标文件也可能引发此类问题,在执行新的编译之前建议先清除之前的构建产物: ```bash make clean ``` 之后再按照常规流程进行编译操作。 #### 使用 modprobe 替代 insmod 考虑到直接使用 `insmod` 可能绕过了某些必要的初始化过程,推荐改用更高级别的工具——`modprobe` 来完成模块加载工作。它不仅支持自动处理依赖关系,还能更好地管理参数传递等问题[^3]: ```bash sudo modprobe xxx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值