Linux设备驱动 (基于Linux26xx内核).ppt

Linux设备驱动 (基于Linux26xx内核).ppt

ID:57045512

大小:130.50 KB

页数:16页

时间:2020-07-28

Linux设备驱动 (基于Linux26xx内核).ppt_第1页
Linux设备驱动 (基于Linux26xx内核).ppt_第2页
Linux设备驱动 (基于Linux26xx内核).ppt_第3页
Linux设备驱动 (基于Linux26xx内核).ppt_第4页
Linux设备驱动 (基于Linux26xx内核).ppt_第5页
资源描述:

《Linux设备驱动 (基于Linux26xx内核).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux设备驱动(基于Linux2.6.xx内核)总线、设备和驱动程序总线是处理器与一个或多个设备之间的通道。在设备模型中,所有的设备都是通过总线相连的。设备将被挂在总线上。在注册此种总线类型的驱动程序后,它将用于管理挂在此类型总线上的设备。以Luxun9项目中所用到的设备及其驱动程序为例。总体框图如下所示:总线以Luxun9项目所用到的总线为例,它所使用的是虚拟平台总线,代码如下所示:structbus_typeplatform_bus_type={.name="platform",.match=platform_match,.

2、suspend=platform_suspend,.resume=platform_resume,};只有非常少的bus_type成员变量需要初始化,其他的大多数都由设备模型核心所控制。对于新的总线,我们要调用bus_register()函数进行注册。以Luxun9项目所用到的总线为例,代码如下所示:ret=bus_register(&platform_bus_type);if(ret){returnret//失败}如果调用成功,新的总线子系统将加入到系统中,可以在/sys/bus目录下看到它所对应的目录是/sys/bus/plat

3、form。然后,我们可以向这个总线添加设备。设备常用的注册和注销函数是:intdevice_register(structdevice*dev);voiddevice_unregister(structdevice*dev);实际上,一个实际的总线是一个设备,也必须被单独注册。当然,我们也可以注册虚拟总线。例如:在luxun9项目中所用到的Linux2.6.14内核中注册了这样的一个虚拟总线,代码如下所示:structdeviceplatform_bus={.bus_id="platform",};device_register(&

4、platform_bus);完成这个调用后,我们可以在/sys/devices目录中看到它(/sys/devices/platform),任何添加到该总线的设备都会在/sys/devices/platform/显示。设备结构的嵌入device结构包含了设备模型核心用来模拟系统的信息。然而,大多数子系统记录了它们所拥有的设备的所有信息,因此,单独的device结构表示的设备是很少见的。在多时情况下,都是将device结构嵌入到另外一个结构体中。通常,驱动程并不和device结构体直接打交道。例如:在luxun9项目中所用到的Linux

5、2.6.14内核中有这样一个结构体,代码如下所示:structplatform_device{constchar*name;u32id;structdevicedev;u32num_resources;structresource*resource;};用它定义了一个USB设备结构体,代码如下所示:staticstructplatform_devices1r72xxx_device={.name="s1r72v17",.id=-1,.dev={.platform_data=(void*)NULL,.dma_mask=&s1r72xx

6、x_dma_mask,.coherent_dma_mask=0xffffffff,},.num_resources=ARRAY_SIZE(s1r72xxx_resources),.resource=s1r72xxx_resources,};然后通过下面的代码注册设备,将设备挂在虚拟总线platform_bus上,总线类型为platform_bus_type。platform_add_devices(luxun_devices,ARRAY_SIZE(luxun_devices));luxun_devices是一个platform_de

7、vice类型的指针数组,定义如下所示:staticstructplatform_device*luxun_devices[]__initdata={&s1r72xxx_device,&keybd_device,&d13733fb_device};platform_add_devices()函数原型是:intplatform_add_devices(structplatform_device**devs,intnum){inti,ret=0;for(i=0;i

8、(devs[i]);if(ret){while(--i>=0)platform_device_unregister(devs[i]);break;}}returnret;}设备驱动程序以luxun9USBControllerDrive

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

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

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