分层分离的总线驱动模型分析

1.分层:核心层和设备相关层分开。

 分离:把硬件相关的代码和驱动分离开来,要写dev.c drv.c两个文件。

 

2.总线busdevdrv两个链表。driverprobe成员,插入设备时,总线设备驱动调用device_add时:

(1).会将device结构体放入busdevice链表

(2).busdrv链表中取出每一个drv,用busmatch函数测试是否是否支持这个dev

(3)如果支持则调用这个drvprobe函数。

 

3.设备驱动程序中:

注册设备驱动,调用driver_register函数时:

(1).会将这个driver放入busdriver链表中

(2)从busdevice链表中取出每一个device,用busmatch函数测试是否支持这个driver

(3)若支持则调用这个驱动的probe函数。

 

4.分析代码可知:bus上的match函数是根据device上的bus_iddriver上的name是否一致来进行匹配的。device中的device_add函数和driver中的driver_register函数分别将各自的bus_idname进行匹配,如果一致则调用driverprobe函数。

 

5.LinuxBUS衍生出来的总线有:i2c_bus_typeplatform_bus_type等。它们的设备和驱动中都内嵌了devicedriver结构。物理总线上除了platform_bus_type是虚拟的,其他都是真实存在的。

 

6.总线的几大匹配规则:

(1).Platform_bus_type总线中,将platform_devicenamedrivername相匹配,如果一致则调用platform_driverprobe函数。

(2)I2c总线中,将i2c_devicenamedrivername相匹配,如果一致则调用i2c_driverprobe函数。

 

7.platform总线驱动模型来编写LED点亮程序:需要编写led_dev.cled_drv.c两个文件。在led_dev.c文件中要分配设置并且注册一个platform_device结构体,而在led_drv.c文件中要分配设置并且注册一个platform_driver结构体。具体的实现代码略。

 

8.参考阅读《Linux那些事》

1.不同的设备对应的总线设备驱动中的match函数的具体实现也不同。

2.在热插拔这个名词出现之前,设备要求先于驱动之前存在,即上电之前设备都有先插好。在热插拔出现之后,设备可以随时插入,插入后再加载相应的驱动

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值