Aus MSR kann nicht zurückgelesen werden

Ich schreibe ein Kernelmodul und es geht um das Lesen und Schreiben von MSRs. Ich habe ein einfaches Programm zum Testen geschrieben, aber es schlägt immer noch fehl. Alles, was es tut, ist, in MSR zu schreiben und es dann zurückzulesen. Hier ist der Code:

static int __init test3_init(void)
{
    uint32_t hi,lo;
    hi=0; lo=0xb;
    asm volatile("mov %0,%%eax"::"r"(lo));
    asm volatile("mov %0,%%edx"::"r"(hi));
    asm volatile("mov $0x38d,%ecx");
    asm volatile("wrmsr");
    printk("exit_write: hi=%08x lo=%08x\n",hi,lo);
    asm volatile("mov $0x38d,%ecx");
    asm volatile("rdmsr":"=a"(lo),"=d"(hi));
    printk("exit_write2: hi=%08x lo=%08x\n",hi,lo);
    return 0;
}

Die Ausgabe sieht folgendermaßen aus:

exit_write: hi=00000000 lo=0000000b

exit_write2: hi=00000000 lo=00000000

Kann mir jemand sagen, warum der Rückgabewert in der zweiten Ausgabe 0 anstelle des Originals ist? Stimmt etwas mit meinem Code nicht? Danke vielmals.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage