qt embedded n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
QT /Embedded 와 웹 서버 PowerPoint Presentation
Download Presentation
QT /Embedded 와 웹 서버

Loading in 2 Seconds...

play fullscreen
1 / 35

QT /Embedded 와 웹 서버 - PowerPoint PPT Presentation


  • 400 Views
  • Uploaded on

QT /Embedded 와 웹 서버. Qt/Embedded 개요 Qt/Embedded 개발 환경 구축 Qt/Embedded 실행 환경 구축 및 테스트 임베디드 웹 서버 임베디드 웹 서버 응용. Qt/Embedded 개요. 임베디드 리눅스에서 많이 쓰는 GUI 프로그래밍 도구 TinyX, GTK, C SDL, C/C++ Qt/Embedded Qt/Embedded 의 특징 원시 코드가 공개되어 쉽게 수정해 사용 가능 많은 이미지 형식을 지원하지만 메모리 효율이 좋음

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'QT /Embedded 와 웹 서버' - william-mason


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
qt embedded

QT/Embedded와 웹 서버

Qt/Embedded 개요

Qt/Embedded 개발 환경 구축

Qt/Embedded 실행 환경 구축 및 테스트

임베디드 웹 서버

임베디드 웹 서버 응용

slide2

Qt/Embedded 개요

  • 임베디드 리눅스에서 많이 쓰는 GUI 프로그래밍 도구
    • TinyX, GTK, C
    • SDL, C/C++
    • Qt/Embedded
  • Qt/Embedded의 특징
    • 원시 코드가 공개되어 쉽게 수정해 사용 가능
    • 많은 이미지 형식을 지원하지만 메모리 효율이 좋음
    • i386, ARM, MIPS, PowerPC 등 다양한 플랫폼 지원
    • Qt 기반의 코드와 호환성이 양호하고 쉽게 변환 가능
    • 프레임 버퍼를 직접 접근할 수 있고 가속 드라이버를 사용해 성능을 개선 가능
    • 다수의 응용 프로그램을 동시에 실행 가능
    • 다국적 언어 및 유니 코드 지원
    • 풍부한 API 제공
    • 시그널/슬롯 구조 채택
slide3

Qt/Embedded 개요

  • 개발 환경 구축을 위해 Qt/Embedded, QVFB, UIC 를호스트 시스템에 설치
  • QVFB(Qt Virtual Frame Buffer)
    • X 윈도우에서 프레임 버퍼를 구현해주는 기능
    • 임베디드시스템 환경에서 비디오 카드와는 독립적인 프레임 버퍼를 사용
    • X 윈도우와 콘솔 상의 화면을 전환할 필요가 없고 화면 갈무리, 화면 확대 및 축소 등도 가능
  • UIC(User Interface Compiler)
    • Qt 설계자에 의해 XML로 생성된 사용자 인터페이스 정의를 읽어서 C++ 헤더나 소스 파일들을 생성하는 도구
slide4

Qt/Embedded 개요

  • 강의홈페이지에서 다운로드할 파일
    • Qt/Embedded: qt-embedded-free-3.3.3.tr.bz2
    • Qt 라이브러리: qt_lib.zip
    • Qt 도구(qvfb, uic): source1.tar
slide5

실습 Qt/Embedded 환경 설정

  • 다운로드받은 파일의 압축을 풀고 경로를 재설정, 터치 스크린을 인식하도록 관련 파일을 수정
slide6

실습 Qt/Embedded 환경 설정

  • ⑥ #gedit ~/.bash_profile
  • ⑧ #gedit src/embedded/qmouselinuxtp_qws.cpp
slide7

실습 Qt/Embedded 환경 설정

  • Makefile 수정. 컴파일 시간이 많이 소요되는 부분 제거
  • configure 명령을 사용해 ARM용으로 환경을 설정

slide8

실습 Qt/Embedded 환경 설정

  • 환경 설정을 진행하면서 메시지 출력을 관찰
  • 정상적으로 환경 설정이 끝난 것을 확인

slide9

실습 Qt/Embedded 라이브러리와 도구 설치

  • 라이브러리 압축 파일(qt_lib.zip)을 사용해 libstdc++.so를 심볼릭 링크하고 복사
slide10

실습 Qt/Embedded 라이브러리와 도구 설치

  • QVFB와 UIC 도구를 사용할 수 있도록 Qt/Embedded의 bin 디렉토리에 설치
slide11

실습 Qt/Embedded 라이브러리와 도구 설치

  • Qt/Embedded의 홈 디렉토리로 이동한 후 Make 유틸리티를 사용해 컴파일
  • 컴파일 결과
slide12

실습 Qt/Embedded 라이브러리와 도구 설치

  • 정상적으로 컴파일되었는지 확인
slide13

실습 NFS를 이용한 Qt/Embedded실행 환경의 타겟 시스템 탑재

  • 호스트 시스템에서 생성한 Qt/Embedded 자원을 NFS 마운트 디렉토리 /mnt/nfs_host로 복사
slide14

