(标签-EDGE|关键词-设备树)

原本设备树种,配置的为边沿触发(IRQ_TYPE_EDGE_BOTH),现在想改为电平触发(IRQ_TYPE_LEVEL_MASK),但是编译报错:

img

img

枚举定义如下:

img

【以下回答由 GPT 生成】

问题标题: 如何将设备树中的IRQ_TYPE_EDGE_BOTH配置改为IRQ_TYPE_LEVEL_MASK?

问题内容: 在Android设备树中,我想将某个配置从边沿触发(IRQ_TYPE_EDGE_BOTH)改为电平触发(IRQ_TYPE_LEVEL_MASK),但是在编译过程中遇到了错误。请问该如何解决?

首先,我们需要在设备树(DTS文件)中找到对应IRQ的配置节点,通常会在interrupts属性中设置IRQ类型。

  1. 找到设备树(DTS文件)中对应IRQ的配置节点,通常是在arch/arm/boot/dts目录中找到对应的DTS文件。

  2. 在该DTS文件中,找到对应的节点,通常是在interrupts属性中设置IRQ类型。

  3. 如果IRQ类型的枚举值在设备树中没有直接定义,可以使用IRQ_TYPE_NONE作为占位符。

示例代码如下: dts interrupts = <0 IRQ_TYPE_NONE 0x01>;

  1. IRQ_TYPE_EDGE_BOTH改为IRQ_TYPE_LEVEL_MASK

示例代码如下: dts interrupts = <0 IRQ_TYPE_LEVEL_MASK 0x01>;

  1. 保存修改后的DTS文件。

  2. 在编译过程中,重新编译设备树(DTS文件)并重新生成内核镜像。

示例代码如下: shell $ make dtbs

或者使用设备树编译器(dtc)手动编译设备树文件: shell $ dtc -I dts -O dtb -o output.dtb input.dts

  1. 将生成的内核镜像烧写到设备中,并验证IRQ类型配置是否生效。

如果以上步骤不能解决问题,可能有以下原因:

  • 设备树中没有定义对应的IRQ类型枚举值。
  • 设备驱动不支持修改IRQ类型或未正确处理IRQ类型的改变。

在这种情况下,需要深入了解设备树和设备驱动的细节,可能需要进一步分析和修改设备驱动的源代码来解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^