linux注册节点报错,linux驱动错误:no such file or directory

当我们用insmod 加载驱动,然后在应用程中调用open 驱动文件,有时候会出现这个错误:cannot open ***:no such file or directory.

出现这个问题的原因很简单。你执行ls /dev命令看下在设备文件下面是否有你要打开的设备文件名(比如/dev/led),如果没有的话,那么错误的原因就是没有创建设备节点。通过cdev创建的字符设备是不能自动创建设备节点的。这个时候可以使用命令mknod去创建设备节点,如:

mknod  /dev/led  c  253  0(假设的)。

这样再执行自己的应用程序的时候就不会报错了。

另外一种方法,也是我要推荐的方法,就是用udev指令去动态的创建节点,自动创建节点之后每次只要insmod加载模块,应用程序就可以打开设备,而不是每次调试的时候都mknod。方法如下:

static struct class *led_class;

在模块初始化函数:int xxx_init(void)中添加这两句:

led_class = class_create(THIS_MODULE, "led_class");

device_create(led_class, NULL, MKDEV(major, 0), NULL,"led_device");

在模块卸载函数void xxx_exit(void)中添加这两句:

unregister_chrdev(major,"led");

device_destroy(led_class,MKDEV(major, 0));

主要思路:先创建一个类,在类下创建设备!这样我们就不需要在开发板上查看主设备号,然后手动创建设备节点了!在开发板上:ls /sys/class/会看到我们创建的类,ls /sys/class/led_class/会看到我们在类下创建的设备!不过真正的设备节点在/dev目录下面,通过命令:ls /dev可以查看到!

需要注意的是,我们在编写应用程序的时候,open函数里面的设备名字要跟驱动里面device_create指定的设备名字相一致!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值