Linux-驱动-设备树实案例分析-中断

iTOP-RK3568 开发板 SDK 源码中的 ft5x06 设备树,分析中断配置案例
目的:自己能够在设备树中写一个中断,描述硬件信息


参考资料

Linux 设备树中的中断
设备驱动-10.中断子系统-3.中断设备树表述与解析
RK3568驱动指南|第七期-设备树-第57章 实例分析:中断

一、 中断相关属性

interrupts

interrupts 属性用于指定设备的中断相关信息。 它描述了中断控制器的类型、 中断号以及中断触发类型。
案例:

interrupts = <0 20 4>; // 通常格式:<中断控制器索引 中断号 触发类型>

当然,也可以是宏定义描述:

gpio0: gpio@fdd60000 {
....
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
....
};

参数解析:中断控制器类型-中断号-中断触发类型

  • 1、 中断控制器类型
    nterrupts 属性的第一个参数指定了中断控制器的类型。 常见的类型包括 GIC (Generic Interrupt Controller)、 IRQ (Basic Interrupt Handling) 等。 例如, 在给定的代码片段中, GIC_SPI 表示中断控制器的类型为 GIC SPI 中断。

中断控制器负责管理系统中的中断信号, 它可以是硬件中的专用中断控制器, 也可以是处
理器内部的中断控制器。

参考资料,中断控制器类型:中断控制器类型解析

  • 2、中断号

interrupts 属性的第二个参数指定了设备所使用的中断号。 中断号是一个唯一标识符, 用于区分不同的中断信号源。 系统使用中断号来识别中断源并进行相应的中断处理。

中断号可以是一个整数值, 也可以是一个宏定义或符号引用。 在给定的代码片段中, 33 表示该设备使用的中断号为 33

前面我们了解过相关知识,中断号相关。 RK3568-中断-触摸屏中断

这里我举个列子,RK3568 平台 触摸屏触摸原理图拐脚如下:
在这里插入图片描述

那么我们在指定目录中找到对于的中断号如下:
路径:

kernel/include/dt-bindings/pinctrl/rockchip.h

在这里插入图片描述
在这里插入图片描述

  • 3、中断触发类型
    interrupts 属性的第三个参数指定了中断的触发类型, 即中断信号的触发条件。 常见的触发类型包括边沿触发和电平触发。

边沿触发表示中断信号在从低电平到高电平或从高电平到低电平的变化时触发。 触发类型可以是上升沿触发、 下降沿触发或双边沿触发。 电平触发表示中断信号在保持特定电平状态时触发, 可以是高电平触发或低电平触发
前面我们了解过相关知识,中断类型。 RK3568-中断-触摸屏中断
在这里插入图片描述
对于 rk3568 平台而言,找到了 irq.h 文件中对于中断触发类型定义,文件路径如下:

include/dt-bindings/interrupt-controller/irq.h

在这里插入图片描述

interrupt-controller

标识该节点是一个中断控制器, 空属性,就是一个标志 说明它是一个中断控制器。

interrupt-controller; // 空属性,表示这是一个中断控制器

interrupt-parent

interrupt-parent 属性值是一个引用, 它指向中断控制器节点的路径或标签。 可以使用路径来引用中断控制器节点, 如/interrupt-controller-node, 或使用标签来引用中断控制器节点。

这个很好理解的,但是实际上我们需要理解,该怎么赋值。说白了属性大家都会写,那么值是哪一个呢? 怎么写呢?
我们还是以上面的一个 触摸屏板卡原理图来说明。
在这里插入图片描述

那我们就这样写

/dts-v1/;
#include "dt-bindings/pinctrl/rockchip.h"
#include "dt-bindings/interrupt-controller/irq.h"
/{
model = "This is my devicetree!";
ft5x06@38 {
compatible = "edt,edt-ft5206";
interrupt-parent = <&gpio0>;
interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;
};
};

interrupt-parent = <&gpio0>; 赋值的就是<&gpio0>, 看原理图呀,触摸屏的引脚编号就是 TP_INT_L_GRIO0_B5 ,所以 中断属性就写gpio0

