学习《Linux 设备驱动开发详解》一书的第6章过程中,编译好globalmem驱动模块后,通过insmod加载模块时发现以下错误提示:
# insmod globalmem.ko
insmod: error inserting 'globalmem.ko': -1 Device or resource busy
因为是刚开始学LINUX驱动程序,又是通过VMware安装的LINUX操作系统。怀疑是操作系统的问题,后来仔细想想,既然模块都编译通过了,那系统应该是没有什么问题。
敲了一条命令:cat /proc/devices
Character devices:
1 mem
2 pty
3 ttyp
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
6 lp
7 vcs
10 misc
13 input
21 sg
29 fb
128 ptm
136 pts
180 usb
189 usb_device
254 vmci
Block devices:
1 ramdisk
2 fd
7 loop
8 sd
9 md
22 ide1
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
突然想起globalmem.c程序中设定的主设备号也是254,和上面的vmci应该有冲突。所以加载时才出现上面的提示。
解决方法:更换一个上表未使用的的主设备号,或者直接让系统自动分配