linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—&#931...

按照国嵌的视频教程上来说的,最后就是—自动创建设备文件!

其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!!

不管了,写完收工,睡觉!

(四)、嵌入式Linux内核驱动进阶

(7)、字符设备驱动(自动创建设备节点)—⑥

1、概念

在前面的实验中饿设备驱动程序由于无法自动创建设备节点,这里只好利用 mknod 命令手动创建设备节点。

实际上 Linux 内核为我们提供了一组函数,可以用来再模块加载的时候自动在 /dev

目录下创建相应的设备节点,并在卸载模块式删除该节点。

当然前提条件是在应用层移植了 udev(Linux Kernel 2.6

系列的设备管理器,它是工作在用户空间的),在嵌入式系统中则使用 busybox 的 mdev 替代。

内核中定义了 struct class 结构体,顾名思义,一个 struct class

结构体类型变量对应一个类。内核同时提供了 class_creat(...) 函数,可以用它来创建一个类,这个类存放于 sysfs

下面。一旦创建好了这个类,再调用 device_creat(...) 函数来在 /dev 目录下创建相应的设备节点。

这样在加载模块的时候,用户空间中的 udev/mdev 就会自动相应 device_creat(...) 函数,去

/sys/class 下寻找对应的类从而创建设备节点。

注意:

在较 kernel 2.6 早的内核版本中,device_creat(...) 函数名称不同,它是

class_device_creat(...),所以在新的内核中编译以前的模块程序有时会报错,这是因为函数名称不同,而且里面的参数设置也有一些变化。

2.编程接口

①、class_create

函数功能:

创建一个 class 结构。

头文件:

#include

函数原型:

struct class *class_creat(struct module *owner,const char

*name)

参数说明:

owner:指定类的所有者是哪个模块。

name:指定类名。

返回值:

成功返回 class 结构,失败返回错误号。

②、class_destory

函数功能:

销毁一个 class 结构。

头文件:

#include

函数原型:

void class_destory(struct class *cls)

参数说明:

class:待销毁的类。

返回值:

③、device_create

函数功能:

创建一个设备,并将它注册到 sysfs 中。

头文件:

#include

函数原型:

struct device *device_create(struct class *class,struct device

*parent,dev_t devt,void *drvdata,const char *fmt,...)

参数说明:

class:指定所要创建的设备所从属的类。

parent:这个设备的父设备,如果没有就指定为 NULL。

devt:设备号。

drvdata:被添加到该设备用于回调的数据,没有则置位 NULL。

fmt:设备名称。

...:可以是从设备号,作为格式字符串 fmt 的参数。

④、device_destory

函数功能:

移除一个被 device_creat() 创建的设备。

头文件:

#include

函数原型:

void device_destory(struct class *class,dev_t devt)

参数说明:

class:指定所要移除的设备所从属的类。

devt:设备号。

返回值:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值