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