Linux内核中的platform机制

一、platform设备模型

        从Linux 2.6起引入了一套新的驱动管理和注册机制:platform_deviceplatform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。

        Linux platform. driver机制传统的device driver 机制(通过driver_register函数进行注册)相比,一个十分明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform. device提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性(这些标准接口是安全的)。

       platform机制的本身使用并不复杂,由两部分组成:platform_device和platfrom_driver。通过platform机制开发底层设备驱动的大致流程如图所示。 


Linux内核中的platform机制 - 喧闹的寂寞 - 喧闹的寂寞

二、platform的初始化        

        首先系统启动的时候会调用platform_bus_init来初始化这个虚拟总线,然后虚拟总线注册设备(即将挂载这条总线上的设备)。Platform_bus_type部分是内核为为我们实现好的,我们只关系platform_device与platform_driver就行了。

drivers/base/platform.c, line 964    

964 struct bus_type platform_bus_type = { 965         .name           = \"platform\", 966         .dev_attrs      = platform_dev_attrs, 967         .match          = platform_match, 968         .uevent         = platform_uevent, 969         .pm             = PLATFORM_PM_OPS_PTR, 970 };

971 EXPORT_SYMBOL_GPL(platform_bus_type); 972 973 int __init platform_bus_init(void) 974 { 975         int error; 976 977         early_platform_cleanup(); 978 979         error = device_register(&platform_bus); 980         if (error) 981                 return error; 982         error =  bus_register(&platform_bus_type); 983         if (error) 984                 device_unregister(&platform_bus); 985         return error; 986 }

 
三、重要的结构体

platform机制中三个最重要的结构体:

platform_device

resource

platform_driver

platform_device结构体用来描述设备的名称、资源信息等。该结构被定义在include/linux/platform_device.h中,定义原型如下:

17 struct platform_device {  18         const char      * name; //设备名  19         int             id; //设备编号,配合设备名使用  20         struct device   dev;  21         u32             num_resources;  22         struct resource * resource; //设备资源  23  24         struct platform_device_id       *id_entry;  25 };

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值