2008년 2월 22일 금요일

Use LCDProc in TS-Linux

Preface
-------
우선 NetBSD에 LCDProc 포팅하는 것이 잘되지 않아서 보드에 기본으로 설치되는 Linux(TS- Linux)를 이용해서 LCD 에 글이 표시되는 것을 해봤습니다. TS-Linux라는 게 별게 아니고 Debian Linux 기반으로 하여 업체에서 보드에 포팅한 Linux 정도라고 생각하시면 됩니다.

LCDProc 포팅
------------
LCDProc 에 대해 간략히 설명하자면 왠만한 Character LCD 제품에 대해 포팅하여 쓸수 있는 아주 좋은 프로그램입니다. Server/Client 구조로 되어 있어서 사용하기에도 좋고 사용자가 LCD의 데이터시트 내용까지 알 필요 없게끔 잘 만들었습니다. 이전에 마이컴수준에서 LCD를 사용해 보았는데 LCD에 글씨 출력하는 게 꽤 노가다를 필요로 합니다. 그런데 요 녀석은 그런 수고를 덜어줍니다.

자, 이제 본격적으로 포팅을 준비하겠습니다. 준비물은,
o LCDproc v0.5.0 Relase Version
from http://lcdproc.org
o TS-72xx 용 패치 파일
lcdproc-0.5.0_hd44780_ts7200.patch
from http://tech.groups.yahoo.com/group/ts-7000/files/ (kym_newbery Oct 1, 2007)
o Debian Linux Sarge 가 설치된 시스템
o Cross Compiler
from ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7200-linux/cross-toolchains/crosstool-linux-gcc-3.4.2-glibc-2.3.3.tar.bz2
NOTE. 지금까지 계속 crosstool-linux-gcc-3.3.4-glibc-2.3.2-0.28rc39.tar.bz2 를 사용해 왔었는데요 버전에서만 제대로 실행되는 것을 확인했습니다.

컴파일하는 것은 뭐 잘 아실거라 믿습니다. 패치는 다음 처럼 하시면 됩니다. (bash shell 기준)
% tar zxvf lcdproc-0.5.0.tar.gz
% cd lcdproc
copy lcdproc-0.5.0_hd44780_ts7200.patch in here!
% export CC=arm-ep9312-linux-gnu-gcc
% cd lcdproc-0.5.0
% patch -p1 < ../lcdproc-0.5.0_hd44780_ts7200.patch % ./configure --enable-drivers=hd44780 --host=arm-linux-gnu NOTE. Cross Compiler 이름에 CPU ep9312로 되어 있는데 TS-7200 보드의 ep9302 CPU에 사용해도 무방합니다. 컴파일이 끝나면 우리가 원하는 파일들이 생성됩니다. 리스트는, o lcdproc/lcdproc-0.5.0/server/LCDd LCD Server 프로그램 o lcdproc/lcdproc-0.5.0/server/drivers/hd44780.so LCD Server 실행에 필요한 라이브러리 o lcdproc/lcdproc-0.5.0/LCDd.conf LCD Server 설정 파일 LCD Client 프로그램은 lcdproc/lcdproc-0.5.0/clients 에 위치합니다. C로 된것도 있고 perl 스크립트로 되어 있는 것도 있는데 C로 된 것은 해당 디렉토리에서 make 하면 됩니다. 이제 준비물은 끝이 났습니다. LCDd, hd44780.so, LCDd.conf 를 TS-7200에 넘겨주면 되는데 넘기기 전에 LCDd.conf 를 다음 처럼 바꿉니다. % diff LCDd.conf ~/LCDd.conf 35,36c35,36 < driver="CFontzPacket" driver="hd44780"> #Driver=CFontzPacket
> Driver=hd44780
47c47,48
< bind="127.0.0.1"> #Bind=127.0.0.1
> Bind=0.0.0.0
79c80,81
< driverpath="server/drivers/"> #DriverPath=server/drivers/
> DriverPath=/usr/local/lib/lcdproc/
351c353,354
< connectiontype="4bit"> #ConnectionType=4bit
> ConnectionType=ts7200
373c376,377
< size="20x4"> #Size=20x4
> Size=24x2

