Linux内核中断之获取中断号

Linux内核中断之获取中断号,第1张

Linux内核中可使用 platform_get_irq() 函数获取 dts 文件中设置的中断号。

函数原型: int platform_get_irq(struct platform_device *dev, unsigned int num)

定义文件: drivers\base\platform.c

中断号获取函数 platform_get_irq() 调用流程如下:

rk3399 使用的是 GICv3 ,对应 irq_domain->name 。

文件: drivers/irqchip/irq-gic-v3.c 。

translate() 函数实现如下:

以 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 使用的是 GIC_SPI 中断,按照 gic_irq_domain_translate() 函数中处理,需要将中断号55减去32,得到 dts 中的中断号23。

注: interrupts = <中断类型 中断号 中断触发类型 中断分区(对应哪个CPU cluster,PPI类型中断特有)>

3、驱动函数

文件: drivers\gpu\drm\rockchip\dw_hdmi-rockchip.c

此时, irq 返回值为55。

后续会介绍 GIC 和中断注册等实现函数。

硬件驱动确定中断号:打开设备管理器,找到你要设置的硬件,右键——属性——资源,把“使用自动设置”前面的勾选点掉,在“设置基于”里选择你的设置选项,点“更改设置”,确定。

Linux中,分内核态和用户态,写的所有的驱动,都是出于内核态->可以直接使用内核相关资源; 应用层,都是用户态->无法直接 *** 作底层的东西 ->想要 *** 作。

作用:

驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。

如果一个硬件设备没有驱动程序,只有 *** 作系统是不能发挥特有功能的,也就是说驱动程序是介于 *** 作系统与硬件之间的媒介,实现双向的传达,即将硬件设备本身具有的功能传达给 *** 作系统,同时也将 *** 作系统的标准指令传达给硬件设备,从而实现两者的无缝连接。

随着电子技术的飞速发展,电脑硬件的性能越来越强大。驱动程序是直接工作在各种硬件设备上的软件,其“驱动”这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/5902066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存