学习《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应该有冲突。所以加载时才出现上面的提示。
解决方法:更换一个上表未使用的的主设备号,或者直接让系统自动分配
本文记录了在学习《Linux设备驱动开发详解》过程中遇到的驱动加载失败问题及解决方法。由于自定义驱动程序的主设备号与系统现有设备号冲突导致加载失败,通过查看系统设备列表并更改驱动程序的主设备号解决了此问题。
1万+

被折叠的 条评论
为什么被折叠?