反向看一下原厂BSP工程师写的源码里面gpio0 是不是一个中断。
路径:

kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi

在这里插入图片描述
说明没搞错,gpio0 里面的属性,interrupt-controller 属性,本身就是一个中断

#interrupt-cells

#interrupt-cells 指定interrupts属性需要多少个cell来描述一个中断

#interrupt-cells = <2>; // 例如:<中断号 触发类型>

个人理解就是一个提前约束, 一般值为2 或者 3

二、设备树-中断示例编写

参考RK3568 一个旧的底板原理图来编写一个设备树 ,这里我们从小贴一下底板原理图,方便参考
在这里插入图片描述

这个图得到最核心的知识点,也如上前面分析 触摸屏引脚编号:TP_INT_L_GPIO0_B5。
所以 得到如下结论:

interrupt-parent = <&gpio0>;
B5 对应的就是中断号,如上面讨论 知识点:
interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;

这里之前不太理解:明明是B5,为什么映射成RK_PB5 那是因为 RK_P 前缀是固定的。 

接下来最核心的就是设备树中 compatible 这个属性的值了,这也是重点知识点:设备和驱动自动映射的参数
源码位置:

kernel/drivers/input/touchscreen/edt-ft5x06.c  

在这里插入图片描述
源码里面提供了几个值,我们选择其中一个即可:

compatible = "edt,edt-ft5206";

综合上面分析,所以完整的设备树如下:

/dts-v1/;
#include "dt-bindings/pinctrl/rockchip.h"
#include "dt-bindings/interrupt-controller/irq.h"
/{
model = "This is my devicetree!";
ft5x06@38 {
compatible = "edt,edt-ft5206";
interrupt-parent = <&gpio0>;
interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;
};
}

总结

  • 这里写了一个中断的设备树 并 理解了相关语法、知识
  • 了解、理解 设备树中,中断相关属性interrupts、interrupt-controller、interrupt-parent、#interrupt-cells
  • 核心的东西 知道每个参数怎么配置比如:compatible、interrupt-parent 、interrupts、中断号,如何在系统里面去找。
Windows 系统修复工具主要用于解决 Windows 11/10 系统中的各种常见问题,具有操作简单、功能全面等特点: 文件资源管理器修复:可解决文件资源管理器卡死、崩溃、无响应等问题,能终止崩溃循环。还可修复右键菜单无响应或选项缺失问题,以及重建缩略图缓存,让图片、视频等文件的缩略图正常显示,此外,还能处理桌面缺少回收站图标、回收站损坏等问题。 互联网和连接修复:能够刷新 DNS 缓存,加速网页加载速度,减少访问延迟。可重置 TCP/IP 协议栈,增强网络连接稳定性,减少网络掉线情况,还能还原 Hosts 文件,清除恶意程序对网络设置的篡改,保障网络安全,解决电脑重装系统后网络无法连接、浏览器主页被篡改等问题。 系统修复:集成系统文件检查器(SFC),可自动扫描并修复受损的系统文件。能解决 Windows 激活状态异常的问题,还可重建 DLL 注册库,恢复应用程序兼容性,解决部分软件无法正常运行的问题,同时也能处理如 Windows 沙箱无法启动、Windows 将 JPG 或 JPEG 保存为 JFIF 等系统问题。 系统工具维护:提供启动管理器、服务管理器和进程管理器等工具,用户可控制和管理启动程序、系统服务和当前运行的进程,提高系统的启动和运行速度,防止不必要的程序和服务占用系统资源。还能查看系统规格,如处理器线程数、最大显示分辨率等。 故障排除:集成超过 20 个微软官方诊断工具,可对系统问题进行专业排查,还能生成硬件健康状态报告。能解决搜索和索引故障、邮件和日历应用程序崩溃、设置应用程序无法启动等问题,也可处理打印机、网络适配器、Windows 更新等相关故障。 其他修复功能:可以重置组策略设置、catroot2 文件夹、记事本等多种系统设置和组件,如重置 Windows 应用商店缓存、Windows 防火墙设置等。还能添加重建图标缓存支持,恢复粘滞便笺删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值