内核驱动中常见的miscdevice、platform_device

内核驱动中常见的miscdevice、platform_device

ID:40497151

大小:18.97 KB

页数:6页

时间:2019-08-03

内核驱动中常见的miscdevice、platform_device_第1页
内核驱动中常见的miscdevice、platform_device_第2页
内核驱动中常见的miscdevice、platform_device_第3页
内核驱动中常见的miscdevice、platform_device_第4页
内核驱动中常见的miscdevice、platform_device_第5页
资源描述:

《内核驱动中常见的miscdevice、platform_device》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、内核驱动中常见的miscdevice、platform_device、platform_driver分类: LINUX 驱动2012-01-0909:12 1852人阅读 评论(0) 收藏 举报structresourcesfilelinuxmodulelist 最近在看驱动模型,是越看越糊涂,以前接触比较多的都是一些字符驱动,对字符驱动的框架有一定的了解。后来因为想在驱动中实现设备文件的创建,又了解了一下,sysfs文件系统和udev设备文件系统,必然就涉及到了驱动模型。可是发现驱动模型和以前接触的字符驱动没什么联系。比如,以前写字符驱动,主要的内容就是实现file_operat

2、ions结构体里的函数,然后就是申请设备号,注册字符设备,根本就没有涉及到设备驱动模型。而驱动模型里,device_driver根本没有涉及到设备操作的函数、file_operations等,只有一些电源管理,热插拔相关的函数。platform_device里也主要是resource的管理,所以感觉两者根本就没关系,也很奇怪为什么要弄两套东西来实现,而且两者也对应不起来。后来看了一些内核中的驱动源码,发现很多都是用miscdevice、platform_device、platform_driver实现的,而且流程很相似:1、在系统初始化阶段注册platform_device,主要是

3、添加设备对应的resource进链表,以便系统对设备占用的资源统一管理;2、实现platform_driver并注册,在这部分,需要实现的主要有platform_driver结构体中的probe,还有remove、shutdown等一些关于热插拔、电源管理方面的函数。3、然后在模块初始化函数(xx_init)里注册platform_driver(platform_driver_register)其中设备资源的获取(platform_get_resource),如IO内存、IO端口、中断号,申请(request),物理地址到虚拟地址的映射(ioremap),misc_device的注

4、册(misc_register),时钟的获取(clk_get)及使能(clk_enable)都是在probe函数里实现的,probe函数是在platform_driver注册,或者新设备添加时,platform_device和platform_driver匹配(通过名字)成功后执行的,有别于以往接触的字符驱动里的注册流程。对于misc_device对于设备操作函数的实现和字符设备一样,都是填充file_operations结构体,然后在模块初始化函数里注册(misc_register)。对于platform驱动模型,似乎就是platform_device负责设备资源,platfor

5、m_driver负责电源管理以及资源的申请,中断的注册等设备初始化及启动有关的操作,然后就是设备操作方法(file_operations)的注册(misc_register或者cdev_add),cdev或者misc_device就负责file_operations。但是目前还有不少疑问:1、设备号的申请在哪里,它是怎么放到驱动模型里的device结构体中的?2、platform_driver结构体和其中的device_driver结构体中都有probe、remove、shutdown等,为什么要在外层放重复的东西,二者有什么关系和区别嘛?3、misc_register实现里最终和

6、platform_device_register一样都会调用device_add,这样在设备驱动模型里不是有两个device和device_driver对应,而实际的物理设备只有一个嘛?4、看起来好像驱动模型是对实际的设备及驱动的抽象,提取它们的信息包装成内核对象kobject,然后按照它们之间的关系对其进行分类、分层次管理(建立一棵树),借由这些对象,由系统管理设备资源的注册申请、释放以及实际驱动(file_operations)的注册时机(由此可以实现热插拔,即插即用)和电源管理(系统可以根据设备树来决定设备关闭的顺序,device->device_driver->shutdo

7、wn)。所以设备驱动模型中,device只是用来建立设备树,最终会根据结构体中的device_driver中的电源管理函数实现合理的电源开关顺序?而对于热插拔有关的功能,和device与device_driver的匹配过程有关,而与设备树层次关系无关?(以上是目前想到的不明白的地方,遗漏的地方想起会再添加。改天找老师好好问问,太复杂了!)===============================================最近研究Linux设备驱动程序遇到混乱

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。