我正在尝试加载这样的模块:
sudo insmod message_slot.ko
当的主数字message_slot.ko
为 240 时,我得到:
insmod: error: could not insert module message_slot: device or resource busy
我检查了一下lsmod
,发现在加载之前该驱动程序尚未加载。
更新:
message_slot.ko
是我编写的驱动程序,register_chrdev(240, "msg_slot", &Fops)
在 中使用module_init
。当我尝试用 加载它时,register_chrdev(2, "msg_slot", &Fops)
它可以正常工作。
答案1
如果字符设备已使用主版本 240,则它应该存在于 中/dev/char
。例如:
doug@s19:~/temp-k-git/linux$ ls -l /dev/char | grep 240:
lrwxrwxrwx 1 root root 8 May 10 20:23 240:0 -> ../nvme0
doug@s19:~/temp-k-git/linux$
查看设备.txt内核树中的文档。
我认为您的“资源繁忙”错误是因为 240 主版本号已被某些东西使用。
编辑:也许查看已使用的主要编号的更好方法是查看/proc/devices
。例如:
doug@s19:~/c$ cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
7 vcs
10 misc
13 input
21 sg
29 fb
89 i2c
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
204 ttyMAX
226 drm
234 mei
235 hidraw
236 aux
237 cec
238 ttyDBC
239 lirc
240 nvme-generic
241 nvme
242 vfio
243 bsg
244 watchdog
245 remoteproc
246 ptp
247 pps
248 rtc
249 dma_heap
250 dax
251 dimmctl
252 ndctl
253 tpm
254 gpiochip
Block devices:
7 loop
8 sd
9 md
11 sr
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
259 blkext
根据评论,它显示 cec,但我的系统上的主编号为 237。
对用户的建议是使用动态分配专业而不是静态分配专业,让系统决定。参考。