메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

임베디드 시스템을 위한 간이 터미널 연결방법

한빛미디어

|

2005-03-31

|

by HANBIT

16,180

저자: 임영규 / GNOME Linux R&D / imlinux70@hanafos.com


1. 서론

산업사회의 많은 발전은 임베디드 시스템을 더욱 발전시키는 원인을 제공하고 있다.
따라서 많은 임베디드 시스템은 학습을 목적으로 사용되며, 또한 이를 배우고 익히고자 하는 이들에게 터미널 기능이 제공되지 않는 타겟 보드의 사용에 대해 불편함은 상주하고 있다. 이러한 문제를 해결하기 위해서 컴퓨터가 제공하는 시리얼 포트(Serial port :: RS232C)를 이용하여 임베디드 타겟보드에 접속하는 방법을 제공한다.


2. 본론

임베디드 시스템의 개발 모형은 다양하다. 따라서 Linux PC와 Windows PC를 이용하여 slip을 사용하는 방법에 대하여 기술한다. 대개의 임베디드 시스템이 리눅스 OS를 감안 한다면 이 방법은 아주 유용하게 사용될 것이다. 테스트를 위한 사양은 아래와 같다.

     타겟 : 리눅스 레드햇 9
     호스트 : 개발용 PC windows 2000

첫번째로 리눅스 타겟이 serial port를 인식하는가 하는 것이다. 이것은 간단히 확인해 볼 수 있다. 물론 대개의 임베디드 시스템 보드는 RS232C를 지원하게 설계되어 있다.

     # dmesg | grep tty

를 실행하면 ttys0, ttys1, 실제 물리적 주소가 확인될 것이다. 일반적으로 port0=0x3f8, port1=0x2f8이다.

이제 리눅스 OS가 serial port를 사용할 수 있게 해 주어야 한다. 그래서 다음과 같이 설정한다.

     # setserial -g /dev/ttys[01]

port0,1을 모두 사용하겠다는 것이다. 만약 setserial이 설치되어 있지 않으면 설치하여야 한다. 초보 리눅스의 경우 리눅스를 설치할 때 모든 패키지를 설치할 것을 권한다. 왜냐하면 일련의 학업을 목적으로 따라하기를 하다보면 패키지가 설치되어 있지 않아서 발생하는 문제점이 상당수 발생하기 때문이다. 설치가 되어 있는 ㅣ경우 setserial에 대한 많은 정보를 얻기를 원한다면 다음과 같이 할 수 있다.

     # whereis setserial
     # rpm -qif /somedir/setserial

이때 somedir은 실제 setserial이 저장되어 있는 경로가 된다. 결과로 setserial을 포함하는 패키지가 표시될 것이다.

     # rpm -qil | less

setserial을 포함하는 패키지 정보와 파일 List가 보일 것이다. 찾아서 많은 정보를 보면 도움이 될 것이다.

다음으로 리눅스가 serial을 지원할 수 있도록 /etc/inittab 파일을 변경한다. 우선 변경하기 전에 벡업을 받아 놓기를 권한다.

     # cp /etc/inittab /usr/local/src/inittab.old

파일의 내용을 다음과 같이 변경한다. 물론 /etc/inittab 이다.

     # vi /etc/inittab

#Run gettys ...... 다음 줄에 아래 내용을 추가한다

     #-----------------------------------------
     s0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
     s1:2345:respawn:/sbin/agetty -L -f /etc/issueserial 38400 ttyS0 vt100
     #-----------------------------------------

저장을 완료한다. atty에 대한 자세한 내용은 manual page를 참고하여야 한다. 이제 serial port로 접속을 했을 때 welcome Message를 보내주어야 한다. 그래서 /etc/issueserial 파일을 생성한다.

     # vi /etc/issueserial

     Embedded
     Connected on \l at \b bps
     \U

여기서 \l 은 접속을 허락한 port 번호이며 \b는 속도이며 \U는 접속한 사용자를 나타낸다. 이제 리눅스가 /etc/inittab을 재 적용하게 할 것이다. 물론 Reboot을 할 수 있지만 간단히 재 적용할 수 있다.

     # init q

이제 실제로 agetty 프로세스가 실행되었는지 확인을 해 보면 된다.

     # ps -ef | grep agetty

agetty 프로세스가 실행 되었다면 리눅스에서의 설정은 완료된 것이다. 이제 windwos 2000에서 접속을 시도해 보는 것이다. 접속을 할 경우 inittab 파일에 설정된 것과 같이 9600, n, 8,1 또는 38400,n,8,1로 serial 설정을 하면 되겠다. 윈도우에 설치되어 있는 HyperTerminal 프로그램을 사용하여 접속을 하면 성공적으로 접속될 것이다. 그 외에 다른 프로그램을 사용할 수 있다.

이를 위해 타겟과 호스트를 연결하기 위한 케이블을 준비하여야 한다. 이것을 NULL-MODEM이라고 한다. 여기에서 root로 접속을 원한다면 리눅스가 설치된 컴퓨터에서 security를 재 설정해 주어야 한다.

     # vi /etc/securetty

     console
     ttyS0
     ttyS1
     vc/1
     vc/2
     .
     .
     .

과 같이 수정한다. 만약 송수신 속도, agetty등을 조정하고 싶다면 앞서 설명한 inittab 파일을 수정하면 되며, init 데몬을 재 시작해야 하여야 한다.

     # init q ; pkill agetty

추가적으로 리눅스가 설치된 컴퓨터에 키보드와 모니터가 연결되지 않았다면 grub파일을 수정하고 serial port를 이용하여 window 2000컴퓨터의 HyperText Terminal 프로그램으로 부팅하여 관리할 수 있다. 그래서 /etc/grub.conf을 수정할 수 있다.

     kernel /vmlinux-2.4.20-8 ro root=LABEL=/ consol=ttyS1, 38400

으로 수정하여 사용할 수 있다. 위에서는 port 1으로 연결한 것이다.


3. 결론

이상으로 임베디드 시스템 보드에서 제공하는 serial port를 이용하여 개발용 PC에서 타겟으로 접속하는 방법을 확인해 보았다. 경우에 따라 임베디드 시스템 보드가 NIC (Network Interface Card)를 제공할 수 있다. 그러나 serial port를 연결하여 사용하는 경우에 대한 확인을 해 보았다는 점이 흥미롭다.
TAG :
댓글 입력
자료실

최근 본 책0