1. 개요

 

    이 문서는 동작하는 보드상에서 리눅스 시스템이 제공하고 있는
    시리얼 포트 이름 과
    디바이스 파일을 생성하기 위한 주 번호와 부번호를
    얻는 방법에 대하여 기술한다.
   
2. ARM 용 리눅스에서 시스템에서 제공하는 시리얼 포트 정보를 얻어오는 방법 조사

 

    시리얼 디바이스 드라이버 목록은 다음과 같은 proc 파일에서 제공하고 있다.
   
    /proc/tty/drivers
   
2.1 IXP420의 예

 

    [root@falinux /]$ cat /proc/tty/drivers
    /dev/tty             /dev/tty        5       0 system:/dev/tty
    /dev/console         /dev/console    5       1 system:console
    /dev/ptmx            /dev/ptmx       5       2 system
    /dev/vc/0            /dev/vc/0       4       0 system:vtmaster
    serial               /dev/ttyS       4 64-67 serial
    pty_slave            /dev/pts      136 0-1048575 pty:slave
    pty_master           /dev/ptm      128 0-1048575 pty:master
    pty_slave            /dev/ttyp       3 0-15 pty:slave
    pty_master           /dev/pty        2 0-15 pty:master
    unknown              /dev/tty        4 1-63 console
    [root@falinux /]$


2.2 S3C6410의 예

 

    [root@falinux ~]$ cat /proc/tty/drivers                      
    /dev/tty             /dev/tty        5       0 system:/dev/tty
    /dev/console         /dev/console    5       1 system:console
    /dev/ptmx            /dev/ptmx       5       2 system        
    /dev/vc/0            /dev/vc/0       4       0 system:vtmaster
    ttySAC               /dev/s3c2410_serial                 204 64-67        serial    
    pty_slave            /dev/pts      136 0-1048575 pty:slave   
    pty_master           /dev/ptm      128 0-1048575 pty:master  
    pty_slave            /dev/ttyp       3 0-255 pty:slave       
    pty_master           /dev/pty        2 0-255 pty:master      
    unknown              /dev/tty        4 1-63 console          
   

2.3 S3C2440의 예

 

    [root@falinux ~]$ cat /proc/tty/drivers
    /dev/tty             /dev/tty        5       0 system:/dev/tty
    /dev/console         /dev/console    5       1 system:console
    /dev/ptmx            /dev/ptmx       5       2 system
    /dev/vc/0            /dev/vc/0       4       0 system:vtmaster
    s3c24xx_serial       /dev/ttySAC                   204 64-66        serial
    pty_slave            /dev/pts      136 0-1048575 pty:slave
    pty_master           /dev/ptm      128 0-1048575 pty:master
    pty_slave            /dev/ttyp       3 0-255 pty:slave
    pty_master           /dev/pty        2 0-255 pty:master
    unknown              /dev/tty        4 1-63 console
    [root@falinux ~]$    
   
2.4 GACU 모델의 예
  
    [root@falinux tty]$ cat drivers
    /dev/tty             /dev/tty        5       0 system:/dev/tty
    /dev/console         /dev/console    5       1 system:console
    /dev/ptmx            /dev/ptmx       5       2 system
    /dev/vc/0            /dev/vc/0       4       0 system:vtmaster
    s3c24xx_serial       /dev/ttySAC                   204 64-66        serial
    serial               /dev/ttyS       4 64-79 serial
    pty_slave            /dev/pts      136 0-1048575 pty:slave
    pty_master           /dev/ptm      128 0-1048575 pty:master
    pty_slave            /dev/ttyp       3 0-255 pty:slave
    pty_master           /dev/pty        2 0-255 pty:master
    unknown              /dev/tty        4 1-63 console
  
   ls -al /sys/class/tty/ttyS*

 

3. sys 파일에서 제공하는 시리얼 포트 정보를 얻어오는 방법 조사

 

3.1 S3C2440의 예
   
    [root@falinux /]$ ls -al /sys/class/tty/ttyS*
    /sys/class/tty/ttySAC0:
    drwxr-xr-x    2 root     root            0 Jan 15 18:51 .
    drwxr-xr-x  584 root     root            0 Jan  1  1970 ..
    -r--r--r--    1 root     root         4096 Jan 15 18:51 dev
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 device -> ../../../devices/platform/s3c2440-uart.0
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 subsystem -> ../../../class/tty
    --w-------    1 root     root         4096 Jan 15 18:51 uevent
   
    /sys/class/tty/ttySAC1:
    drwxr-xr-x    2 root     root            0 Jan 15 18:51 .
    drwxr-xr-x  584 root     root            0 Jan  1  1970 ..
    -r--r--r--    1 root     root         4096 Jan 15 18:51 dev
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 device -> ../../../devices/platform/s3c2440-uart.1
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 subsystem -> ../../../class/tty
    --w-------    1 root     root         4096 Jan 15 18:51 uevent
   
    /sys/class/tty/ttySAC2:
    drwxr-xr-x    2 root     root            0 Jan 15 18:51 .
    drwxr-xr-x  584 root     root            0 Jan  1  1970 ..
    -r--r--r--    1 root     root         4096 Jan 15 18:51 dev
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 device -> ../../../devices/platform/s3c2440-uart.2
    lrwxrwxrwx    1 root     root            0 Jan 15 18:51 subsystem -> ../../../class/tty
    --w-------    1 root     root         4096 Jan 15 18:51 uevent
    [root@falinux /]$    
   
    [root@falinux /]$ cat /sys/class/tty/ttySAC0/dev
    204:64                                         
   
