
1. 개요
이 문서는 리눅스에서 프로세서를 구별하는 정보를 얻어 오는 방법에 대하여
조사한 내용을 기술한 문서이다.
2. ARM 용 리눅스에서 프로세서를 구별하는 정보를 얻어오는 방법
현재까지는 조사한 바로는
ARM 프로세서에서 동작하는 리눅스에서 제공되는 환경에서
프로제서를 구별하는 방법은 없다.
그래서 다음과 같은 방법을 모색해 봤다.
1) 부트로더에서 커널 커맨드로 전달하는 방법
2) 커널에 전달되는 아키텍쳐 번호를 획득해서 이용하는 방법
3) /proc/cpuinfo 를 이용해서 획득하는 방법
4) arm coprocessor 에서 cpuid 를 읽어와서 구별하는 방법
5) /proc/kallsyms 에서 함수명을 찾아 검색하는 방법
6) 커널 소스를 고쳐서 /proc 에 model 명 읽을수 있도록 proc 파일을 추가 하는 방법
이중 3) /proc/cpuinfo 를 이용해서 획득하는 방법 을 선택했다.
다른 방식을 포기한 이유는 다음과 같다.
1) 부트로더에서 커널 커맨드로 전달하는 방법
사용자의 잘못된 내용 설정에 따라서
프로세서 구별 정보 획득에 실패할 수 있는 가능성이 매우 높고
매번 사용자가 주의해서 처리해야 하는 문제가 있다.
2) 커널에 전달되는 아키텍쳐 번호를 획득해서 이용하는 방법
현재 아키텍쳐 번호를 얻는 방법이 없다.
4) arm coprocessor 에서 cpuid 를 읽어와서 구별하는 방법
cpuid 만으로는 프로세서를 완전히 구별할수가 없다.
예를 들면 삼성 프로세서인 경우 S3C2440 이나 S3C2443 은 같은 cpuid를 갖는다.
5) /proc/kallsyms 에서 함수명을 찾아 검색하는 방법
호환 프로세서간에는 공통 기능을 구현하는 함수를 재 사용한다.
때문에 S3C6410에 필요한 함수가 S3C2440에도 필요하여 사용하므로
이 방식으로 프로세서를 구별하는 것은 어렵ㄴ다.
6) 커널 소스를 고쳐서 /proc 에 model 명 읽을수 있도록 proc 파일을 추가 하는 방법
커널을 고치는 방법인데 가장 정확하고 확실한 방법이지만
관리 포인트가 매우 증가한다.
3. /proc/cpuinfo
/proc/cpuinfo 는 다음과 같은 형태로 출력된다.
3.1 S3C6410 일 경우
[root@falinux ~]$ cat /proc/cpuinfo
Processor : ARMv6-compatible processor rev 6 (v6l)
BogoMIPS : 661.50
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 6
Hardware : EZS3C6410
Revision : 0000
Serial : 0000000000000000
3.2 S3C2440 일 경우
[root@falinux ~]$ cat /proc/cpuinfo
Processor : ARM920T rev 0 (v4l)
BogoMIPS : 198.65
Features : swp half thumb
CPU implementer : 0x41
CPU architecture: 4T
CPU variant : 0x1
CPU part : 0x920
CPU revision : 0
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format A
Cache format : Harvard
I size : 16384
I assoc : 64
I line length : 32
I sets : 8
D size : 16384
D assoc : 64
D line length : 32
D sets : 8
Hardware : www.falinux.com EZ-S3C2440 for S3C2440 Board
Revision : 0000
Serial : 0000000000000000
3.3 IXP420 일 경우
[root@falinux ~]$ cat /proc/cpuinfo
Processor : XScale-IXP42x Family rev 1 (v5l)
BogoMIPS : 575.07
Features : swp half thumb fastmult edsp
CPU implementer : 0x69
CPU architecture: 5TE
CPU variant : 0x0
CPU part : 0x41c
CPU revision : 1
Cache type : undefined 5
Cache clean : undefined 5
Cache lockdown : undefined 5
Cache format : Harvard
I size : 32768
I assoc : 32
I line length : 32
I sets : 32
D size : 32768
D assoc : 32
D line length : 32
D sets : 32
Hardware : FALinux EZ-IXP42X Development Platform
Revision : 0000
Serial : 0000000000000000
4. 프로세서 구별
일단 회사 보드에서 프로세서를 구별하는 것에 중점을 둔다.
/proc/cpuinfo 에서
Hardware : 의 값을 분석해서 각 프로세서를 구별하는 것으로 했다.
1) /proc/cpuinfo 를 open 으로 연다.
2) 라인별로 읽는다.
3) "Hardware : "을 포함하는 라인을 찾는다.
4) 이 라인에서 다음 목록과 같은 문자열 포함 여부를 체크해서 해당 프로세서 종류를 구별한다.
검색 문자열 : 프로세서 : 보드
----------- -------- --------
EZS3C6410 : S3C6410 : EZ-S3C6410
EZ-S3C2440 : S3C2440 : EZ-S3C2440
EZ-IXP42X : IXP420 : EZ-IXP420
5 참고
인터넷을 검색하다 보니 cpuid 를 이용해서 시도한 문서가 있다.
출처 : http://forum.xda-developers.com/showthread.php?t=480226
CPUID LIST:
0x4107B364 : Qualcomm MSM7200 (Kaiser, LG KS20)
0x4117B362 : Qualcomm MSM7200A (Xperia X1i)
0x4117B362 : Qualcomm MSM7201A (Diamond, Raphael, Blackstone)
0x4107B364 : Qualcomm MSM7500 (Vogue)
0x54029252 : TI OMAP710 (MPx200)
0x41069263 : TI OMAP730 (Typhoon)
0x41069263 : TI OMAP850 (Wizard, Elf)
0x4107B362 : TI OMAP2420 (Q9h)
0x69052D06 : Intel PXA264 (Blue Angel) -
0x69054117 : Intel PXA270 (Ipaq 614c, Axim x51v, Toshiba G900, Atom Life, Universal, LOOX T830)
0x69054117 : Intel PXA272 (P535)
0x69056891 : Marvell PXA310 (SGH i780)
0x69056892 : Marvell PXA320 (Omnia)
0x41129200 : Samsung S3C2440 (Hermes)
0x41129200 : Samsung SC32442 (Trinity)
0x41069263 : Htc Wizard
0x69054117 : HP Ipaq 614c/XScale PXA270
0x41129200 : HTC TRINITY
0x69054117 : Dell Axim x51v / PXA270 624 MHz
0x4117B362 : HTC Diamond
0x69054117 : Toshiba G900 / Marvell PXA270 @512MHz
0x4107b364 : HTC Vogue/Qualcomm MSM7500
0x69054117 : MWg Atom Life
0x4117B362 : HTC Touch HD