Linux 驱动报错的原因非常多,不能一概而论。下面我按常见原因分类 + 排查思路给你一个系统性的说明,你可以对照自己的情况。
implicit declaration of function 'xxx'
✅ 解决:
uname -r
ls /lib/modules/$(uname -r)/build
确保 Makefile 中:
KDIR := /lib/modules/$(shell uname -r)/build
CONFIG_MODULES=n)✅ 排查:
zcat /proc/config.gz | grep xxx
或:
grep CONFIG_xxx /boot/config-$(uname -r)
init_module、file_operations 结构变化✅ 解决:
Documentation/ 或源码git blame 查 API 变更报错:
Unknown symbol in module
原因:
EXPORT_SYMBOL 未导出的函数✅ 解决:
modinfo your_driver.ko
dmesg | tail
确认依赖:
modprobe dependency_module
✅ 排查:
cat /proc/devices
cat /proc/interrupts
dmesg
insmod: ERROR: could not insert module
✅ 解决:
sudo insmod xxx.ko
或确认 Secure Boot 未阻止:
mokutil --sb-state
常见:
struct device *dev = NULL;
dev->name; // crash
✅ 查看:
dmesg
通常有:
BUG: unable to handle page fault
✅ 建议:
mutex 而非 spinlock 睡眠场景CONFIG_DEBUG_ATOMIC_SLEEP✅ 检查:
lspci
lsusb
dmesg | grep -i your_device
dmesg | tail -50
modinfo your_driver.ko
uname -a
make clean && make
请补充以下信息之一:
我可以直接帮你定位到具体代码哪一行有问题。