Linux 设备文件的创建和mdev

本文介绍了Linux设备驱动模型中设备文件的创建过程,涉及sysfs文件系统、kobject、设备类、驱动及设备的关系。在设备驱动注册到系统后,通过class_create和device_create结合uevent机制调用mdev来创建设备文件。mdev在嵌入式系统中用于根据规则创建设备文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

本文是嵌入式企鹅圈开篇 -- linux 字符设备驱动剖析》的姐妹篇,在上述文章里面我们详细描述了字符设备驱动框架涉及的驱动注册、通过设备文件来访问驱动等知识,并明确通过 device_create 接口并结合 mdev 来创建设备文件,但没有展开这个知识点。本文将从代码级去理解 Linux 设备类和设备文件的创建过程。通过这两篇文章,我们将可以对 linux 字符设备驱动的机制和脉络有全面的认识。

以下程序分析没有缩进,编辑了好几次都不行,耐心点才能跟踪完整个代码:-)


一、设备类相关知识

设备类是虚拟的,并没有直接对应的物理实物,只是为了更好地管理同一类设备导出到用户空间而产生的目录和文件。整个过程涉及到sysfs文件系统,该文件系统是为了展示linux设备驱动模型而构建的文件系统,是基于ramfslinux根目录中的/sysfs即挂载了sysfs文件系统。

Struct kobject数据结构是sysfs的基础,kobjectsysfs中代表一个目录,而linux的驱动(struct driver)、设备(struct device)、设备类(struct class)均是从kobject进行派生的,因此他们在sysfs中都对应于一个目录。而数据结构中附属的struct device_attributedriver_attributeclass_attribute等属性数据结构在sysfs中则代表一个普通的文件。

Struct ksetstruct kobject的容器,即Struct kset可以成为同一类struct kobject的父亲,而其自身也有kobject成员,因此其又可能和其他kobject成为上一级kset的子成员。

本文无意对sysfslinux设备驱动模型进行展开,以后再另写文章进行分析。


二、两种创建设备文件的方式

在设备驱动中cdev_addstruct file_operations和设备号注册到系统后,为了能够自动产生驱动对应的设备文件,需要调用class_createdevice_create,并通过uevent机制调用mdev(嵌入式linuxbusybox提供)来调用mknod创建设备文件。当然也可以不调用这两个接口,那就手工通过命令行mknod来创建设备文件。


三、设备类和设备相关数据结构

1include/linux/kobject.h

struct kobject {

const char *name;//名称

struct list_head entry;//kobject链表

struct kobject *parent;//即所属ksetkobject

struct kset *kset;//所属kset

struct kobj_type *ktype;//属性操作接口

};

struct kset {

struct list_head list;//管理同属于ksetkobject

struct kobject kobj;//可以成为上一级父kset的子目录

const struct kset_uevent_ops *uevent_ops;//uevent处理接口

};


假设Kobject A代表一个目录,kset B代表几个目录(包括A)的共同的父目录。则A.kset=B; A.parent=B.kobj.


2include/linux/device.h

struct class {//设备类

const char *name; //设备类名称

struct module *owner;//创建设备类的module

struct class_attribute *class_attrs;//设备类属性

struct device_attribute *dev_attrs;//设备属性

struct kobject *dev_kobj;//kobject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值