ダンプ ローカル APIC タイマー レジスタを読み取る Linux カーネル モジュールを作成しています。
X86_64 プラットフォームで Ubuntu 16.04 デスクトップを使用しています。
X2APIC が無効になっており、grub.cfg で nohz=off になっています。
次のコードを使用して、APIC タイマー レジスタを読み取ります。
#include <linux/slab.h>
#include <linux/time.h>
#include <asm/string.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/hrtimer.h>
#include <linux/ktime.h>
#include <asm/apic.h>
void read_apic_timer(void)
{
printk("APIC_TDCR = 0x%x\n", apic_read(APIC_TDCR));
printk("APIC_TMICT = 0x%x\n", apic_read(APIC_TMICT));
printk("APIC_TMCCT = 0x%x\n", apic_read(APIC_TMCCT));
}
static int __init timer_init(void)
{
read_apic_timer();
return 0;
}
static void __exit timer_exit(void)
{
printk("module uninstalling\n");
}
module_init(timer_init);
module_exit(timer_exit);
MODULE_LICENSE("GPL");
そして、私はこれらを手に入れました、
[ 5619.047497] APIC_TDCR = 0x0
[ 5619.047498] APIC_TMICT = 0x0
[ 5619.047499] APIC_TMCCT = 0x0
驚いたことに、初期カウンターと現在のカウンターがすべて 0 になっています。これは正しいですか?
それとも、何かを見逃したか、何か間違ったことをしましたか?