Embedded System Lab. II
Download
Report
Transcript Embedded System Lab. II
GUI Programming in Embedded Linux
경희대학교 컴퓨터공학과
조진성
Embedded System Lab. II
주요 내용
주요내용
임베디드 시스템에 사용 가능한 GUI 이해
임베디드 시스템에서의 네트워크 프로그래밍 이해
간단한 1:1 오목게임 구현
Embedded System Lab. II
2
Qt 소개
QT는 trolltech에서 개발하고 배포하는 cross 플랫폼 GUI 라이브러리
QT를 이용해서 만들어진 코드는 (약간만 신경 써준다면), 윈도우, Mac,
Linux, *nix에 관계없이 컴파일 해서 사용 가능
C++을 이용해서 완전히 객체지향적으로 작성되었다는 것도 큰 장점
Qt는 유닉스와 X11시스템을 위한 C++라이브러리이자 GUI 툴킷이다.
유닉스 운영체제(리눅스, 솔라리스 포함)를 위한 프리 소프트웨어를 개발
한다면 라이센스 비용이 들지 않는다.
Qt를 이용한 프로그램은 속도가 매우 빠르다.
Embedded System Lab. II
3
Qt/Embedded 소개
Qt 라이브러리를 기본으로 하여 개발된 임베디드 시스템용 GUI 라이브러
리
X-윈도우 없이 리눅스 커널에서 제공하는 Frame Buffer를 이용하여 그래
픽 장치에 접근
개발에 필요한 사양
1. CPU – 셀 300 이상
2. RAM – 128
3. HDD – 8G(linux-2G)
4. Serial Port
5. internet
6. Embeded 기기 – 16bit color 지원 모델(iPAQ)
7. 시리얼케이블(커널 X -> 필요)
Embedded System Lab. II
4
QT /Embedded 설치 및 환경 설정(1)
QT /Embedded 다운로드
ftp://ftp.trolltech.com/qt/source/qt-embedded-free-3.3.4.tar.bz2 를 root 디
렉토리에 다운로드
압축 해제(host)
# tar xvjf qt-embedded-free-3.3.4.tar.bz2
//압축제거
# ln –s qt-embedded-free-3.3.4 qte
//생성된 디렉토리를 qte로 심볼릭을 해줌
QT/ Embedded 환경설정(host)
- QTDIR : QT가 설치되어 있는 디렉토리
- LD_LIBRARY_PATH : QT에서 사용하는 공유 라이브러리를 이용 할 수
있도록 다음을 추가
/* ~/.bash_profile 에 다음을 추가 */
export QTDIR=/root/qte
export LD_LIBRARY_PATH=/root/qte/lib:$ LD_LIBRARY_PATH
Embedded System Lab. II
5
QT /Embedded 설치 및 환경 설정(2)
환경설정 적용(host)
# source ~/.bash_profile
//.bash_profile을 재 적용
QT/Emdedded Configuration(host)
yes 를 입력
# ./configure -embedded ipaq -shared -depths 8,16,24,32 -thread
-no-cups -qt-mouse-linuxtp
Embedded System Lab. II
6
QT /Embedded 설치 및 환경 설정(3)
libstdc++.a라이브러리 설치(host)
각 키트에서 제공해주는 툴 체인에는 libstdc++.a 라이브러리가 없기 때문에
부가적으로 libstdc++라이브러리를 해당 툴체인의 lib 디렉토리에 카피하거나
링크를 걸어주어야 한다.
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/libstdc++.a (위치)
# cd /usr/lib/gcc-lib/i386-redhat-linux/3.2.2
# cp libstdc++.a /usr/local/huins-arm-linux-R1.1/lib/libstdc++.a
Uic설치(host)
QT/Embedded 를 컴파일 하기 위해서는 qt-x11용 uic가 필요하다.
/usr/lib/qt-3.1/bin/uic (위치)
# cd /usr/lib/qt-3.1/bin/uic
# cp uic $QTDIR/bin
Embedded System Lab. II
7
QT /Embedded 설치 및 환경 설정(4)
컴파일 (host)
# cd $QTDIR
# make
컴파일이 성공적으로 끝났으면 QT/Embedded 라이브러리를 확인
ARM 용으로 컴파일 된 library
을 볼 수 있다.
Embedded System Lab. II
8
QT /Embedded 설치 및 환경 설정(5)
타겟보드 환경설정
ARM용으로 컴파일된 qt-embedded-free-3.3.4 즉 qte를 NFS설정을 통해서 마
운트 한다.(target)
타겟에서 호스트에 있는 qt라이브러리를 참조하기 위해 NFS 설정을 한
다.(host) – 아래 내용은 각자 환경에 따라 적절히 변경 할 것
/* /etc/exports 파일에 다음을 추가 */
/root/qte 192.168.1.253(rw, no_root_squash)
# service nfs restart
//서비스 restart
~/.profile환경설정 (target)
target# mount –t nfs 192.168.1.252:/root/qte /mnt/nfs/qte //nfs mount
/* ~/.profile에 다음을 추가 */
export QTDIR=/mnt/nfs/qte
export LD_LIBRARY_PATH=/mnt/nfs/qte/lib:$LD_LIBRARY_PATH
export QWS_MOUSE_PROTO=linuxtp:/dev/ts
target# source ~/.profile
Embedded System Lab. II
//설정 적용
9
QT /Embedded 설치 및 환경 설정(6)
libstdc++ 라이브러리 설치(target)
target# cp libstdc++.a /lib //host에 있는 libstdc++을 target에 복사
target# cd /lib
//’/lib’로 이동
target# ln –s /lib/libstdc++.a libstdc++-libc6.1-2.so.3 //라이브러리를 심볼릭 해줌
Host에서 target으로 라이브러리 복사과정은 생략 – 적절한 방식으로 옮길 것
~/.profile
~/.profile 적용
심볼릭
Embedded System Lab. II
10
QT /Embedded 설치 및 환경 설정(7)
예제프로그램 테스트
Host쪽의 Qt/Embedded의
샘플 프로그램을 컴파일한다.
Qt프로그램을 실행하기 위해서는
Xindow 종료시켜야한다.
따라서, ps로 xwindow를 확인한후
‘kill -9 75’ 를 실행하여 xwindow 를 종료시킨다.
Embedded System Lab. II
11
QT /Embedded 설치 및 환경 설정(8)
응용프로그램을 다운로드후 실행(target)
# ./hello –qws
//응용프로그램 실행
프로그램 다운로드 과정 생략
X 프로세스를 죽인 후 실행시키면 터치 스크린의 초록바탕에 실행 되는 것을
확인 할 수 있다.
Embedded System Lab. II
12
QT /Embedded Application(1)
어플리케이션 개요
임베디드 키트상에서 Qt/E를 이용하여 간단한 1:1네트워크 게임 실행
간단한 리눅스 용 프로그램을 임베디드 키트상에 올려봄으로써 임베디드 기기
와 리눅스에 대한 이해
Embedded System Lab. II
13
QT /Embedded Application(2)
어플리케이션 인터페이스 - 메인화면
메뉴 버튼 (좌부터)
. Connect
. Disconnect
. IP information
검은 돌/하얀 돌
놓은 개수 표시
오목판
로고
턴 알림
Embedded System Lab. II
14
QT /Embedded Application(3)
어플리케이션 인터페이스 – 네트워크 연결
1. Connect 버튼 클릭
2. 터치 패드로 입력
3. OK 버튼 클릭
IP 주소 입력
IP number 알림 창
Port 번호 입력
Embedded System Lab. II
15
QT /Embedded Application(4)
어플리케이션 상속도
CSockIo :
소켓통신(UDP 이용) 관련 클래스
CConnectDlg :
접속대화상자 관련 클래스
CGameBoard :
오목게임 메인 클래스
MainWindow :
MainWindow 폼 클래스
Embedded System Lab. II
16
QT /Embedded Application(5)
어플리케이션 흐름도
네트워크 연결
턴 방식 Client First
Server Client
Start
Start ok
Game 패킷
Game 패킷
게임적용
게임적용
네트워크 종료
게임 종료
Embedded System Lab. II
17
QT /Embedded Application(6)
어플리케이션 알고리즘
게임보드는 14*14 크기의 2차원 배열을 적용하여 배열상에서 흰돌과 검은돌
을 넣고 뺄 수 있도록 한다.
오목게임의 룰을 적용하여 연속으로 5개의 같은 돌이 놓였을 경우 게임이 끝
나게 된다.
돌을 놓을 경우 첫 번째 배열
부터 Vertical, Horizontal,
LeftDown, RightDown 체크를
하여 연속된 돌이 5개 있는지
체크한다.
오목판에 돌이 다 차면
비기고 새 게임이 시작
된다
Embedded System Lab. II
18
QT /Embedded Application(7)
네트워크 부분
턴 방식의 게임 진행을 한다.
하나의 프로그램에서 서버 / 클라이언트의 역할을 동시에 하고, 접속을 하는
쪽이 클라이언트가 된다.
항상 클라이언트부터 게임을 시작한다.
한 게임이 끝나면 진 사람부터 다시 게임을 시작한다.
네트워크 구성
서버
클라이언트
socket
udp packet
Client
Embedded System Lab. II
socket
Client
19
QT /Embedded Application(8)
네트워크 프로토콜
command
x
y
message
COMMAND
CONNECT
접속요청
CONNECT_ACK
접속에 대한 응답
CLOSE
게임종료
SHOOT
돌 놓기
SHOOT_ACK
돌 놓기 응답
MESSAGE
사용 안 함
Embedded System Lab. II
20
QT /Embedded Application(9)
네트워크 흐름도
client
OnNewPacketConnect()
server
connect
connect_ack
OnNewPacketConnectAck()
game start
OnNewPacketShoot()
shoot
shoot_ack
......
OnNewPacketClose()
close
game quit
Embedded System Lab. II
21
OnNewPacketShootAck()
QT /Embedded Application(10)
어플리케이션 프로젝트 생성
작성된 어플리케이션 폴더에서
프로젝트 파일생성
생성된 프로젝트 파일
*파일은 폴더명으로 생성됨
Embedded System Lab. II
22
QT /Embedded Application(11)
Makefile생성
생성된 Makefile
#qmake –spec /root/qt-embedded-free-3.3.4/mkspecs/qws/linux-ipag-g++
-o Makfile omol_arm.pro
qmake시 주어지는 옵션을 자세히 모를 경우 ‘$QTDIR/example’에 있는
예제 응용프로그램의 Makefile을 참고.
Makefile설정
생성된 Makefile의 컴파일러를 확인한다.
Gcc로 되어 있을경우 arm-linux-gcc로
변경한다.
Embedded System Lab. II
23
QT /Embedded Application(12)
컴파일
타겟보드에 QT라이브러리와 어플케이션 복사
타겟보드에서 QT app를 실행하기 위해 라이브러리를 복사
위 그림에서는 nfs로 연결해 호스트에 있는
어플리케이션과 라이브러리를 타겟으로
복사하고 있다.
Embedded System Lab. II
24
QT /Embedded Application(13)
타겟보드의 환경설정
타겟보드의 ~/.profile을 열어 host에서 복사된 QT라이브러리의 위치를 잡고,
터치스크린을 이용할수 있도록 마우스 프로토콜을 설정한다.
# source ~/.profile 하는 것을 잊지 않도록 한다.
라이브러리의 심볼릭을 해준다.
#cd /qte/lib
#ln –s libqte-mt.so.3.3.4 libqte-mt.so.3
심볼릭을 해주는 이유는 어플리케이션 실행 시 해당 이름의
라이브러리를 찾기 때문이다.
Embedded System Lab. II
25
QT /Embedded Application(14)
어플리케이션 실행
작성된 app가 네트워크 프로그램이므로 실행 전에 ip를 맞춰 준다.
타겟 1
타겟 2
이전까지의 어플리케이션 복사와 라이브러리 설치는 두 타겟
모두 동일하게 설치된다.
#ps
#kill -9 75
#./omok -qws
Embedded System Lab. II
타겟의 xwindow을
종료하고 app을 실행한다.
26
QT /Embedded Application(15)
실행화면1
키트 실행 화면
Embedded System Lab. II
27
QT /Embedded Application(16)
실행화면2
KIT 2개를 연결하여
게임을 실행 한 모습
Embedded System Lab. II
28