linuxplatform驱动程序框架解析

linuxplatform驱动程序框架解析

ID:32192813

大小:46.84 KB

页数:9页

时间:2019-02-01

linuxplatform驱动程序框架解析_第1页
linuxplatform驱动程序框架解析_第2页
linuxplatform驱动程序框架解析_第3页
linuxplatform驱动程序框架解析_第4页
linuxplatform驱动程序框架解析_第5页
资源描述:

《linuxplatform驱动程序框架解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.platform总线、设备与驱动在Linux2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为pl

2、atform总线,相应的设备称为platform_device,而驱动成为platform_driver。2.编写platform驱动程序步骤一、注册设备1.为设备编写platform_device设备结构structplatform_device{constchar*name;//设备名intid;//设备编号structdevicedev;u32num_resources;//设备使用资源的数目structresource*resource;//设备使用资源};structresource结构体:structresource{reso

3、urce_size_tstart;//资源起始地址resource_size_tend;//资源结束地址constchar*name;unsignedlongflags;//资源类型structresource*parent,*sibling,*child;};注:structresource结构中我们通常关心start、end和flags这3个字段,www.linuxidc.com分别标明资源的开始值、结束值和类型,flags可以为IORESOURCE_IO、IORESOURCE_MEM、IORESOURCE_IRQ、IORESOURC

4、E_DMA等。start、end的含义会随着flags而变更,如当flags为IORESOURCE_MEM时,start、end分别表示该platform_device占据的内存的开始地址和结束地址;当flags为IORESOURCE_IRQ时,start、end分别表示该platform_device使用的中断号的开始值和结束值,如果只使用了1个中断号,开始和结束值相同。对于同种类型的资源而言,可以有多份,譬如说某设备占据了2个内存区域,则可以定义2个IORESOURCE_MEM资源。注:设备名与idTheplatform_device

5、.dev.bus_idisthecanonicalnameforthedevices.It'sbuiltfromtwocomponents:*platform_device.name...whichisalsousedtofordrivermatching.*platform_device.id...thedeviceinstancenumber,orelse"-1"toindicatethere'sonlyone.Theseareconcatenated,soname/id"serial"/0indicatesbus_id"serial

6、.0",and"serial/3"indicatesbus_id"serial.3";bothwouldusetheplatform_drivernamed"serial".While"my_rtc"/-1wouldbebus_id"my_rtc"(noinstanceid)andusetheplatform_drivercalled"my_rtc".2.注册platform_device设备结构体intplatform_device_register(structplatform_device*pdev);//注册一个设备intplat

7、form_add_devices(structplatform_device**pdevs,intndev);//注册多个设备platform设备注册例子:linux2.6.26.8内核中NANDFLASH设备注册实例:nand控制器资源:linux2.6.26.8/arch/arm/plat-s3c24xx/devs.cstaticstructresources3c_nand_resource[]={[0]={.start=S3C2410_PA_NAND,.end=S3C2410_PA_NAND+S3C24XX_SZ_NAND-1,.f

8、lags=IORESOURCE_MEM,}};structplatform_devices3c_device_nand={.name="s3c2410-nand",.id=-1,.num_re

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

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

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