linux驱动虚拟总线platform_driver和platform_driver(LED驱动)

VID & PID

每一个设备都有一个设备id和厂商id,设备管理器–>硬件属性–>详细信息–>属性–>硬件id,

驱动和设备分离

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

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

1、设备(platform_device)注册的过程中会调用platform总线的match函数去寻找目前已经挂接在platform总线上与设备(paltform_device)名字对应的驱动(platform_driver)。相反的驱动(platform_driver)注册的时候一样去寻找挂接在总线上名字对应的设备(platform_device)
2、匹配上后,会执行驱动(platform_driver)的probe函数
3、probe函数中会实现控制器的初始化和其他的一些准备工作,并且会有注册实际的设备(比如eeprom)

实现platform模型的过程就是总线对设备和驱动的匹配过程 。打个比方,就好比相亲,总线是红娘,设备是男方,驱动是女方:

a – 红娘(总线)负责男方(设备)和女方(驱动)的撮合;

b – 男方(女方)找到红娘,说我来登记一下,看有没有合适的姑娘(汉子)—— 设备或驱动的注册;

c – 红娘这时候就需要看看有没有八字(二者的name 字段)匹配的姑娘(汉子)——match 函数进行匹配,看name是否相同;

d – 如果八字不合,就告诉男方(女方)没有合适的对象,先等着,别急着乱做事 —— 设备和驱动会等待,直到匹配成功;

e – 终于遇到八字匹配的了,那就结婚呗!接完婚,男方就向女方交代,我有多少存款,我的房子在哪,钱放在哪等等( struct resource *resource),女方说好啊,于是去房子里拿钱,去给男方买菜啦,给自己买衣服、化妆品、首饰啊等等(int (*probe)(struct platform_device *) 匹配成功后驱动执行的第一个函数),当然如果男的跟小三跑了(设备卸载),女方也不会继续待下去的( int (*remove)(struct platform_device *))。

设备和驱动没有谁先谁后,谁先安装模块,谁就等待谁。

platform_device

定义在:include/linux/platform_device.h中
这是内核3.0.0中的定义

struct platform_device {
        const char      * name;//设备名称 重要
        int             id;	//设备号,相当于次设备号
        struct device   dev;	//所有设备通用的属性部分
        u32             num_resources;//设备使用到的resource的个数
        struct resource * resource;//设备使用到的资源数组的首地址

        const struct platform_device_id *id_entry;//设备ID表

        /* MFD cell pointer */
        struct mfd_cell *mfd_cell;

        /* arch specific additions */
        struct pdev_archdata    archdata; //自留地,用来提供扩展性的
};

设备模块先初始化后,注册设备端的设备
__init platdev_init:
platform_device_register(&platform_d

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值