700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Linux】内核驱动篇九--设备模型

【Linux】内核驱动篇九--设备模型

时间:2018-09-05 12:55:29

相关推荐

【Linux】内核驱动篇九--设备模型

内核驱动篇九--设备模型

一、起源二、新方案2.1 sysfs: 一种用内存模拟的文件系统,系统启动时mount到/sys目录2.2 uevent三、代码中自动mknod

一、起源

linux内核开发前期,仅devfs,导致开发不方便以及一些功能难以支持:

热插拔不支持一些针对所有设备的统一操作(如电源管理)不能自动mknod用户查看不了设备信息设备信息硬编码,导致驱动代码通用性差,即没有分离设备和驱动

二、新方案

linux内核在3.0以后引入了设备树的机制与新的开发方法

uevent机制:sysfs + uevent + udevd(上层app)

2.1 sysfs: 一种用内存模拟的文件系统,系统启动时mount到/sys目录

sysfs用途:(类似于windows的设备管理器)

建立系统中总线、驱动、设备三者之间的桥梁向用户空间展示内核中各种设备的拓扑图提供给用户空间对设备获取信息和操作的接口,部分取代ioctl功能

四个基本结构

目录组织结构:

2.2 uevent

三、代码中自动mknod

struct class *class_create(struct module *owner, const char *name);/** 功能:在/sys/class生成一个目录,目录名由name指定* 参数:struct module *owner - THIS_MODULEconst char *name - 目录名* 返回值 成功:class指针 失败:NULL*//*辅助接口:可以定义一个struct class 的指针变量cls来接受返回值,然后通过IS_ERR(cls)判断是否失败;IS_ERR(cls);成功----------------->0IS_ERR(cls);失败----------------->非0PTR_ERR(cls);来获得失败的返回错误码;*/

void class_destroy(struct class *cls)/** 功能:删除class_create生成目录* 参数:struct class *cls - class指针* 返回值*/

struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)/** 功能:在/sys/class目录下class_create生成目录再生成一个子目录与该设备相对应,发uevent让应用程序udevd创建设备文件* 参数:struct class *class - class指针struct device *parent - 父对象,一般NULLdev_t devt - 设备号void *drvdata - 驱动私有数据,一般NULLconst char *fmt - 字符串的格式... - 不定参数* 返回值成功:device指针失败:NULL*/

void device_destroy(struct class *class, dev_t devt)/** 功能:删除device_create生成目录* 参数:struct class *class - class指针dev_t devt - 设备号* 返回值*/

到这里就结束啦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。