Как получить имя чипа и адресуемую память в указанных архитектурах (x86, x64, pic controller) без биоса? У вас есть специальный регистр, в котором хранится доступный объем памяти?
Как получить имя чипа и адресуемую память в указанных архитектурах (x86, pic controller)?
Ответы (2)
Не уверен, насколько это актуально, но это может помочь указать вам правильное направление.
При использовании PicBasic с микроконтроллерами PicAxe (не микроконтроллерами PIC) в языке программирования было ключевое слово/оператор под названием «READSILICON».
И это действие READSILICON будет считывать неуказанную область кремния и возвращать значение, которое, в свою очередь, использовалось/использовалось для идентификации MCU.
Так может в вашей среде разработки есть подобная функция?
ПРИМЕЧАНИЕ. Поскольку тогда это была новая функция, ее поддерживали только более новые микроконтроллеры, а старые — нет.
В x86 имя чипа можно получить с помощью инструкции CPUID
; статья Википедии о CPUID содержит пример кода для запроса марки процессора строка имени.
Основные сведения о CPUID см. в разделе Примечание к приложению Intel, на момент написания этой статьи идентификация строки бренда приведена в разделе 7.2.
В встроенной сборке GCC вы можете сделать:
unsigned int cpuid = 0x80000000;
__asm__ __volatile__("cpuid\n\t" : "+a" (cpuid));
if (cpuid >= 0x80000004) { // brand name query supported
union { char brandstr[48]; unsigned int i[12] } i;
__asm__ ("cpuid\n\t"
: "=a"(i.i[0]), "=b" (i.i[1]), "=c"(i.i[2]), "=d"(i.i[3])
: "a"(0x80000002));
__asm__ ("cpuid\n\t"
: "=a"(i.i[4]), "=b" (i.i[5]), "=c"(i.i[6]), "=d"(i.i[7])
: "a"(0x80000003));
__asm__ ("cpuid\n\t"
: "=a"(i.i[8]), "=b" (i.i[9]), "=c"(i.i[10]), "=d"(i.i[11])
: "a"(0x80000004));
printf ("This CPU brand name is: %48s\n", i.brandstr);
} else {
printf ("This x86 CPU doesn't support brand name queries\n");
}
Определение структуры/размера памяти без BIOS на машинах x86 практически невозможно, так как большая часть способов сделать это непосредственно на оборудовании очень специфична для комбинаций ЦП/чипсет и руководств разработчиков поставщиков (BKCD - Руководство разработчика BIOS и ядра) обычно предоставляет только частичные ссылки на это в общедоступной (не требуется NDA) версии. Документированный способ — запросить эту информацию у ACPI BIOS.