gpt4 book ai didi

c - 映射到内存中的本地 APIC 寄存器仅包含 1

转载 作者:太空狗 更新时间:2023-10-29 12:10:23 26 4
gpt4 key购买 nike

我正在尝试为 Linux 内核模块编写一些代码,该模块可以在 x86 上读取和写入本地 APIC。我正在使用下面的代码片段来读取中断命令寄存器:

printk(KERN_ERR "APIC %p %d", (int32_t *)(APIC_BASE + 0x300), 
*(volatile int32_t *)(APIC_BASE + 0x300));

这是永远不会改变的输出:

APIC ffffffffff5f5300 -1

由于我正在打印一个有符号的 32 位整数,-1 表示我读取的 32 位都是 1。这是出乎意料的,因为(据我所知)第 11 位(目标模式位)需要为 0 才能写入本地 APIC 以发送 IPI。

我做错了什么吗?我需要执行任何初始化步骤吗?

最佳答案

事实证明,我的计算机配备了较新的 x2APIC,而不是 xAPIC。 x2APIC 使用 MSR 发送 IPI,而不是 xAPIC 使用的内存映射寄存器。因此,我在 APIC_BASE 读取的内存并不代表本地 APIC 的状态。

我打算重写我的代码以使用 MSR,但我能够通过将我的 x2APIC 设置为使用 xAPIC 的接口(interface)(即改用内存映射寄存器)来测试我现有的代码。这可以通过设置 nox2apic 内核参数来完成。

关于c - 映射到内存中的本地 APIC 寄存器仅包含 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47262333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com