Im travaillant sur un module noyau Linux dans lequel j'ai besoin de lire le CPUID d'un processeur pour voir si une fonctionnalité est présente. La documentation du chipset indique:CPUID et MSR lit Linux-x86
"Les accès à ce MSR sont pris en charge lorsque CPUID (EAX = 14H, ECX = 0): ECX [bit 0] ou CPUID (EAX = 14H, ECX = 0): ECX [bit2 ] »
Cependant, je suis en utilisant le code suivant pour lire CPUID:
int func()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm__("cpuid"
:"=a"(b) // EAX into b (output)
:"0"(a) // a into EAX (input)
:"%ebx","%ecx","%edx"); // clobbered registers
printk("The code %i gives %llx\n", a, b);
}
return 0;
}
Adapté de: https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
mais je ne sais pas comment cela fonctionne ou quels sont les valeurs que je lis. Quelqu'un peut-il m'expliquer comment fonctionne ce code et comment je peux lire les registres CPUID ci-dessus ainsi que EAX = 80000008h.
Merci
utiliser une fonction wrapper CPUID si vous ne comprenez pas en ligne asm-vous. Il y en a plusieurs à choisir. –
@ Peter Cordes. Merci pour cela ... – vitamike
Copie possible de [Processeur Intel: "Si CPUID.06H: EAX. \ [7 \] = 1" Signification?] (Https://stackoverflow.com/questions/45883852/intel-processor- if-cpuid-06heax-7-1-meaning), qui est aussi une question de noyau Linux, et la réponse montre les fonctions de l'encapsuleur CPUID de Linux –