platform设备的添加流程.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
platform设备的添加流程 今天我以fb设备的注册过程来分析platform设备的添加流程 platform总线是kernel中最近加入的一种虚拟总线,它被用来连接处在仅有最少基本组件的总线上的那些设备.这样的总线包括许多片上系统上的那些用来整合外设的总线, 也包括一些古董 PC上的连接器; 但不包括像PCI或USB这样的有庞大正规说明的总线. 平台设备 ~~~~~~ 平台设备通常指的是系统中的自治体, 包括老式的基于端口的设备和连接外设总线的北桥(host bridges),以及集成在片上系统中的绝大多数控制器. 它们通常拥有的一个共同特征是直接编址于CPU总线上. 即使在某些罕见的情况下, 平台设备会通过某段其他类型的总线连入系统, 它们的寄存器也会被直接编址.平台设备会分到一个名称(用在驱动绑定中)以及一系列诸如地址和中断请求号(IRQ)之类的资源. 那什么情况可以使用platform driver机制编写驱动呢? 我的理解是只要和内核本身运行依赖性不大的外围设备(换句话说只要不在内核运行所需的一个最小系统之内的设备),相对独立的,拥有各自独自的资源(addresses and IRQs),都可以用platform_driver实现。如:lcd,usb,uart等,都可以用platfrom_driver写,而timer,irq等最小系统之内的设备则最好不用platfrom_driver机制,实际上内核实现也是这样的。下面继续我们的分析过程。 1 首先要定义一个platform_device, 我们先来看一下platform_device结构的定义,如下所示: // include/linux/platform_device.h: 16struct platform_device { 17? ?? ???const char? ?? ?* name; 18? ?? ???u32? ?? ?? ?? ? id; 19? ?? ???struct device? ?dev; 20? ?? ???u32? ?? ?? ?? ? num_resources; 21? ?? ???struct resource * resource; 22}; 下面是对应的FB设备的变量定义 // arch/arm/mach-pxa/generic.c 229static struct platform_device pxafb_device = { 230? ?? ???.name? ?? ?? ???= pxa2xx-fb, 231? ?? ???.id? ?? ?? ?? ? = -1, 232? ?? ???.dev? ?? ?? ?? ?= { 233? ?? ?? ?? ?? ? .platform_data??= pxa_fb_info, 234? ?? ?? ?? ?? ? .dma_mask? ?? ? = fb_dma_mask, 235? ?? ?? ?? ?? ? .coherent_dma_mask = 0xffffffff, 236? ?? ???}, 237? ?? ???.num_resources??= ARRAY_SIZE(pxafb_resources), 238? ?? ???.resource? ?? ? = pxafb_resources, 239}; 由上可以看出,name成员表示设备名,系统正是通过这个名字来与驱动绑定的,所以驱动里面相应的设备名必须与该项相符合;id表示设备编号,id的值为-1表示只有一个这样的设备。 该结构中比较重要的一个成员就是resource, Linux设计了这个通用的数据结构来描述各种I/O资源(如:I/O端口、外设内存、DMA和IRQ等)。它的定义如下: // include/linux/ioport.h: 16struct resource { 17? ?? ???const char *name; 18? ?? ???unsigned long start, end; 19? ?? ???unsigned long flags; 20? ?? ???struct resource *parent, *sibling, *child; 21}; 下面关于这方面的内容,参考了/zengzhaonong/blog/item/654c63d92307f0eb39012fff.html struct resource 是linux对挂接在4G总线空间上的设备实体的管理方式。 一个独立的挂接在cpu总线上的设备单元,一般都需要一段线性的地址空间来描述设备自身,linux是怎么管理所有的这些外部物理地址范围段,进而给用户和linux自身一个比较好的观察4G总线上挂接的一个个设备

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档