一、什么是设备文件?
驱动加载成功需要在/dev 目录下创建一个与之对应的设备节点文件,应用程序就是通过操作这个设备节点文件来完成对具体设备的操作。
二、mknod 命令手动创建设备文件
安装驱动后不会自动在/dev/目录下创建设备文件,可以使用mknod 命令创建设备文件。
mknod /dev/drive_name { b | c } Major Minor
/dev/drive_name:要创建的设备节点路径文件名;例如:/dev/myearly
{ b | c }:设备类型,b表示块设备,c表示字符设备;例如:c
Major:主设备号;
Minor:次设备号;
例子:
mknod /dev/led c 250 0
其中dev/led 为设备节点 ,c 代表字符设备, 250代表主设备号, 0代表次设备号。
三、自动创建设备文件
udev 可以检测系统中硬件设备状态,可以根据系统中硬件设备状态来创建或者删除设备文件。
比如使用modprobe 命令成功加载驱动模块以后就自动在/dev 目录下创建对应的设备节点文件,使用 rmmod 命令卸载驱动模块以后就删除掉/dev 目录下的设备节点文件。
使用 busybox 构建根文件系统的时候,busybox 会创建一个 udev 的简化版本—mdev。
使用示例:
首先要创建一个 class 类:
struct class *class_create (struct module *owner, const char *name)
卸载驱动程序的时候需要删除掉类,类删除函数为 class_destroy,函数原型如下:
void class_destroy(struct class *cls);
上一小节创建好类以后还不能实现自动创建设备节点,我们还需要在这个类下创建一个设备:
struct device *device_create(struct class *class,
struct device *parent,
dev_t devt,
void *drvdata,
const char *fmt, ...)
同样的,卸载驱动的时候需要删除掉创建的设备,设备删除函数为 device_destroy:
void device_destroy(struct class *class, dev_t devt)
参数 class 是要删除的设备所处的类,参数 devt 是要删除的设备号。