28
Embedded System Lab. II GUI Programming in Embedded Linux GUI Programming in Embedded Linux 경경경경경 경경경경경경 경 경 경

GUI Programming in Embedded Linux

  • 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

Page 1: GUI Programming in Embedded Linux

Embedded System Lab. II

GUI Programming in Embedded GUI Programming in Embedded LinuxLinux

경희대학교 컴퓨터공학과

조 진 성

Page 2: GUI Programming in Embedded Linux

Embedded System Lab. II 2

주요 내용

주요내용 임베디드 시스템에 사용 가능한 GUI 이해 임베디드 시스템에서의 네트워크 프로그래밍 이해 간단한 1:1 오목게임 구현

Page 3: GUI Programming in Embedded Linux

Embedded System Lab. II 3

Qt 소개

QT 는 trolltech 에서 개발하고 배포하는 cross 플랫폼 GUI 라이브러리 QT 를 이용해서 만들어진 코드는 ( 약간만 신경 써준다면 ), 윈도우 , Mac,

Linux, *nix 에 관계없이 컴파일 해서 사용 가능 C++ 을 이용해서 완전히 객체지향적으로 작성되었다는 것도 큰 장점 Qt 는 유닉스와 X11 시스템을 위한 C++ 라이브러리이자 GUI 툴킷이다 . 유닉스 운영체제 ( 리눅스 , 솔라리스 포함 ) 를 위한 프리 소프트웨어를

개발한다면 라이센스 비용이 들지 않는다 . Qt 를 이용한 프로그램은 속도가 매우 빠르다 .

Page 4: GUI Programming in Embedded Linux

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 -> 필요 )

Page 5: GUI Programming in Embedded Linux

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

Page 6: GUI Programming in Embedded Linux

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 를 입력

Page 7: GUI Programming in Embedded Linux

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

Page 8: GUI Programming in Embedded Linux

Embedded System Lab. II 8

QT /Embedded 설치 및 환경 설정 (4)

컴파일 (host)

컴파일이 성공적으로 끝났으면 QT/Embedded 라이브러리를 확인

# cd $QTDIR# make

ARM 용으로 컴파일 된 library 을 볼 수 있다 .

Page 9: GUI Programming in Embedded Linux

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 // 설정 적용

Page 10: GUI Programming in Embedded Linux

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 적용심볼릭

Page 11: GUI Programming in Embedded Linux

Embedded System Lab. II 11

QT /Embedded 설치 및 환경 설정 (7)

예제프로그램 테스트

Host 쪽의 Qt/Embedded 의 샘플 프로그램을 컴파일한다 .

Qt 프로그램을 실행하기 위해서는 Xindow 종료시켜야한다 .따라서 , ps 로 xwindow 를 확인한후 ‘kill -9 75’ 를 실행하여 xwindow 를 종료시킨다 .

Page 12: GUI Programming in Embedded Linux

Embedded System Lab. II 12

QT /Embedded 설치 및 환경 설정 (8)

응용프로그램을 다운로드후 실행 (target)

# ./hello –qws // 응용프로그램 실행

프로그램 다운로드 과정 생략

X 프로세스를 죽인 후 실행시키면 터치 스크린의 초록바탕에 실행 되는 것을 확인 할 수 있다 .

Page 13: GUI Programming in Embedded Linux

Embedded System Lab. II 13

QT /Embedded Application(1)

어플리케이션 개요 임베디드 키트상에서 Qt/E 를 이용하여 간단한 1:1 네트워크 게임 실행 간단한 리눅스 용 프로그램을 임베디드 키트상에 올려봄으로써 임베디드

기기와 리눅스에 대한 이해

Page 14: GUI Programming in Embedded Linux

Embedded System Lab. II 14

QT /Embedded Application(2)

어플리케이션 인터페이스 - 메인화면

오목판

턴 알림

로고

검은 돌 / 하얀 돌놓은 개수 표시

메뉴 버튼 ( 좌부터 ). Connect. Disconnect. IP information

Page 15: GUI Programming in Embedded Linux

Embedded System Lab. II 15

QT /Embedded Application(3)

어플리케이션 인터페이스 – 네트워크 연결

IP 주소 입력

1. Connect 버튼 클릭

Port 번호 입력

2. 터치 패드로 입력 3. OK 버튼 클릭

IP number 알림 창

