linux开发之设备树七、设备树下platform_device和platform_driver匹配

在这里插入图片描述
device和driver会通过名字(conpatible)进行匹配,匹配成功以后,会执行driver中的probe函数,在这个probe函数中就可以实现去device中取出硬件信息的方法了。
设备树替换掉了device部分,也就是设备树也会被转换为platform_device,然后就会通过名字匹配driver,匹配成功后就是调用driver中的probe函数了,然后就是获取硬件信息

那么在设备属下platform_device和platform_driver如何进行匹配的,driver又是如何从设备树取到硬件信息的?

1、如何确定自己手上的rk3568开发板用的哪个设备树文件?
运行编译内核的脚本进行编译内核,然后在这个过程中使用ctrl+c打断编译,就可以看到使用了哪一个设备树文件
在这里插入图片描述

2、编写dts

首先查看需要用到的寄存器地址,这里查看的是之前设备平台总线中device.c部分的代码
在这里插入图片描述

在这里插入图片描述
这部分就需要用到reg属性,寄存器地址和长度,这样就对寄存器描述好了
编写时一定要写在根节点里面:/
在这里插入图片描述

在这里插入图片描述
既然用到了reg属性,就必须使用addrss-cell和size-cell属性了,都为1,代表一个寄存器地址,一个长度,对应下面的reg中一个寄存器地址一个长度
在这里插入图片描述
可以看到,在此dts中,包含了两个个dtsi,我们在这个dts中添加了一个根节点,但是在dtsi中是否还有根节点,实际这种在编译的时候多个根节点最后会合并为一个设备树。

在这里插入图片描述
前面这两个参数放在了根节点下,一旦编译时,就会影响根节点下全部的参数,所以这里再创建一个子节点,这样就不会影响根节点了

3、加入名字,重点,用于匹配

在这里插入图片描述
在platform匹配中,由于这里时设备树相关的,在子节点中没有名字,也就是没有conpatible,是无法匹配的,所以在子节点添加上
在这里插入图片描述这样的话,my_led这个节点才会被转换成platform_device,这样才能和platform_driver匹配成功,驱动才能拿到my_led节点中的reg资源

驱动使用

在这里插入图片描述这是没有使用设备树时的驱动程序,需要name和id_table进行匹配
在使用设备树以后,就需要使用of_device_id进行匹配了
在这里插入图片描述
在这里插入图片描述

如何设置driver和dts进行匹配

dts最终会被转化为device,根据conpatible和driver进行匹配,所以在driver中也要设置conpatible与其一致
在这里插入图片描述在这里插入图片描述这样匹配成功以后就回去执行驱动中的probe函数了

编译内核的同时会编译设备树

在这里插入图片描述
并且会把编译好的设备树文件打包到内核镜像里面,这样直接更新开发板的内核镜像就可以了

然后将编译好的驱动ko文件也拷贝到开发板
在这里插入图片描述

查看内核中是否有了设备树中定义的节点

在开发板上:

cd /proc/device-tree/
ls topeet/

topeet就是前面设备树文件dts中定义的节点topeet,myled是真正要使用要获取地址等硬件属性的节点
在这里插入图片描述
安装ko驱动
在这里插入图片描述
可以看到打印了一句,这一句就是在驱动程序的probe函数中定义的使用printk打印出来的
在这里插入图片描述这就说明驱动和设备树匹配成功了,这样就可以去设备树中拿到节点信息了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值