실습 NFS를 이용한 Qt/Embedded실행 환경의 타겟 시스템 탑재

  • NFS 마운트 디렉토리 공유 설정 파일인 /etc/exports 파일이다음 내용을 포함하도록편집
    • /mnt/nfs_host 192.168.233.200(rw,sync,no_root_squash)
  • 호스트 시스템에 NFS 데몬을 재실행
slide15

실습 NFS를 이용한 Qt/Embedded실행 환경의 타겟 시스템 탑재

  • 타겟 시스템에 마운트하고, Qt 라이브러리를 위한 심볼릭 링크를 생성
slide16
Qt/Embedded 응용 프로그램(main.cpp)

11 #include "hello.h"

12 #include <qapplication.h>

……

20 int main( int argc, char **argv )

21 {

22 QApplication a(argc,argv);

23 QString s;

24 for ( int i=1; i<argc; i++ ) {

25 s += argv[i];

26 if ( i<argc-1 )

27 s += " ";

28 }

29 if ( s.isEmpty() )

30 s = "Hello, World";

31 Hello h( s );

……

35 QObject::connect( &h, SIGNAL(clicked()), &a, SLOT(quit()) );

36 h.setFont( QFont("times",32,QFont::Bold) ); // default font

37 h.setBackgroundColor( Qt::white ); // default bg color

38 a.setMainWidget( &h );

39 h.show();

40 return a.exec();

41 }

slide17
Qt/Embedded 응용 프로그램(hello.cpp)

10 #include "hello.h"

……

20 Hello::Hello( const char *text, QWidget *parent, const char *name )

21 : QWidget(parent,name), t(text), b(0)

22 {

23 QTimer *timer = new QTimer(this);

24 connect( timer, SIGNAL(timeout()), SLOT(animate()) );

25 timer->start( 40 );

26

27 resize( 260, 130 );

28 }

……

35 void Hello::animate()

36 {

37 b = (b + 1) & 15;

38 repaint( FALSE );

39 }

……

48 void Hello::mouseReleaseEvent( QMouseEvent *e )

49 {

50 if ( rect().contains( e->pos() ) )

51 emit clicked();

52 }

……

61 void Hello::paintEvent( QPaintEvent * )

62 {

63 static int sin_tbl[16] = {

64 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38};

65

66 if ( t.isEmpty() )

67 return;

68

slide18

Qt/Embedded 응용 프로그램(hello.cpp)

69 // 1: Compute some sizes, positions etc.

70 QFontMetrics fm = fontMetrics();

71 int w = fm.width(t) + 20;

72 int h = fm.height() * 2;

73 int pmx = width()/2 - w/2;

74 int pmy = height()/2 - h/2;

75

76 // 2: Create the pixmap and fill it with the widget's background

77 QPixmap pm( w, h );

78 pm.fill( this, pmx, pmy );

79

80 // 3: Paint the pixmap. Cool wave effect

81 QPainter p;

82 int x = 10;

83 int y = h/2 + fm.descent();

84 int i = 0;

85 p.begin( &pm );

86 p.setFont( font() );

87 while ( !t[i].isNull() ) {

88 int i16 = (b+i) & 15;

89 p.setPen( QColor((15-i16)*16,255,255,QColor::Hsv) );

90 p.drawText( x, y-sin_tbl[i16]*h/800, t.mid(i,1), 1 );

91 x += fm.width( t[i] );

92 i++;

93 }

94 p.end();

95

96 // 4: Copy the pixmap to the Hello widget

97 bitBlt( this, pmx, pmy, &pm );

98 }

slide19

실습 Hello 응용 프로그램의 컴파일

  • 호스트 시스템에서 Hello 프로그램을 컴파일하고 NFS 마운트 디렉토리로 복사
slide21

실습 타겟 시스템에서 Hello 응용 프로그램 실행

  • 타겟 시스템에서 실행 중인 X-Server를 종료
  • 타겟 시스템의 Qt/Embedded와 관련된 환경 변수를 설정하고 hello 파일을 실행
slide22

Qt/Embedded 웹서버

  • 임베디드시스템용 웹 서버의 특징
    • 웹 서버 수행 파일의 크기가 매우 작아야 함(수십~수백 KB)
    • 시스템의 성능을 저하를 막기 위해 힙 메모리의 사용을 최소화
    • 정적 웹 페이지는 압축되어 저장되어 있다가 클라이언트의 요구가 있을 때 압축을 풀어서 제공
    • 표준화된 인터페이스로 쉬운 이식성
    • 인터넷을 통해 시스템을 관리할 수 있는 기능
slide23

Qt/Embedded 웹서버

  • GoAhead 웹 서버
    • 크기가 적으면서도 다양한 기능을 제공
    • 컴파일하기 쉽고, 사용이 단순
    • 실행 파일의 용량이 적어 임베디드시스템에 적합
    • 사건 타이머(event timer)와 TCP/IP 스택 필요
    • ASP, CGI, 임베디드 자바 스크립트를 지원
    • HTTP 1.0 프로토콜을 사용
    • 보안을 위해서 SSL(Secure Socket Layer) v3.0, DAA(Digest Access Authentication)를 지원
    • 리눅스, 윈도우 CE, VxWorks, QNX, eCOS 등 다양한 운영체제에서 동작
    • 무료
