我正在尝试在 Ubuntu 14.04 中插入一个模块,但
sudo insmod xpcie.ko
和
sudo modprobe xpcie
返回错误
could not insert xpcie.ko: Operation not permitted
我已将 xpcie.ko 的副本放在 /lib/modules/uname -r/kernel/drivers 中,并已运行
depmod -a xpcie.ko
该模块来自 Xilinx 的XAPP1022。它最初是为 Fedora 9 设计的。这可能是导致此错误的原因吗?如果是,我需要在模块中更改什么?如果不是,还有什么原因导致此错误?
谢谢。
编辑:
uname -r
返回 3.10.40-gb271e8f
答案1
事实证明,如果模块尝试使用已被占用的主设备号来初始化设备,则 insmod 和 modprobe 将失败并显示错误消息
operation not permitted
特别是对于 XAPP 1022,驱动程序尝试注册一个字符设备,并为其分配主编号 240。我的机器上已经有另一个使用该主编号注册的设备,这导致驱动程序无法执行其初始化功能。
解决方案是改变
int gDrvrMajor = 240;
到
int gDrvrMajor = {some major number that isn't taken}
在 xpcie.c 中。然后还需要更改
mknod /dev/xpcie c 240 1
到
mknod /dev/xpcie c {same other major number as above} 1
在 make_device 内部。