Я пытаюсь загрузить такой модуль:
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)
, вместо этого он работает.
Если основная версия 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$
См. Документ devices.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 в моей системе.
Пользователям предлагается использовать динамическое назначение основного вместо статического, позволяя системе решать. Ссылка .