详细介绍内核interrupt-map并举例说明
时间: 2023-08-04 20:06:53 浏览: 84
`interrupt-map`是设备树中用来描述设备与中断控制器之间的中断映射关系的属性之一。它的值是一个中断映射列表,每个中断映射包含以下字段:
- `controller`:中断控制器的设备节点路径。
- `data`:表示设备和中断控制器之间的中断映射信息。它可以是一个中断号,也可以是一个中断号数组,表示设备可以使用多个中断号。
- `input-regs`:中断控制器中用来接收中断号的寄存器地址。
下面举一个例子,介绍如何在设备树中使用`interrupt-map`描述设备与中断控制器之间的中断映射关系。假设我们有一个设备节点`/soc/ethernet@10001000`,它使用GIC中断控制器,并使用中断号`68`和`69`:
```
/soc {
ethernet@10001000 {
compatible = "ethernet";
reg = <0x10001000 0x1000>;
interrupt-parent = <&gic>;
interrupts = <68 0x4>,
<69 0x4>;
interrupt-map = <&gic 0 68 0>,
<&gic 0 69 0>;
interrupt-map-mask = <0 0 0 0xff>;
};
};
```
在上面的设备节点中,`interrupt-parent`属性指向GIC中断控制器的设备节点路径,并且`interrupts`属性指定了设备使用的中断号。`interrupt-map`属性则用来描述设备和中断控制器之间的中断映射关系。在这个例子中,我们使用了两个中断映射,分别将中断号`68`和`69`映射到了GIC中断控制器的中断号`0`上。`interrupt-map-mask`属性用来指定中断映射的掩码,这里设置为`0xff`,表示只使用了中断控制器的第一个中断号。这个掩码可以用来指定中断映射中需要使用哪些中断号,如果设置为`0`,则表示不使用中断控制器的中断号,而是使用数据中指定的中断号。
总之,使用`interrupt-map`可以让设备树中的设备和中断控制器正确地建立中断映射关系,让内核能够正确地为设备分配中断,并正确地处理中断请求。