加載驅動模塊時Device or resource busy的解決方法
加載驅動模塊時Device or resource busy的解決方法
insmod或modprobe驅動模塊時Device or resource busy的解決方法
在編譯好memdev驅動模塊后,通過insmod加載模塊時發現以下錯誤提示:
#insmod memdev.ko
insmod: error inserting 'memdev.ko': -1 Device or resource busy
這種情況一般都是驅動的設備號已經被系統使用了。
我回頭查看memdev模塊的主設備號,我定義的是254,然后查看系統設備列表。
#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
此時發現字符設別驅動的254已經被使用了。
解決方法:更換一個上表未使用的的主設備號,或者直接讓系統自動分配。
-----------------------------------------------------------------------------------------
另外值得注意的是,編譯內核模塊的時候,必須有一個已經配置好並編譯過的內核源代碼樹。否則會出現以下錯誤:
Building modules, stage 2.
/xxx/linux-2.6.29/scripts/Makefile.modpost:43: include/config/auto.conf: No such file or directory
make[2]: *** No rule to make target 'include/config/auto.conf'.
make[1]: *** [modules] Error 2
make[1]: Leaving directory '/xxx/linux-2.6.29'
make: *** [all] Error 2
解決方法:先配置編譯內核源代碼樹,然后再編譯內核模塊或者驅動模塊。
一:insmod時候錯誤:
1:錯誤信息insmod: error inserting 'hello.ko': -1 Device or resource busy
2:原因:你的代碼里面的設備號和系統已經存在的相沖突
3:查看系統的設備號:
cat /proc/devices
查看和你的設備號有沖突的嗎,注意要分開字符設備和塊設備
4:解決,當然是你再換個設備號了。
二:rmmod
0:用rmmod -f也刪除不掉的
1:查看當前gcc版本,命令:gcc -v
2:ubuntu默認版本是4.6
3:如果你的不是4.6版本,修改成4.6,在目錄/usr/bin下,建立軟鏈接,
我之前的gcc是軟鏈接到gcc-4.4版本了,修改成gcc-4.6版本,如果之前存在gcc的軟鏈接,刪除他
sudo ln -s /usr/bin/gcc-4.6 /usr/bin/gcc
4:重新insmod模塊,如果提示你模塊已經存在,就是說你沒修改之前安裝的模塊,你需要重啟電腦,然后再insmod就可以了。