加载驱动后/dev目录下的设备文件为什么打不开
# insmod second.ko
# cat /proc/devices
Character devices:
1 mem
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
14 sound
21 sg
29 fb
116 alsa
128 ptm
136 pts
162 raw
180 usb
189 usb_device
216 rfcomm
251 second
...
# mknod /dev/second c 251 0
# ./second_test
Device open failure
试着打开/dev目录下的普通文件是没问题的,但打开设备文件就是打不开,
我记得上次还是没问题的,为什么现在打不开设备文件呢?
------解决方案--------------------顺带在应用程序里把open的错误原因也打出来
用perror
------解决方案--------------------对头,单凭Device open failure很难判断是哪里出现问题。
------解决方案--------------------看应用程序里的主设备号是不是写错了
------解决方案--------------------看下/dev/second在不在
驱动的open接口有没有问题?
------解决方案--------------------在驱动层有无实现该文件节点的open file_operation 函数按照经验来看 现在的/dev/都是通过udev自动创建的,你上层虽然open了函数,但是底层驱动如果没有对应的open动作的支持依然是打不开
------解决方案--------------------你有在open函数中加打印吗?看到哪步会出错,个人感觉 象是在init创建设备节点时候的问题
------解决方案--------------------刚进入open的时候 printk下 下面动态定时器 加个printk下 最后快结束的时候 再加个prinrk
然后在上层试图open 如果不行的话,你demesg下看看 哪句话有打印,哪句没打印.如果一句没有说明出在你的设备节点创建的问题上.
------解决方案--------------------一般现在的/dev/下节点都是由udev去自动创建,他在/sys/class下也有对应的设备节点 你可以去那看看能否open