2022年字符设备驱动,架构分析,字符设备驱动笔记参照 .pdf

上传人:C****o 文档编号:42695112 上传时间:2022-09-16 格式:PDF 页数:5 大小:172.79KB
返回 下载 相关 举报
2022年字符设备驱动,架构分析,字符设备驱动笔记参照 .pdf_第1页
第1页 / 共5页
2022年字符设备驱动,架构分析,字符设备驱动笔记参照 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年字符设备驱动,架构分析,字符设备驱动笔记参照 .pdf》由会员分享,可在线阅读,更多相关《2022年字符设备驱动,架构分析,字符设备驱动笔记参照 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、本文来源于:硅谷芯微技术论坛。转载请著名出处字符设备驱动架构分析好长时间没怎么看书了,最近把字符设备驱动部分又复习了一下,写个笔记.Char Device Driver 相关数据结构:struct cdev struct kobject kobj;struct module*owner;const struct file_operations*ops;struct list_head list;dev_t dev;unsigned int count;struct kobj_map struct probe struct probe*next;dev_t dev;unsigned long r

2、ange;struct module*owner;kobj_probe_t*get;int(*lock)(dev_t,void*);void*data;*probes255;struct mutex*lock;static struct char_device_struct struct char_device_struct*next;unsigned int major;unsigned int baseminor;int minorct;char name64;struct file_operations*fops;struct cdev*cdev;/*will die*/*chrdevs

3、CHRDEV_MAJOR_HASH_SIZE;#define CHRDEV_MAJOR_HASH_SIZE 255 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -本文来源于:硅谷芯微技术论坛。转载请著名出处下面本文通过一下三个方面以及他们的关联来描述字符设备驱动:1.字符驱动模型2.字符设备的设备号3.文件系统中对字符设备文件的访问1.字符驱动模型每个字符驱动由一个cdev 结构来表示.在设备驱动模型(device driver model)中,使用(kobject mapping domain)来记录字符设备驱动.这是由struct kobj_map 结构来表示的.

4、它内嵌了 255 个 struct probe 指针数组kobj_map 由全局变量cdev_map 引用:static struct kobj_map*cdev_map;.相关函数说明:cdev_alloc()用来创建一个cdev 的对象cdev_add()用来将 cdev 对象添加到驱动模型中,其主要是通过kobj_map()来实现的.名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -本文来源于:硅谷芯微技术论坛。转载请著名出处 kobj_map()会创建一个probe 对象,然后将其插入cdev_map 中的某一项中,并关联probe-data 指向cdev str

5、uct kobject*kobj_lookup(struct kobj_map*domain,dev_t dev,int*index)根据设备号,在 cdev_map 中查找其 cdev对象内嵌的kobject.(probe-data-kobj),返回的是 cdev 的 kobject 2.字符设备的设备号字符设备的主,次设备号的分配:全局数组chrdevs 包含了 255(CHRDEV_MAJOR_HASH_SIZE 的值)个 struct char_device_struct 的元素.每一个对应一个相应的主设备号.如果分配了一个设备号,就会创建一个struct char_device_st

6、ruct 的对象,并将其添加到chrdevs 中.这样,通过 chrdevs 数组,我们就可以知道分配了哪些设备号.相关函数:register_chrdev_region()分配指定的设备号范围alloc_chrdev_region()动态分配设备范围他们都主要是通过调用函数_register_chrdev_region()来实现的名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -本文来源于:硅谷芯微技术论坛。转载请著名出处要注意,这两个函数仅仅是注册设备号!如果要和 cdev关联起来,还要调用 cdev_add()register_chrdev()申请指定的设备号,并且

7、将其注册到字符设备驱动模型中.它所做的事情为:1.注册设备号,通过调用_register_chrdev_region()来实现2.分配一个 cdev,通过调用cdev_alloc()来实现3.将 cdev添加到驱动模型中,这一步将设备号和驱动关联了起来.通过调用cdev_add()来实现4.将 第 一 步 中 创 建 的struct char_device_struct 对 象 的cdev 指 向 第 二 步 中 分 配 的cdev.由 于register_chrdev()是老的接口,这一步在新的接口中并不需要.3.文件系统中对字符设备文件的访问对于一个字符设备文件,其 inode-i_cde

8、v 指向字符驱动对象cdev,如果 i_cdev 为 NULL,则说明该设备文件没有被打开.由于多个设备可以共用同一个驱动程序.所以,通过字符设备的inode 中的 i_devices 和 cdev中的 list 组成一个链表首先,系统调用 open 打开一个字符设备的时候,通过一系列调用,最终会执行到chrdev_open.(最终是通过调用到def_chr_fops 中的.open,而 def_chr_fops.open=chrdev_open.这一系列的调用过程,本文暂不讨论)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -本文来源于:硅谷芯微技术论坛。转载请著名出

9、处int chrdev_open(struct inode*inode,struct file*filp)chrdev_open()所做的事情可以概括如下:1.根据设备号(inode-i_rdev),在字符设备驱动模型中查找对应的驱动程序,这通过kobj_lookup()来实现,kobj_lookup()会返回对应驱动程序cdev 的 kobject.2.设置 inode-i_cdev,指向找到的cdev.3.将 inode 添加到 cdev-list 的链表中.4.使用 cdev 的 ops 设置 file 对象的 f_op 5.如果 ops中定义了 open 方法,则调用该 open 方法6.返回.执行完 chrdev_open()之后,file 对象的 f_op 指向 cdev的 ops,因而之后对设备进行的read,write 等操作,就会执行 cdev 的相应操作.转载请著名出处:http:/www.threeway.cc/BBS/showtopic-234.aspx 硅谷芯微技术中心:www.threeway.cc 芯片级 IT 教育第一品牌开设课程:单片机、嵌入式、ARM、Linux、Android、iphone、PCB 设计官方网址:www.threeway.cc 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