日期:2014-05-16  浏览次数:28209 次

加载驱动后/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