slide24

실습 GoAhead 웹 서버 컴파일 및 설치

  • 다운로드받은 파일의 압축을 풀고 경로를 재설정. 관련 파일을 수정
slide26

실습 GoAhead 웹 서버 컴파일 및 설치

  • 컴파일 결과 확인
  • web 디렉토리를 tar 명령을 사용해 하나의 파일로 압축

slide27

실습 GoAhead 웹 서버 컴파일 및 설치

  • 컴파일된 웹 서버 webs와 web.tgz를 타겟 시스템으로 전송
  • 타겟 시스템에서 web.tgz 파일의 압축을 풀고 웹 서버를 실행
slide28

실습 GoAhead 웹 서버 컴파일 및 설치

  • 호스트 시스템의 Firefox 웹 브라우저를 사용해 타겟 시스템의 웹 서버에 접속.→http://192.168.233.200/home.asp를 입력해 웹 서버가 작동되는지 확인
slide29

Qt/Embedded 웹서버 응용

  • 웹 브라우저를 사용해 임베디드시스템 내의 각종 디바이스 제어 가능
  • 웹을 이용하여 타겟 시스템의 FND 디바이스에 숫자를 표시 하기 위해 필요한 프로그램
    • 11장에서 작성한 FND 디바이스 드라이버
    • 웹 페이지를 표시하기 위한 HTML 문서
    • 동적 웹 문서 전달을 위한 CGI(Common Gateway Interface) 프로그램.
slide30

실습 FND 제어용 HTML 문서 작성(fnd.htm)

01 <html>

02 <head><title>Web Server Application</title></head>

03 <body>

04 <H1>Web Server Application</H1>

05

06 <form method="GET" action="cgi-bin/fnd">

07 Enter a 8-digit number:

08 <input name="send_number" maxlength="8" type="text" size="20">

09 <input type="submit" value="SEND">

10 </form>

11 <br>

12 Then see the FND device on the taget system.

13 <br>

14 </body>

15 </html>

slide31

실습 FND 디바이스 제어용 CGI 프로그램 작성(fnd.c)

016 #include <stdio.h>

……

025 static char fndDev[] = "/dev/FND";

026 static int fndFd = (-1);

027

028 asc2fnd(char *s, long n)

029 {

030 char c;

031 int l;

032 while (n > 0) {

033 l = n % 10;

034 switch (l) {

035 case 0: c = 0x3f; break;

……

046 }

047 *s++ = c;

048 n = n/10;

049 }

050 }

051

052 int send_number_FND(long av)

053 {

054 int n;

055 char buf[MAXFND+1];

056

057 fndFd = open( fndDev, O_RDWR);

058 if (fndFd < 0) {

059 fprintf(stderr, "cannot open FND (%d)", fndFd);

060 exit(2);

061 }

062 memset(buf, 0, sizeof(buf));

063

064 asc2fnd(buf, av);

065 write(fndFd, buf, MAXFND);

066 return 0;

067 }

……

slide32

실습 FND 디바이스 제어용 CGI 프로그램 작성(fnd.c)

073 int main(int argc, char *argv[])

074 {

075 char *cgiinput ;

076 long send_number;

……

082 printf("Content-type:text/html;charset=iso-8859-1%c%c\n\n",13,10) ;

……

086 printf("<html>\n");

087 printf("<head><title>Web Server Application</title></head>\n");

088 printf("<body>\n");

089 printf("<H1>Web Server Application</H1>\n");

090

091 cgiinput= getenv("QUERY_STRING");

092 if(cgiinput == NULL)

093 printf("<P>Error in passing data from form to script.");

094 else if(sscanf(cgiinput, "send_number=%ld", &send_number)!=1)

095 printf("<P>Invalid data. Data must be numeric.");

096 else

097 send_number_FND(send_number);

098

099 printf("<center> Check the FND, [%ld] is displayed</center>\n", send_number);

100 printf("</body>\n");

101 printf("</html>\n");

102

103 return 0;

104 }

slide33

실습 웹 페이지 및 CGI 프로그램 작성

  • 작성한 프로그램을 ARM용으로 컴파일
  • fnd.htm 문서와 fnd 파일을 타겟 시스템으로 전송
  • 11장에서 빌드한 FND 디바이스 드라이버 fnd.ko를 타겟 시스템으로 전송
slide34

실습 웹 페이지 및 CGI 프로그램 작성

  • 다운로드받은 파일의 재배치, 디바이스 드라이버의 재적재, 웹 서버 실행 등을 수행
slide35

실습 웹 페이지 및 CGI 프로그램 작성

  • Firefox를 가동→http://192.168.233.200/cgi.htm으로 접속→FND로 출력할 숫자를 입력 후<SEND> 버튼 클릭
  • 타겟 시스템의FND에서 입력한 숫자를 관찰. 호스트 시스템의 웹 브라우저에서FND에 입력한 숫자 확인