insmod 报错问题定位纪要

加载驱动时发现有未知的符号表,下面记录一下定位的过程。

root@OpenWrt:~# insmod slic3_intel.ko

77.827684\] slic3_intel: Unknown symbol SLICMGR_HOOK_REGISTER (err -2) \[ 77.834429\] slic3_intel: Unknown symbol SPI_bytes_write (err -2) \[ 77.840652\] slic3_intel: Unknown symbol SPI_bytes_read (err -2) failed to insert slic3_intel.ko root@OpenWrt:\~# SLICMGR_HOOK_REGISTER\[ 105.432913\] \[olt\]vendor_id\[ 0

查看ko依赖关系:

insmod sys_mod.ko

root@hnk:/# cat /proc/kallsyms | grep SLICMGR_HOOK_REGISTER

e5d6cd88 T SLICMGR_HOOK_REGISTER [fxs3]

可以看到SLICMGR函数在fxs3模块

接下来需要insmod fxs3.ko

root@OpenWrt:/lib/modules# insmod fxs3.ko

394.792002\] fxs3: Unknown symbol getPcmConfig (err -2) \[ 394.797421\] fxs3: Unknown symbol SPI_Reset (err -2) \[ 394.802379\] fxs3: Unknown symbol pcm_setFreeRunMode (err -2) \[ 394.808241\] fxs3: Unknown symbol pcmChipScuQuery (err -2) \[ 394.813729\] fxs3: Unknown symbol SPI_cfg (err -2) \[ 394.818519\] fxs3: Unknown symbol pSLIC_Reset (err -2) \[ 394.823806\] fxs3: Unknown symbol pcm_reinit_slic (err -2) \[ 394.829342\] fxs3: Unknown symbol SPI_bytes_write (err -2) \[ 394.834868\] fxs3: Unknown symbol SPI_bytes_read (err -2)

接下来安装下面的ko,使用cat /proc/kallsyms | grep SLICMGR_HOOK_REGISTER依次找到函数属于那个ko模块,加载相应的ko即可

insmod spi.ko

insmod sys_mod.ko

insmod lec.ko

insmod DSPCore.ko

insmod spi.ko

insmod pcm1.ko

insmod spi.ko

insmod fxs3.ko

insmod slic3_intel.ko

最后可以看到加载成功了。

那么没有正常的设备可以看到cat /proc/kallsyms | grep SLICMGR_HOOK_REGISTER呢,我们怎么找到ko的依赖关系呢。

(1)查看vmlinux

nm vmlinux | grep SLICMGR_HOOK_REGISTER

readelf -s vmlinux | grep SLICMGR_HOOK_REGISTER

(2),查看ko依赖关系:

readelf -s module.ko | grep SLICMGR_HOOK_REGISTER

modinfo module.ko

如果在 vmlinux 或 .ko 中找不到该符号,可能是因为没有使用 EXPORT_SYMBOL 导出,或者没有正确配置内核编译选项。确保在驱动源码中使用了 EXPORT_SYMBOL,并且在内核配置中启用了符号导出选项,例如:

CONFIG_KALLSYMS=y

CONFIG_KALLSYMS_ALL=y

1,扫描系统KO文件:遍历 /lib/modules/$(uname -r)/kernel/ 下所有 .ko 文件

使用 nm -D *.ko | grep SLICMGR_HOOK_REGISTER

ubuntu@ubuntu:~/test/BSP/sdk_2.1$ nm openwrt-21.02/openwrt-21.02.1_dev/staging_dir/target-aarch64_cortex-a53_musl/root-airoha/lib/modules/fxs3.ko | grep SLICMGR_HOOK_REGISTER

0000000000015654 T SLICMGR_HOOK_REGISTER

ubuntu@ubuntu:~/test/BSP/sdk_2.1 nm openwrt-21.02/openwrt-21.02.1_dev/staging_dir/target-aarch64_cortex-a53_musl/root-airoha/lib/modules/pcm1.ko | grep getPcmConfig

00000000000000a0 T getPcmConfig

依赖关系追踪方法‌

获取目标模块依赖树:modinfo target.ko | grep depends

2,扫描vmlinux:

使用 nm -D vmlinux | grep SLICMGR_HOOK_REGISTER

相关推荐
范纹杉想快点毕业2 小时前
STM32单片机与ZYNQ PS端 中断+状态机+FIFO 综合应用实战文档(初学者版)
linux·数据结构·数据库·算法·mongodb
拾光Ծ2 小时前
【Linux】Ext系列文件系统(一):初识文件系统
linux·运维·服务器·硬件架构·ext文件系统
一叶龙洲2 小时前
ubuntu 25.10安装oh-my-zsh
linux·ubuntu
IT19952 小时前
Linux笔记-使用systemd管理进程
linux·运维·笔记
草莓熊Lotso2 小时前
从零手搓实现 Linux 简易 Shell:内建命令 + 环境变量 + 程序替换全解析
linux·运维·服务器·数据库·c++·人工智能
User_芊芊君子2 小时前
【LeetCode原地复写零】:双指针+逆向填充,O(n)时间O(1)空间最优解!
android·linux·leetcode
微露清风11 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
不会代码的小猴11 小时前
Linux环境编程第六天笔记--system-V IPC
linux·笔记
阳光九叶草LXGZXJ11 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习