3.2 S3C6410의 예

 

    [root@falinux ~]$ ls -al /sys/class/tty/s3c2410_serial*
    lrwxrwxrwx    1 root     root            0 Jan  1 00:00 /sys/class/tty/s3c2410_serial0 -> ../../devices/platform/s3c6400-uart.0/tty/s3c2410_serial0
    lrwxrwxrwx    1 root     root            0 Jan  1 00:00 /sys/class/tty/s3c2410_serial1 -> ../../devices/platform/s3c6400-uart.1/tty/s3c2410_serial1
    lrwxrwxrwx    1 root     root            0 Jan  1 00:00 /sys/class/tty/s3c2410_serial2 -> ../../devices/platform/s3c6400-uart.2/tty/s3c2410_serial2
    lrwxrwxrwx    1 root     root            0 Jan  1 00:00 /sys/class/tty/s3c2410_serial3 -> ../../devices/platform/s3c6400-uart.3/tty/s3c2410_serial3
    [root@falinux ~]$  
   
    [root@falinux ~]$ cat /sys/class/tty/s3c2410_serial0/dev
    204:64                                                 
   
3.3 IXP420 의 예

 

    [root@falinux ~]$ ls -al /sys/class/tty/ttyS*
    /sys/class/tty/ttyS0:
    drwxr-xr-x    2 root     root            0 Jan  1 00:00 .
    drwxr-xr-x  105 root     root            0 Jan  1 00:00 ..
    -r--r--r--    1 root     root         4096 Jan  1 00:02 dev
    lrwxrwxrwx    1 root     root            0 Jan  1 00:02 device -> ../../../devices/platform/serial8250
   
    /sys/class/tty/ttyS1:
    drwxr-xr-x    2 root     root            0 Jan  1 00:00 .
    drwxr-xr-x  105 root     root            0 Jan  1 00:00 ..
    -r--r--r--    1 root     root         4096 Jan  1 00:02 dev
    lrwxrwxrwx    1 root     root            0 Jan  1 00:02 device -> ../../../devices/platform/serial8250
   
    /sys/class/tty/ttyS2:
    drwxr-xr-x    2 root     root            0 Jan  1 00:00 .
    drwxr-xr-x  105 root     root            0 Jan  1 00:00 ..
    -r--r--r--    1 root     root         4096 Jan  1 00:02 dev
    lrwxrwxrwx    1 root     root            0 Jan  1 00:02 device -> ../../../devices/platform/serial8250
   
    /sys/class/tty/ttyS3:
    drwxr-xr-x    2 root     root            0 Jan  1 00:00 .
    drwxr-xr-x  105 root     root            0 Jan  1 00:00 ..
    -r--r--r--    1 root     root         4096 Jan  1 00:02 dev
    lrwxrwxrwx    1 root     root            0 Jan  1 00:02 device -> ../../../devices/platform/serial8250
    [root@falinux ~]$ 
   
4 시리얼 포트 목록 및 주번호, 부번호 얻는 방법에 대한 정리

 

    결론적으로 시리얼 포트 목록 및 주번호, 부번호를 얻는 방법은
    proc 이면 충분한것으로 판단된다.
   
    다음과 같은 방법으로 얻는다.
   
    1) /proc/tty/drivers 를 연다.
    2) 라인 단위로 읽어 들인다.
    3) 라인을 공백으로 토큰 분리한다.
    4) 다섯번째 토큰 문자열이 "serial"로 확인 되면 해당 라인을 시리얼 포트 정보 라인으로 판단한다.
    4) 세번째 토큰 문자열을 이용하여 주번호를 획득한다.
    6) 네번째 토큰 문자열을 - 로 토큰 분리하여 부번호의 시작과 끝을 획득한다.
    7) 부번호 정보를 이용하여 시리얼 갯수를 획득한다.
    8) 두번째 토큰 문자열을 이용하여 디바이스 이름을 획득한다.

    특기 사항은 S3C6410 이다.  
   
    보통은 ttyS 로 시작하는 이름이 시리얼 포트 명인데
    삼성에서 제공하는 이 프로세서 커널만 /dev/s3c2410_serial 이런식으로 되어 있다.
    웃긴것은 ttySAC0으로 콘솔을 지정한다는 거다..
   
    이건 내부적인 에프에이리눅스 커널에 재 조사 및 재 적용을 요청해야 겠다.
    C000_lua.gif