2013-03-14 4 views
0

BIOS없이 지정된 아키텍처 (x86, x64, pic 컨트롤러)에서 칩 이름과 주소 지정 가능한 메모리를 얻는 방법은 무엇입니까? 사용 가능한 메모리 크기를 저장하는 특정 레지스터가 있습니까?지정된 아키텍처 (x86, pic 컨트롤러)에서 칩 이름과 주소 지정 가능한 메모리를 얻는 방법은 무엇입니까?

+1

무엇? 데스크톱/서버/핸드 헬드 프로세서, 초소형 마이크로 컨트롤러 제품군에 대한 단일 솔루션이있을 것으로 기대하십니까? – unwind

답변

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를 쿼리하는 것입니다.