字符驱动开发之韦东山视频学习3——设备树文件LED模板驱动程序

1、三种驱动模板

第一种在修改的时候需要阅读整个文件,后面是吧硬件资源和驱动分离开来,对platform_device   plat_driver这两个结构体匹配,然后调用probe函数。

第二种在修改的时候需要重新编译加载驱动程序,第三种引入设备树直接加载到设备树里面。DTS   DTB(二进制文件)到内核生成platform_device

2、实际匹配过程

platform_driver里面有of_match_table函数这个结构体里面会对应compatible实现匹配

3、匹配成功如何获得资源,怎么联系起来

1、reg属性

reg 的本意是 register,用来表示寄存器地址。
但是在设备树里,它可以用来描述一段空间。反正对于 ARM 系统,寄存器和内存是统一编址的,即访问寄存器时用某块地址,访问内存时用某块地址,在访问方法上没有区别。
reg 属性的值,是一系列的“address size”,用多少个 32 位的数来表示 address 和 size,由其父节点的#address-cells、 #size-cells 决定
#address-cells // 在它的子节点的 reg 属性中, 使用多少个 u32 整数来描述地址(address)
#size-cells // 在它的子节点的 reg 属性中, 使用多少个 u32 整数来描述大小(size)
of_address.h // 地址相关的函数,
// 比如 of_get_address(获得 reg 属性中的 addr, size 值)


platform_device 相关的函数:platform_get_resource这个函数跟设备树没什么关系, 但是设备树中的节点被转换为 platform_device 后, 设备树中的 reg 属性、 interrupts 属性也会被转换为“resource”。这时,你可以使用这个函数取出这些资源
对于设备树节点中的 reg 属性,它属性 IORESOURCE_MEM 类型的资源;
对于设备树节点中的 interrupts 属性,它属性 IORESOURCE_IRQ 类型的资源。
 

platform_derive和某一个platform_device匹配,可以从 platform_device 中得到device_node,再用 of_property_read_u32
得到属性的值:

实际操作过程

#define GROUP_PIN(g,p) ((g<<16) | (p))
这个东西的意思第几组第几个节点,为什么可以这样写?

驱动程序修改:

现在我是两个led,对应每一个匹配的platform_device都会调用一次,那么我就会调用两次probe函数

probe函数里面我们需要做什么事情?

我们需要从platform里面找到对应的设备节点取出里面的pin属性

这里回顾一下之前的open write

fileoperation 里面调用open write这两个函数分别调用底层的init 和 crtl函数

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值