网站首页 > 精选文章 正文
Linux内核中可使用platform_get_irq()函数获取dts文件中设置的中断号。
函数原型:int platform_get_irq(struct platform_device *dev, unsigned int num)
定义文件:drivers\base\platform.c
一、调用流程
中断号获取函数platform_get_irq()调用流程如下:
platform_get_irq()->
of_irq_get()->
of_irq_parse_one() ## 解析dts中中断相关属性,填充结构体of_phandle_args中的args[]参数
irq_create_of_mapping()->
of_phandle_args_to_fwspec() ## 将of_phandle_args->args[]赋值给fwspec->param[],给translate使用
irq_create_fwspec_mapping()->
irq_domain_translate()-> ## 获取中断号和中断触发类型
translate()-> ## 对应某个版本的gic处理函数
rk3399使用的是GICv3,对应irq_domain->name。
文件:
drivers/irqchip/irq-gic-v3.c。
translate()函数实现如下:
static const struct irq_domain_ops gic_irq_domain_ops = {
.translate = gic_irq_domain_translate, ## .translate的实现函数
...
};
static int gic_irq_domain_translate(struct irq_domain *d,
struct irq_fwspec *fwspec,
unsigned long *hwirq,
unsigned int *type)
{
...
switch (fwspec->param[0]) {
case 0: /* SPI */
*hwirq = fwspec->param[1] + 32; ## 中断号
break;
case 1: /* PPI */
*hwirq = fwspec->param[1] + 16; ## 中断号
break;
case GIC_IRQ_TYPE_LPI: /* LPI */
*hwirq = fwspec->param[1]; ## 中断号
break;
default:
return -EINVAL;
}
*type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK; ## 中断触发类型
...
}
二、应用举例
以RockPI 4A单板Debian系统Linux 4.4内核中的获取HDMI中断号为例。
1、查找中断号
从手册“Rockchip RK3399 TRM V1.3 Part1.pdf”中,可以查到HDMI_IRQ中断号,即55。
2、dts配置
文件:
arch/arm64/boot/dts/rockchip/rk3399.dtsi
hdmi: hdmi@ff940000 {
compatible = "rockchip,rk3399-dw-hdmi";
...
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>;
...
}
hdmi使用的是GIC_SPI中断,按照gic_irq_domain_translate()函数中处理,需要将中断号55减去32,得到dts中的中断号23。
注:interrupts = <中断类型 中断号 中断触发类型 中断分区(对应哪个CPU cluster,PPI类型中断特有)>
3、驱动函数
文件:drivers\gpu\drm\rockchip\dw_hdmi-rockchip.c
static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
void *data)
{
...
irq = platform_get_irq(pdev, 0);
...
}
此时,irq返回值为55。
后续会介绍GIC和中断注册等实现函数。
猜你喜欢
- 2025-07-08 Linux常见的网络客户端工具ping/lftp/ftp/lftpget/wget应用示例
- 2025-07-08 Linux/Ubuntu下apt-get install 安装程序时提示无法获得锁
- 2025-07-08 linux下的定时或计时操作(gettimeofday等的用法秒\微秒\纳秒
- 2025-07-08 宋宝华:论Linux的页迁移(Page Migration)完整版
- 2025-07-08 Win10新功能OneGet:Linux风格的包管理框架
- 最近发表
-
- 首次支持画中画模式,微软Win11安卓子系统WSA 2303更新发布
- Red Hat红帽组织Linux开发者聚会,探讨支持HDR显示相关事项
- Linux开发板调屏方法,实战经验让您少走弯路
- 什么是 Linux 中的显示服务器?它有什么用途?
- Linux:显示和管理IP址设置(linux配置管理口ip)
- linux显示管理器有哪些?(linux显示管理器有哪些类型)
- 什么是Linux显示服务器?它的用途是什么?
- Linux常见的网络客户端工具ping/lftp/ftp/lftpget/wget应用示例
- Linux/Ubuntu下apt-get install 安装程序时提示无法获得锁
- Linux内核中断之获取中断号(linux中断原理)
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)