즉, [server] 설정탭의 Driver와 DriverPath를 수정하고 [hd44780]탭의 ConnectionType, Size를 변경합니다. 전 24x2 LCD를 가지고 있어서 이렇게 변경했는데 해당 사이즈에 맞게 변경해주면 됩니다. (Suprise!)
NOTE. [server]탭의 Bind 값이 127.0.0.1 로 되어있는데 0.0.0.0 으로 하는것이 바람직한 것으로 보입니다.

TS-7200 보드에 준비물을 다음의 디렉토리 위치에 넣어둡니다.
o /etc/LCDd.conf
o /usr/local/bin/LCDd
o /usr/local/lib/lcdproc/hd44780.so

이제 LCD Server 프로그램 준비가 끝났습니다. LCD Client 프로그램도 스크립트가 아닌 C 프로그램을 컴파일했다면 /usr/local/bin 에 위치시키면 모두 완료.

LCDProc 시험
------------
o TS-7200에서 LCDd를 실행합니다. (-d 옵션을 주면 데몬으로 동작합니다. -h 참고)
o Cross Compile 한 Debian System에서 Client 프로그램을 실행합니다.
lcdproc/lcdproc-0.5.0/clients/examples/*.pl
여기서는 fortune.pl을 사용하겠습니다. 우선 fortune.pl에서 $HOST = "localhost"; 의 localhost를
TS-7200의 IP로 변경합니다.
% ./fortune.pl

이렇게 하면 Character LCD에 글자가 표시됩니다. 나머지 client 프로그램도 한번 시도해보시길...


Appendix A
----------
sourceforce.net 에 가면 lcdprocwin 이라는 프로젝트가 있습니다. LCD 서버 프로그램을 윈도우로 포팅한건데 소스 받아다 컴파일하면 각각 디렉토리에 Shared Library_debug.lib, lcdprocwin.exe 이 생성됩니다. 이것과 함께 소스 최상위에 있는 lcdprocwin.conf 파일을 하나의 디렉토리를 만들어서 그곳에 넣습니다. 설정파일은 크게 바꿀게 없고 단지 [server]탭의 Bind=0.0.0.0 로 해두시면 됩니다. Size 조정 해도 됩니다.

실행하면 다음과 같이 윈도우 보안 경고가 뜨는데 반드시 차단 해제 하셔야합니다. 나중에 다시 확인 버튼 선택하니 Client가 연결이 안됩니다.

실행하고 나면 다음과 같이 나옵니다.


도스 창에서 netstat -an 명령으로 확인해서 0.0.0.0:13666 으로 TCP Listen 상태가 되는지 확인 합니다.


먼저 번 Debian 시스템에 있는 Client 프로그램으로 HOST 값을 바꾸어서 연결하면 해당 글씨가 나옵니다.

Conclusion
----------
아직 KeyPad와 연관해서 사용하는 법은 아직 모르겠습니다. 보드에 서버와 클라이언트를 모두 띄워서 KeyPad를 가지고 조작할수 있으면 참 좋겠는데 전 여기까지만 성공했습니다. (기능은 됩니다)

LCDProc 의외로 사용가치가 높습니다. youtube에서 lcdproc으로 검색하면 꽤 멋진 동영상들 많이 나옵니다.

NetBSD에 LCDProc 포팅하는 건 아직 시작해보지는 않았는데 될거라 봅니다. 적절한 패치만 해서 컴파일만 잘 된다면 동일한 기능이 구현되리라 봅니다.

SBC 와 같은 emebedded system에 프로그래밍을 한다는게 참 어려운 작업인 걸 새삼스럽게 느낍니다. 프로그래밍만 아는 반토막 지식을 가지고는 해결해야 할 사항이 의외로 많더군요. 하드웨어마다 데이터시트도 구해서 읽어봐야하고, 전자공학 지식도 있어야 되고 컴퓨터 구조에 대해서도 잘 알아야하고... 산 너머 산입니다.

그래서, 요즘은 역으로 아니 처음부터 그렇게 했어야 했는데 전자공학 책 사서 보고 있습니다. 보드도 8bit 마이크로컨트롤러 구해다 보고 있습니다. 요 녀석 들여다보니 프로그램 입장에서 거의 똑같더군요. 하기야 8bit 이지만 RISC 칩이라서 뭐 큰 구조는 같은 셈이죠.

댓글 1개:

익명 :

Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Câmera Digital, I hope you enjoy. The address is http://camera-fotografica-digital.blogspot.com. A hug.