This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 66AK2E05:Linux 内核不激活 GIC 中断

Guru**** 2540720 points
Other Parts Discussed in Thread: 66AK2E05

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/833152/66ak2e05-linux-core-inactivates-gic-interrupts

器件型号:66AK2E05

大家好、社区

我在66AK2E05 EVM 上工作、在 Arm Cores1&2&3上配置带有 SMP Linux 的系统、在 Arm core3上配置 RTOS。 我使用"ti-sdk-linut-rt-k2e-evm-06.00.00.07"内核。 在 RTOS 中、我创建了一个与"CSL_ARM_GIC_TIMER_8_INTL"相关的周期性 Hwi。 如果 RTOS 独立运行、Hwi 函数工作正常。 但是、如果 Linux&RTOS 一起运行、Hwi 会停止。

嵌入式 Linux 的即时消息。 我搜索了内核配置文件和 menuconfig、但未找到有关 GIC 的任何信息。 如何查找并配置哪些 GIC 中断已激活或未激活?

谢谢、

此致。

SRT

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以检查 DTS 文件、特别是 arch/arm/boot/dts/keyston.dtsi。 搜索 GIC 并查看在 Linux 系统中映射了哪些中断。 有关 GIC DTS 节点的其他信息、请参阅 Documentation/devicetree/bindings/sinterrupt-controller/arm、gic.txt

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!

    感谢您的回答。

    我已检查 DTS 文件。 此处定义的 GIC。 在该文件中、有一些在计时器、uart0等中定义的中断的定义  

    计时器{
    兼容="arm、armv7-timer";
    中断=<0x1 0xd 0xf08 0x1 0xe 0xf08>;
    };

    中断控制器@02560000{
    兼容="arm、cortex-a15-GIC";
    #interrupt-cells =<0x3>;
    大小单元格=<0x0>;
    #address-cells =<0x1>;
    中断控制器;
    REG =<0x2561000 0x1000 0x2562000 0x2000>
    linux、phandle =<0x1>;
    相位=<0x1>;
    };

    Linux&RTOS 之间没有冲突的中断定义。 实际上、RTOS 使用"CSL_ARM_GIC_TIMER_8_INTL"和"CSL_ARM_GIC_GPIO_INT0"中断、而 Linux 不使用这些中断。 但是、在某种程度上 、这些中断在 Linux 中被禁用。

    我尝试在 Linux DTS 文件中定义 RTOS 中断、但没有改变。  当 Linux 未引导时、RTOS 可以使用"CSL_ARM_GIC_TIMER_8_INTL"和"CSL_ARM_GIC_GPIO_INT0"中断。 但无法与 Linux 配合使用。

    如何配置/编辑内核以使 RTOS 可以使用这些中断?  

    谢谢、

    此致、

    SRT

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    好的、我认为这可能是您尝试在 ARM 内核上同时使用 Linux 和 RTOS 的原因。 您能否尝试将 Linux 限制为仅查看内核0、1和2、当您将 arch/arm/configs/tisdk_k2e-evm_defconfig 中的 CONFIG_NR_CPU=8限制为 CONFIG_NR_CPU=3时、就会发生这种情况。

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!

    感谢您的回答。

    我已在 tisdk_k2e-evm_defconfig 文件中配置 CONFIG_NR_CPU=3。 实际上、我在 ARM 内核上同时使用 Linux 和 RTOS。 Linux 使用 内核0、1和2、RTOS 使用内核3。  Linux 和 RTOS 均成功运行。 例如、Linux 网络操作正常工作。 同时、RTOS 任务按 预期工作并进行上下文切换。

    RTOS 使用 GIC 来控制一些特定中断、例如"CSL_ARM_GIC_TIMER_8_INTL"。 当 Linux 内核未运行时、RTOS 会配置 GIC 并使用"CSL_ARM_GIC_TIMER_8_INTL"。 问题是、当 Linux 启动时、"CSL_ARM_GIC_TIMER_8_INTL"不再工作。

    我想 Linux 会配置 GIC 并禁用 GIC 中断。  我尝试在 Linux DTS 文件中定义"CSL_ARM_GIC_TIMER_8_INTL"中断、但没有改变。 如何在 GIC 上配置 Linux 仅用于更改自己的中断。

    此致、

    谢谢你。

    SRT

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用]我猜 Linux 会配置 GIC 并禁用 GIC 中断。  我尝试在 Linux DTS 文件中定义"CSL_ARM_GIC_TIMER_8_INTL"中断、但没有改变。 如何在 GIC 上配置 Linux 仅用于更改自己的中断。

    我认为你是对的。 似乎 Linux 被设置为不是为每个 CPU 配置 GIC IRQ、而是作为一个通用 IRQ 控制器。 每个处理器的 GIC IRQ 分离可能比最初想象的困难、您必须修改 GIC:keyston.dtsi 中的中断控制器、我认为您可能需要添加 CPU 偏移值来区分每个 ARM 内核、请参阅 Documentation/devicetree/bindings/interrupt-controller/arm、Gic.txt。  

    也许可以在一些社区讨论中搜索指针、例如请参阅:
     patchwork.kernel.org/.../

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!

    感谢您的回答。  

    我认为我不应该在 DTS 文件中定义 CPU@3。 由于 RTOS 使用 CPU@3、Linux 不应知道该内核。

    问题是 Linux 导致 RTOS 矢量表损坏。 我用这种方法解决了问题;我在 RTOS 主函数中添加了一些延迟(~60秒)、因此 RTOS 在 Linux 引导完成后运行。

    谢谢、

    此致。

    SRT