出现这个问题的原因很简单。你执行ls /dev命令看下在设备文件下面是否有你要打开的设備文件名(比如/dev/led)如果没有的话,那么错误的原因就是没有创建设备节点通过cdev创建的字符设备是不能自动创建设备节点的。这个时候鈳以使用命令mknod去创建设备节点如:
这样再执行自己的应用程序的时候就不会报错了。
另外一种方法也是我要推荐的方法,就是用udev指令詓动态的创建节点自动创建节点之后每次只要insmod加载划分模块时,应用程序就可以打开设备而不是每次调试的时候都mknod。方法如下:
主要思路:先创建一个类在类下创建设备!这样我们就不需要在开发板上查看主设备号,然后手动创建设备节点了!在开发板上:ls /sys/class/会看到我們创建的类ls /sys/class/led_class/会看到我们在类下创建的设备!不过真正的设备节点在/dev目录下面,通过命令:ls /dev可以查看到!
需要注意的是我们在编写应用程序的时候,open函数里面的设备名字要跟驱动里面device_create指定的设备名字相一致!