2016-11-18 27 views
0

Я работаю над модулем ядра Linux, в котором мне нужно прочитать CPUID процессора, чтобы узнать, присутствует ли функция. В документации к набору микросхем указано:CPUID и MSR читает Linux-x86

«Доступ к этому MSR поддерживается, когда либо CPUID (EAX = 14H, ECX = 0): ECX [бит 0], либо CPUID. (EAX = 14H, ECX = 0): ECX [бит2 ]»

Однако я использую следующий код для чтения 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; 
} 

адаптировано из: https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits

, но я понятия не имею, как это работает, или какие значения я читаю. Может кто-нибудь объяснить мне, как работает этот код, а также как я могу читать данные вышеприведенных регистров CPUID, а также EAX = 80000008h.

Благодаря

+0

Используйте функцию CPUID обертку, если вы не понимаете, рядный ASM себя. Есть несколько вариантов. –

+0

@ Питер Кордес. Спасибо за это ... – vitamike

+1

Возможный дубликат [Intel Processor: «Если CPUID.06H: EAX. \ [7 \] = 1« Значение? »(Https://stackoverflow.com/questions/45883852/intel-processor- if-cpuid-06heax-7-1), что также является вопросом Linux-ядра, и ответ показывает функции оболочки CPUID Linux –

ответ

0

Если вы уже нашли, один из таких популярных утилита называется просто «CPUID» и доступен как пакет оборотов в Fedora и как пакет Ubuntu, а также в других дистрибутивах. Эта утилита использует инструкцию «cpuid».

См: http://www.etallen.com/cpuid.html

 Смежные вопросы

  • Нет связанных вопросов^_^