BIOS없이 지정된 아키텍처 (x86, x64, pic 컨트롤러)에서 칩 이름과 주소 지정 가능한 메모리를 얻는 방법은 무엇입니까? 사용 가능한 메모리 크기를 저장하는 특정 레지스터가 있습니까?지정된 아키텍처 (x86, pic 컨트롤러)에서 칩 이름과 주소 지정 가능한 메모리를 얻는 방법은 무엇입니까?
0
A
답변
0
이 방법이 어떤지는 잘 모르지만 올바른 방향으로 가리킬 수 있습니다. PICAXE MCU의 (안 PIC 마이크로 컨트롤러의)가 "READSILICON"
라는 프로그램 언어의 키워드/문이었다 그리고이 READSILICON 조치가 실리콘의 지정되지 않은 영역을 읽고 값을 반환로 PICBASIC을 사용
에 그 턴은 MCU를 식별하는 데 사용되었습니다.
그래서 개발 IDE에서 비슷한 기능이 있습니까?
참고 : 이것은 새로운 기능 이었으므로 최신 mcu에서만 지원했지만 분명히 오래된 mcu에서는 지원하지 않았습니다.
0
x86의 경우 칩 이름은 CPUID
명령어를 사용하여 검색 할 수 있습니다. Wikipedia article on CPUID은 프로세서 브랜드 이름 문자열을 쿼리하는 방법에 대한 예제 코드를 제공합니다.
CPUID에 대한 주 참조는 Intel's App Note을, 상표 문자열 식별은이 글을 쓰는 시점에서 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");
}
이/x86 컴퓨터에 BIOS없이 크기는 하드웨어가 매우입니다 직접이 작업을 수행하는 방법만큼 불가능 거의이다 (BKCD-BIOS 및 커널 개발자 안내서)는 대개 공용 (NDA 필요 없음) 버전에서 부분 부분 만 제공합니다. 문서화 된 방법은이 정보에 대해 ACPI BIOS를 쿼리하는 것입니다.
무엇? 데스크톱/서버/핸드 헬드 프로세서, 초소형 마이크로 컨트롤러 제품군에 대한 단일 솔루션이있을 것으로 기대하십니까? – unwind