【linux】【设备树】中断描述

简介: 【linux】【设备树】中断描述

@设备树

这段设备树源代码(DTS)片段描述了一个具有中断控制器和PCI(外围组件互连)总线的片上系统(SoC)。

仅供学习,欢迎指正


一、SoC节点

soc {
    compatible = "simple-bus";
    #address-cells = <1>;
    #size-cells = <1>;

1.1 soc

  • 这是SoC的顶级节点,在本例中它代表一个简单的总线。

1.2 compatible = “simple-bus”;

  • 表示此节点与简单总线总线类型兼容。这有助于内核理解如何与总线交互。

1.3 #address-cells = <1>;

  • 指定地址单元格(用于定义地址)的宽度为1个单元格。这适用于此总线下的子节点。
    #单元格大小=<1>;:
    指定大小单元格(用于定义内存区域的大小)为1个单元格宽。

二、中断控制器节点

open-pic {
    clock-frequency = <0>;
    interrupt-controller;
    #address-cells = <0>;
    #interrupt-cells = <2>;
};

2.1 open-pic

表示一个名为open pic的中断控制器。此节点管理系统的中断。

2.2 clock-frequency = <0>

指定中断控制器的时钟频率。这里它被设置为0,这可能是一个占位符,也可能表示没有特定的频率。

2.3 interrupt-controller

将此节点标记为中断控制器。此属性有助于内核识别它负责管理中断。

2.4 #address-cells = <0>

指定中断控制器的地址单元为0。这表示中断控制器不使用地址单元进行配置。

2.5 #interrupt-cells = <2>

指定此中断控制器的中断单元宽度为2个单元。这定义了设备树中描述中断的格式。

三、PCI Node

pci {
    #interrupt-cells = <1>;
    #size-cells = <2>;
    #address-cells = <3>;
    interrupt-map-mask = <0xf800 0 0 7>;
    interrupt-map = <
        /* IDSEL 0x11 - PCI slot 1 */
        0x8800 0 0 1 &open-pic 2 1 /* INTA */
        0x8800 0 0 2 &open-pic 3 1 /* INTB */
        0x8800 0 0 3 &open-pic 4 1 /* INTC */
        0x8800 0 0 4 &open-pic 1 1 /* INTD */
        /* IDSEL 0x12 - PCI slot 2 */
        0x9000 0 0 1 &open-pic 3 1 /* INTA */
        0x9000 0 0 2 &open-pic 4 1 /* INTB */
        0x9000 0 0 3 &open-pic 1 1 /* INTC */
        0x9000 0 0 4 &open-pic 2 1 /* INTD */
    >;
};

3.1 pci

表示系统中的PCI总线。它是soc节点的子节点,管理PCI设备及其中断。

3.2 #interrupt-cells = <1>;

指定PCI总线的中断单元宽度为1个单元。这定义了如何描述此总线上设备的中断。

3.3 #size-cells = <2>

指定此总线上内存区域的大小单元为2个单元宽。

3.4 #address-cells = <3>

指定PCI总线的地址单元宽度为3个单元。

3.5 interrupt-map-mask = <0xf800 0 0 7>

定义用于将中断从PCI设备映射到中断控制器的掩码。此掩码有助于正确匹配和路由PCI中断。

3.6 interrupt-map = <…>

此属性提供PCI中断到中断控制器的映射。它描述了PCI中断应该如何路由:

3.6.1 格式

[PCI总线地址][设备][功能][引脚][控制器][中断号][触发类型]

  • PCI总线地址:指定PCI总线上的地址。
  • device:指定PCI设备。
  • function:指定PCI设备中的函数。
  • pin:指定中断引脚(例如INTA、INTB等)。
  • 控制器:引用中断控制器节点(在本例中为&open-pic)。
  • 中断号:指定中断行号。
  • 触发器类型:指定中断的类型(级别或边缘)。


3.6.2 示例:

  • 0x8800 0 1&open-pic 2 1:
  • PCI地址0x8800,设备0,功能0,中断引脚1(INTA),映射到打开的pic,中断编号2,触发类型1。
  • 0x9000 0 0 1&open-pic 3 1:
  • PCI地址0x9000,设备0,功能0,中断引脚1(INTA),映射到打开的pic,中断编号3,触发类型1。

四、总结

  • SoC节点:定义片上系统的基本属性。
  • 中断控制器(open pic):管理中断,没有自己的中断或中断父属性,使其成为中断树的根。
  • PCI节点:管理PCI设备,并提供中断映射,指定PCI中断如何路由到开放式pic中断控制器。

五、特别说明

#interrupt-cells,指定中断源的信息 cells 个数。

interrupt-controller,表示当前节点为中断控制器。

interrupts,指定中断号,触发方式等。

interrupt-parent,指定父中断,也就是中断控制器。

相关文章
|
7月前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
7月前
|
Linux
嵌入式linux系统设备树实例分析
嵌入式linux系统设备树实例分析
120 0
|
Linux
linux系统中进一步理解设备树
linux系统中进一步理解设备树
100 0
|
4月前
|
Linux SoC
Linux设备树(DTS)
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 设备树由来 linux内核源码中,之前充斥着大量的平台相关(platform Device)配置,而这些代码大多是杂乱且重复的,这使得ARM体系结构的代码维护者和内核维护者在发布一个新的版本的时候有大量的工作要做,以至于LinusTorvalds 在2011年3月17日的ARM Linux邮件列表中宣称“Gaah.Guys,this whole ARM thing is a f*cking pain in the ass”这使得整个ARM社区不得不
Linux设备树(DTS)
|
4月前
|
存储 Unix Linux
揭秘Linux硬件组成:从内核魔法到设备树桥梁,打造你的超级系统,让你的Linux之旅畅通无阻,震撼体验来袭!
【8月更文挑战第5天】Linux作为顶级开源操作系统,凭借其强大的功能和灵活的架构,在众多领域大放异彩。本文首先概述了Linux的四大核心组件:内核、Shell、文件系统及应用程序,并深入探讨了内核的功能模块,如存储、CPU及进程管理等。接着介绍了设备树(Device Tree),它是连接硬件与内核的桥梁,通过DTS/DTB文件描述硬件信息,实现了跨平台兼容。此外,还简要介绍了Linux如何通过本地总线高效管理硬件资源,并阐述了文件系统与磁盘管理机制。通过这些内容,读者可以全面了解Linux的硬件组成及其核心技术。
75 3
|
5月前
|
Linux SoC
Linux设备树(DTS)介绍
**设备树(DTS)是Linux中用于描述硬件信息的文本文件,旨在减少内核与平台相关代码的耦合。DTS文件包含静态硬件配置,不支持动态变更。它被编译成DTB二进制文件,供内核在启动时解析以了解硬件布局。设备树解决了ARM体系结构代码维护的复杂性问题,通过解耦实现vendor修改的独立和共二进制目标。设备树overlay允许对配置进行增量修改,遵循特定规则,如dts覆盖dtsi,先引用后修改。调试时,可使用内置工具反编译dtb或dtbo映像为dts文本以检查内容。**
245 7
|
4月前
|
Linux SoC
Linux设备树(DTS)
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 设备树由来 linux内核源码中,之前充斥着大量的平台相关(platform Device)配置,而这些代码大多是杂乱且重复的,这使得ARM体系结构的代码维护者和内核维护者在发布一个新的版本的时候有大量的工作要做,以至于LinusTorvalds 在2011年3月17日的ARM Linux邮件列表中宣称“Gaah.Guys,this whole ARM thing is a f*cking pain in the ass”这使得整个ARM社区不得不
|
4月前
|
运维 网络协议 Linux
[linux]常见内核TCP参数描述与配置
[linux]常见内核TCP参数描述与配置
|
6月前
|
前端开发 Linux 数据库
Linux中的apropos命令:查找命令的简短描述
`apropos`是Linux下用于搜索命令的工具,基于关键词查找相关命令的简短描述。它与`whatis`关联,后者依赖预生成的数据库。使用`apropos keyword`可查找关键词相关命令,例如`apropos copy`。该命令有助于忘记命令名称时的定位、了解命令功能及发现新命令。确保使用`mandb`更新数据库以获取最新信息。
|
7月前
|
Ubuntu Linux 芯片
Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)
Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)
286 1
Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)