Page 16: GUI Programming in Embedded Linux

Embedded System Lab. II 16

QT /Embedded Application(4)

어플리케이션 상속도

CSockIo :

소켓통신 (UDP 이용 ) 관련 클래스CConnectDlg :

접속대화상자 관련 클래스CGameBoard :

오목게임 메인 클래스MainWindow :

MainWindow 폼 클래스

Page 17: GUI Programming in Embedded Linux

Embedded System Lab. II 17

QT /Embedded Application(5)

어플리케이션 흐름도

Server

네트워크 연결

Start ok

턴 방식 Client First

네트워크 종료

게임 종료

StartClient

Game 패킷 Game 패킷

게임적용 게임적용

Page 18: GUI Programming in Embedded Linux

Embedded System Lab. II 18

QT /Embedded Application(6)

어플리케이션 알고리즘 게임보드는 14*14 크기의 2 차원 배열을 적용하여 배열상에서 흰돌과

검은돌을 넣고 뺄 수 있도록 한다 . 오목게임의 룰을 적용하여 연속으로 5 개의 같은 돌이 놓였을 경우 게임이

끝나게 된다 . 돌을 놓을 경우 첫 번째 배열 부터 Vertical, Horizontal, LeftDown, RightDown 체크를 하여 연속된 돌이 5 개 있는지 체크한다 . 오목판에 돌이 다 차면 비기고 새 게임이 시작 된다

Page 19: GUI Programming in Embedded Linux

Embedded System Lab. II 19

QT /Embedded Application(7)

네트워크 부분 턴 방식의 게임 진행을 한다 . 하나의 프로그램에서 서버 / 클라이언트의 역할을 동시에 하고 , 접속을 하는 쪽이

클라이언트가 된다 . 항상 클라이언트부터 게임을 시작한다 . 한 게임이 끝나면 진 사람부터 다시 게임을 시작한다 .

네트워크 구성클라이언트

Client

socket

서버

Client

socketudp packet

Page 20: GUI Programming in Embedded Linux

Embedded System Lab. II 20

QT /Embedded Application(8)

네트워크 프로토콜

messagecommand x y

COMMAND

CONNECT 접속요청

CONNECT_ACK 접속에 대한 응답

CLOSE 게임종료

SHOOT 돌 놓기

SHOOT_ACK 돌 놓기 응답

MESSAGE 사용 안 함

Page 21: GUI Programming in Embedded Linux

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

Page 22: GUI Programming in Embedded Linux

Embedded System Lab. II 22

QT /Embedded Application(10)

어플리케이션 프로젝트 생성

작성된 어플리케이션 폴더에서프로젝트 파일생성

생성된 프로젝트 파일* 파일은 폴더명으로 생성됨

Page 23: GUI Programming in Embedded Linux

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 로변경한다 .

Page 24: GUI Programming in Embedded Linux

Embedded System Lab. II 24

QT /Embedded Application(12)

컴파일

타겟보드에 QT 라이브러리와 어플케이션 복사 타겟보드에서 QT app 를 실행하기 위해 라이브러리를 복사

위 그림에서는 nfs 로 연결해 호스트에 있는 어플리케이션과 라이브러리를 타겟으로복사하고 있다 .

Page 25: GUI Programming in Embedded Linux

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 하는 것을 잊지 않도록 한다 .

심볼릭을 해주는 이유는 어플리케이션 실행 시 해당 이름의 라이브러리를 찾기 때문이다 .

Page 26: GUI Programming in Embedded Linux

Embedded System Lab. II 26

QT /Embedded Application(14)

어플리케이션 실행 작성된 app 가 네트워크 프로그램이므로 실행 전에 ip 를 맞춰 준다 .

타겟 1

타겟 2

이전까지의 어플리케이션 복사와 라이브러리 설치는 두 타겟 모두 동일하게 설치된다 .

#ps#kill -9 75#./omok -qws

타겟의 xwindow 을 종료하고 app 을 실행한다 .

Page 27: GUI Programming in Embedded Linux

Embedded System Lab. II 27

QT /Embedded Application(15)

실행화면 1

키트 실행 화면

Page 28: GUI Programming in Embedded Linux

Embedded System Lab. II 28

QT /Embedded Application(16)

실행화면 2

KIT 2 개를 연결하여게임을 실행 한 모습