platform总线

platform总线

ID:38583675

大小:51.00 KB

页数:8页

时间:2019-06-15

platform总线_第1页
platform总线_第2页
platform总线_第3页
platform总线_第4页
platform总线_第5页
资源描述:

《platform总线》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一:前言Platform总线是kernel中最近加入的一种虚拟总线.在近版的2.6kernel中,很多驱动都用platform改写了.只有在分析完platform总线之后,才能继续深入下去分析.在分析完sysfs和设备驱动模型之后,这部份应该很简单了.闲言少叙.步入正题.GO.GO!以下的源代码分析是基于2.6.25的.二:platform概貌在分析源代码之前,先在内核代码中找一个platform架构的驱动程序.下面以i8042芯片的驱动为例进行分析.在linux-2.6.25/drivers/input/serio/i8042.c的i

2、ntel8042的初始化入口中,有以下代码分段:staticint__initi8042_init(void){    ……err=platform_driver_register(&i8042_driver); if(err)      gotoerr_platform_exit;  i8042_platform_device=platform_device_alloc("i8042",-1);    if(!i8042_platform_device){        err=-ENOMEM;        gotoerr_unre

3、gister_driver;    }     err=platform_device_add(i8042_platform_device);    if(err)        gotoerr_free_device;    ……}我们在上面的程序片段中看到,驱动程序先注册了一个platformdevice.然后又添加了一个platformdevice.这里就涉及到了platform的两个最主要的操作,一个设备驱动注册,一个设备注册.要了解platform总线的来龙去脉.得从它的初始化开始. 三:platform初始化Platform

4、总线的初始化是在linux-2.6.25/drivers/base/platform.c中的platform_bus_init()完成的,代码如下:int__initplatform_bus_init(void){    interror;     error=device_register(&platform_bus);    if(error)        returnerror;    error= bus_register(&platform_bus_type);    if(error)        device_unre

5、gister(&platform_bus);    returnerror;}上面代码中调用的子函数在<>中已经分析过了.这段初始化代码创建了一个名为“platform”的设备.后续platform的设备都会以此为parent.在sysfs中表示为:所有platform类型的设备都会添加在platform_bus所代码的目录下.即/sys/devices/platform下面.接着,这段初始化代码又创建了一个名为“platform”的总线.platform_bus_type的定义如下:structbus_typ

6、eplatform_bus_type={    .name        ="platform",    .dev_attrs   =platform_dev_attrs,    .match       =platform_match,    .uevent      =platform_uevent,    .suspend=platform_suspend,    .suspend_late=platform_suspend_late,    .resume_early=platform_resume_early,    .res

7、ume      =platform_resume,};我们知道,在bus_type中包含了诸如设备与驱动匹配.hotplug事件等很多重要的操作.这些操作在分析platform设备注册与platform驱动注册的时候依次分析. 四:platformdevice注册在intel8042的驱动代码中,我们看到注册一个platformdevice分为了两部分,一部份是创建一个platformdevice结构,另一部份是将其注册到总线中.先来看第一个接口.structplatform_device*platform_device_alloc(

8、constchar*name,intid){    structplatform_object*pa;     pa=kzalloc(sizeof(structplatform_object)+strlen

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

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

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