资源描述:
《platorm 总线、设备与驱动.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、platform总线、设备与驱动 2013-09-0417:38:36分类: LINUXLinux2.6的设备驱动模型中,关心总线、设备和驱动3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反,在系统每次注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_device,而驱动称为platform_driver。platform_device结构体:点击(此处)折叠或打开1.structplatform_device
2、{2. const char * name;3. u32 id;4. structdevice dev;5. u32 num_resources;6. structresource * resource;7.};platform_driver结构体:点击(此处)折叠或打开1.structplatform_driver {2. int (*probe)(structplatform_device *);3. int (*remove)(structplatform
3、_device *);4. void (*shutdown)(structplatform_device *);5. int (*suspend)(structplatform_device *, pm_message_tstate);6. int (*suspend_late)(structplatform_device *, pm_message_tstate);7. int (*resume_early)(structplatform_device *);8. int (*resume)(structplatfo
4、rm_device *);9. structdevice_driverdriver;10.};系统中为platform总线定义了一个bus_type的实例platform_bus_type:点击(此处)折叠或打开1.structbus_typeplatform_bus_type = {2. .name = "platform",3. .dev_attrs = platform_dev_attrs,4. .match = platform_match,5. .uevent
5、= platform_uevent,6. .suspend = platform_suspend,7. .suspend_late = platform_suspend_late,8. .resume_early = platform_resume_early,9. .resume = platform_resume,10.};下面就以2.6.22.6内核和DM9000为例,介绍下platform总线、设备与驱动在代码中的实现,DM9000驱动部分,依照《嵌入式Linux应用开发完全手册》进行
6、配置,配置如下:archarmplat-s3c24xxcommon-smdk.c文件中添加,对应的是platform_device这个结构体:点击(此处)折叠或打开1. #include 2. 3. staticstructresources3c_dm9k_resource[] = {4. [0] = {5. .start = S3C2410_CS4, //ADDR2 = 0 ,发送地址时使用这个地址6. .end = S3C2410_CS4 +
7、 3,7. .flags = IORESOURCE_MEM,8. },9. [1] = {10. .start = S3C2410_CS4 + 4, //ADDR2 = 1 ,发送数据时使用这个地址11. .end = S3C2410_CS4 + 4 + 3,12. .flags = IORESOURCE_MEM,13. },14. [2] = {15. .start = IRQ_EINT7, //IRQ_DM90001
8、6. .end = IRQ_EINT7, //IRQ_DM900017. .flags