网站大量收购独家精品文档,联系QQ:2885784924

Linux Platform驱动程序框架解析.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux Platform驱动程序框架解析

1.platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2 C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_device,而驱动成为platform_driver。2.编写platform驱动程序步骤一、注册设备1.为设备编写platform_device设备结构 struct platform_device { const char * name; //设备名 int id; //设备编号 struct device dev; u32 num_resources; //设备使用资源的数目 struct resource * resource; //设备使用资源};struct resource结构体:struct resource { resource_size_t start; //资源起始地址 resource_size_t end; //资源结束地址 const char *name; unsigned long flags; //资源类型 struct resource *parent, *sibling, *child;};注:struct resource结构中我们通常关心start、end和flags这3个字段,分别标明资源的开始值、结束值和类型,flags可以为IORESOURCE_IO、IORESOURCE_MEM、IORESOURCE_IRQ、IORESOURCE_DMA等。start、end的含义会随着flags而变更,如当flags为IORESOURCE_MEM时,start、end分别表示该platform_device占据的内存的开始地址和结束地址;当flags为IORESOURCE_IRQ时,start、end分别表示该platform_device使用的中断号的开始值和结束值,如果只使用了1个中断号,开始和结束值相同。对于同种类型的资源而言,可以有多份,譬如说某设备占据了2个内存区域,则可以定义2个IORESOURCE_MEM资源。注:设备名与idThe platform_device.dev.bus_id is the canonical name for the devices. Its built from two components: * platform_ ... which is also used to for driver matching. * platform_device.id ... the device instance number, or else -1 to indicate theres only one.These are concatenated, so name/id serial/0 indicates bus_id serial.0, and serial/3 indicates bus_id serial.3; both would use the platform_driver named serial. While my_rtc/-1 would be bus_id my_rtc (no instance id) and use the platform_driver called my_rtc. 2.注册platform_device设备结构体 int platform_device_register(struct platform_device *pdev); //注册一个设备 int platform_add_devices(struct platform_device **pdevs, int ndev); //注册多个设备platform设备注册例子:linux内核中NAND FLASH设备注册实例:nand控制器资源:linux/arch/arm/plat-s3c24xx/devs.cstatic struct resource s3c_nand_resource[] = { [0

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档