【问题标题】:How should I read or write APIC register "APIC_ICR"?我应该如何读取或写入 APIC 寄存器“APIC_ICR”?
【发布时间】:2012-07-06 08:56:25
【问题描述】:

代码如下:

static int __init test3_init(void)
{
   uint64_t v,i;
   for (i=0;i<10;i++)
   {
       v= native_x2apic_icr_read();
       printk("v=%llx\n",v);
   }
   return 0;
}

结果如下:

[ 6658.458919] v=9a557fd8
[ 6658.458925] v=1d
[ 6658.458928] v=17
[ 6658.458930] v=17
[ 6658.458932] v=17
[ 6658.458935] v=17
[ 6658.458937] v=17
[ 6658.458939] v=17
[ 6658.458942] v=17
[ 6658.458944] v=17

为什么连续读取这个寄存器的值是这样的。前两个是不同的,但其余的都是一样的。

我的最终目标是重置这个寄存器中的APIC_DM_NMI(0x00400),但是如果值不一致,那么重置位有什么意义呢?有人告诉我重置这个位 APIC_DM_NMI 可以从 APIC 启用 NMI,我不知道,我完全是新手。如果有人可以提供有关此 MSR 的任何信息,以及如何正确操作它,我们将不胜感激。

谢谢。

【问题讨论】:

    标签: c linux linux-kernel hardware driver


    【解决方案1】:

    不知何故,我觉得稳定值(即 0x17)似乎是一个更“正常”的值。这些输出可以重复吗?我的意思是,前两个总是不同的,并且从 3 开始稳定?

    这是Pentium Processor System Architecture (page 395)对ICR寄存器的描述,我没有看到任何关于阅读此注册的注意事项。

    仅供参考,这是我从lecture notes 找到的 ICR 寄存器位规范:

    【讨论】:

    • 是的,它们可以重复。所以这不是随机的。此外,写入该 0x400 位会导致完全不同的值。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多