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