当前位置: 首页 > news >正文

安徽省建设工程质量协会网站/靠谱的广告联盟

安徽省建设工程质量协会网站,靠谱的广告联盟,整形医院网站建设,建设好一个网站需要点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 4.2.1 通过DTS传递物理中断号给Linux 参考《GICv3_Software_Overview_Official_Release_B》,下表描述了GIC V3支持的INTID(硬件中断号)的范围。 SGI (Software Generated Interrupt):软…

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客 

4.2.1 通过DTS传递物理中断号给Linux

参考《GICv3_Software_Overview_Official_Release_B》,下表描述了GIC V3支持的INTID(硬件中断号)的范围。

SGI (Software Generated Interrupt):软件触发的中断。Linux内核可以通过写GICD_SGIR寄存器来触发一个中断事件,用于CPU core之间的通信。

PPI (Private Peripheral Interrupt):私有外设中断。这是每个核心私有的中断。PPI会送达到指定的CPU上,应用场景有CPU本地时钟。

SPI (Shared Peripheral Interrupt):软件触发的中断。软件可以通过写GICD_SGIR寄存器来触发一个中断事件,一般用于核间通信。

LPI (Locality-specific Peripheral Interrupt):LPI是GICv3中的新特性,是基于消息的中断。当前GIC V3驱动irq-gic-v3.c的参数gicv3_nolpi默认为0,所以默认是默认支持LPI的。

SOC芯片在设计的时候,不同设备会分配到自己固定的硬件中断号,一般在手册里都会说明。这些硬件中断号如何告知内核呢?通过open firmware device tree,经常简称device tree。设备树通常以 .dts(Device Tree Source)文件的形式编写,这是一种人类可读的文本格式。.dts 文件会被编译成二进制的 .dtb(Device Tree Blob)文件,供内核在启动时使用。

以dts中的timer设备为例,说明一下硬件中断号是如何传入Linux中的。

/dts-v1/;/ {......timer {compatible = "arm,armv8-timer";interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>,<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>,<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>,<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;};......
};

interrupts 属性定义了定时器产生的中断。每个中断由三个字段组成:

  • 第一个字段是中断类型,0代表GIC_SPI,1代表GIC_PPI

 

  • 第二个字段是中断号。这个中断号并不是GIC中的硬件中断号,而是PPI或SPI各自范围的逻辑编号。对于PPI来说,范围是0~15;对于SPI来说,范围是0~987。例子中有四个PPI中断号:中断号13 (0x0d)、中断号14 (0x0e)、中断号11 (0x0b)、中断号10 (0x0a)。
  • 第三个字段是中断的属性,包括2个字节。低字节是中断的触发类型,在这个例子中,中断是高电平触发。高字节表示中断的目标 CPU 掩码,例如GIC_CPU_MASK_SIMPLE(8)可以表示所有 8 个 CPU 都可以接收这个中断。

 dts里面的中断号,是如何传递到Linux中呢?Linux根据dts中的timer节点来创建设备时,需要计算出真实的hwirq。以GIC IRQ V3来说,使用gic_irq_domain_translate函数,根据中断类型进行转换。对于PPI,要加上16;对于SPI,要加上32.

最后一个问题,对于timer设备来说,四个中断最终使用哪个中断?根据compatible = "arm,armv8-timer",确认匹配的驱动程序为drivers/clocksource/arm_arch_timer.c。四个中断的定义在include/clocksource/arm_arch_timer.h。 

drivers/clocksource/arm_arch_timer.c
TIMER_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", arch_timer_of_init);include/clocksource/arm_arch_timer.h
enum arch_timer_ppi_nr {ARCH_TIMER_PHYS_SECURE_PPI,   // 对应timer中的PPI 13ARCH_TIMER_PHYS_NONSECURE_PPI, //对应timer中的PPI 14ARCH_TIMER_VIRT_PPI,          //对应timer中的PPI 11ARCH_TIMER_HYP_PPI,           //对应timer中的PPI 10ARCH_TIMER_MAX_TIMER_PPI      // 用于边界检查
};

以我用的QEMU virt为例,arch_timer_of_init调用arch_timer_select_ppi()选择了ARCH_TIMER_VIRT_PPI,对应timer中的PPI 11。根据上面的分析,针对PPI中断,Linux会加上偏移量16,最终得到hwirq 27!

通过cat /proc/interrupts来验证一下,arch_timer的硬件中断号hwirq确实是27!

注意看图上的第一列,显示的是Linux中断号。arch_timer的硬件中断号hwirq 27对应Linux的中断号为3,二者是怎么映射的,下一章继续分析。

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

http://www.jmfq.cn/news/5346919.html

相关文章:

  • 站长网站建设/廊坊seo排名收费
  • 南阳建设工程信息网站/长沙快速排名优化
  • 如何加强政府网站建设和管理办法/百度地图推广怎么收费标准
  • 最靠谱的网站建设公司/沈阳seo博客
  • 桥梁建设设计网站/2345网址导航官网下载安装
  • 山东岩海建设资源有限公司网站/电商网站策划
  • 大航母网站建设在哪里/seo测试
  • 运动鞋的网站建设规划书/百度投诉平台在哪里投诉
  • 萧山网站建设靠谱seo/宣传广告
  • 天津商城网站建设/现在阳性最新情况
  • 网站建设与网页制作/搜索引擎优化排名培训
  • 政府形象建设 网站更新/seo搜索引擎优化简历
  • 天猫网站建设的理由/跨境电商seo什么意思
  • 大朗东莞网站建设/朝阳网站seo
  • 2017年网站建设市场分析/成都百度推广
  • 手机建设网站赚钱/宽带推广方案
  • 江西省建设工程安全质量监督管理局网站/谷歌app下载 安卓
  • 天津建设工程计价网站/百度输入法下载
  • 党建网站建设课题/世界足球排名前十名
  • 政府网站建设计划/亚马逊免费的关键词工具
  • 手机网站建设哪家有/宁德市委书记
  • 濉溪建设投资网站/移动端关键词优化
  • 门户网站建设注意问题/app关键词推广
  • 类似建E网模型网站建设/成人教育培训机构
  • 顺的网站建设效果/沧州seo包年优化软件排名
  • 浙江省建设厅继续教育官方网站/百度竞价优化
  • 中国建设银行网站如何注册/网站建设网络推广平台
  • 汽车网站正在建设中模板/百度竞价推广价格
  • 安顺 网站建设/精准网络推广
  • 云畅网站建设网址/seo专员工资一般多少