커뮤니티 | 큐티/임베디드/큐토피아 | PODO | SDL | 마이크로윈도우 | 리눅스프로그래밍 | 기타 | 포인트순위 | 최근게시물최근게시물 RSS  
korone.net에 다루었으면 하는것은요?
 
 
 
 
 
966
1,398
3,878
3,987,587
  현재접속자 : 98 (회원 0)






배너 신청 문의

 
작성일 : 15-03-31 10:39
[QT/Embedded] Qt 5.4.1 raspberry Pi 프로그램 개발하기
 글쓴이 : 구름님
조회 : 20,543   추천 : 1  
Qt 5.4.1을 가지고 작성한 프로그램을 raspberry Pi에서 돌리기 위한 작업을 했습니다. 음.. 꼬박 하루가 걸렸네요 ㅋㅋ
밑에 작성한 글은 나름대로 제가 설치 진행을 하면서 과정을 적어 놓은 것입니다. 그래서 반말 입니다. 양해를..
물론, 처음 하는 것이라 필요없는 부분도 있을 겁니다. 고수분들께서는 아낌없이 지식 공유하여 주시기 바랍니다~~

/*
    해당 사이트를 토대로 진행하여 보았다. <A HREF="http://www.ics.com/blog/building-qt-5-raspberry-pi" TARGET='_blank'>http://www.ics.com/blog/building-qt-5-raspberry-pi</A>;
    참조할만한 또다른 곳
      <A HREF="http://thebugfreeblog.blogspot.it/2012/11/bring-up-qt-50-on-raspberry-pi.html" TARGET='_blank'>http://thebugfreeblog.blogspot.it/2012/11/bring-up-qt-50-on-raspberry-pi.html</A>;
      <A HREF="http://qt-project.org/wiki/RaspberryPi_Beginners_guide" TARGET='_blank'>http://qt-project.org/wiki/RaspberryPi_Beginners_guide</A>;

    작성자 : 구름님
    작업PC : Ubuntu 14.04 - amd64 (cpu: i5, memory: 4G, HDD: 500G)
    라즈베리 : raspberry pi B+
    SD card : micro SD 8G
*/

******************************************************************************************
 준비하기
******************************************************************************************

1. qt-5.4.1 LGPL online install version
  - qt-project.org 에서 다운받아 설치
  - 당연히! Src도 설치해야한다

2. <A HREF="http://www.raspberrypi.org/downloads/" TARGET='_blank'>http://www.raspberrypi.org/downloads/</A>; 에서 RASPBIAN(Debian Wheezy) 다운로드
  - 2015-02-16-raspbian-wheezy.zip
  - unzip %1

3. gcc-4.7-linaro-rpi-gnueabihf.tbz
  - sourceforge 에서 다운로드
  - tar xfj %1

4. ia32-libs 설치 (참조 - <A HREF="http://blog.daum.net/_blog/BlogTypeView.do?blogid=0ZM8v&articleno=165&categoryId=0)" TARGET='_blank'>http://blog.daum.net/_blog/BlogTypeView.do?blogid=0ZM8v&articleno=165&categoryId=0)</A>;
  - sudo dpkg --add-architecture i386 && sudo apt-get update
  - sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32z1:i386 lib32ncurses5:i386 lib32bz2-1.0:i386
  (i386을 붙인 부분은 나중에 제거하고 다시 한번 만들어 봐야겠다.)

5. 편리한 스크립트 작성 - setdevenv.sh (반드시 필요한건 아니다)
#!/bin/sh
WORKINGDIRECTORY=$HOME/raspberry
TOOLCHAIN=gcc-4.7-linaro-rpi-gnueabihf
MOUNTPOINT=/mnt/raspberry-rootfs
export PATH=$PATH:$WORKINGDIRECTORY/$TOOLCHAIN/bin

6. sudo mkdir /mnt/raspberry-rootfs (일단 미리 만들어 놓자)

7. image 쓰기
  - lsblk -d (sd 카드의 device알아보기)
  - umount /dev/[sd카드의_디바이스]
  - sudo dd bs=4M if=[다운로드한_라즈베리이미지.img] of=/dev/[sd카드의_디바이스]
    (of=확실하게 하지 않으면 엉뚱한 디스크 날라가버리니 주의!)
  - 주의! 프로세스는 끝이났다고 하더라도 계속 writing중이니 access LED점멸이 끝나기 전까지 그대로 둘것!
    (LED 없다면.. 대략 5분정도 기다리라고 한다. 담배 한대의 여유를 또 준다 ㅡ.ㅡ;)

8. 쓰여진 sd카드를 가지고 raspberry로 부팅후 설정을 하고 ip도 알아보자

9. 작업PC에서 ssh pi@[8번의_ip] 로그인 후 default password인 'raspberry'로 원격 로그인을 해보자
    (pi에 ssh 서버가 이미 설치되어 있는가보다)
  - 'remote host identification has changed' 메시지가 뜨면 ssh-keygen -R [8번의_ip]를 해보고 진행하자

10. pi로 접속 후(당연히 인터넷 연결이 되어있어야 한다)
  1) pi$ sudo apt-get update
  2) pi$ sudo apt-get upgrade
  3) Qt5를 빌드하기 위한 -dev 기본 패키지들을 설치하자(작업PC에는 설치가 되어있나?? @.@)
    - pi$ sudo apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev
  4) QWebkit 빌드용
    - pi$ sudo apt-get install libicu-dev libsqlite3-dev libxslt1-dev libssl-dev
  5) Qt mutimedia 빌드용
    - pi$ sudo apt-get install libasound2-dev libavcodec-dev libavformat-dev libswscale-dev
      pi$ sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
      pi$ sudo apt-get install gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad

11. pi로 부터 sd카드 회수하여 이미지 만들기
    - pi$ sudo shutodwn -h now
      (먼저 깨끗하게 종료하란다. 스웝영역이나 그런데에 뭔가 내용이 남아있으면 이상하기 때문에 그런건가 싶다)
    - pi에서 sd 카드를 회수하여 다시 작업PC로 가져온다
    - sudo dd if=/dev/[sd카드의_디바이스] of=raspberry-working-image.img
      sd카드 이미지를 .img화일로 제작하자(일단 백업인가..?)

12. 쓰여진 이미지를 가지고 마운트를 해보자
  - sudo /sbin/losetup /dev/loop0 raspberry-working-image.img
  - sudo /sbin/fdisk -l /dev/loop0
    ... 뭐라뭐라 뜬다.
    /dev/loop0p2   122880   xxx   xxx  83  Linux  => 요거 확인
  - sudo /sbin/losetup -d /dev/loop0
  - 마운트 한다
    sudo mkdir /mnt/raspberry-rootfs (이미 만들었다. 그리고 offset=629114560 = 122880 * 512)
    sudo mount -o loop,offset=62914560 raspberry-working-image.img /mnt/raspberry-rootfs

13. cross 컴파일러를 위한 준비
  - git clone <A HREF="https://gitorious.org/cross-compile-tools/cross-compile-tools.git" TARGET='_blank'>https://gitorious.org/cross-compile-tools/cross-compile-tools.git</A>;
    (참조한 페이지에선 'git://gitorious...' -> 못찾겠다고 한다. git없으면 메세지 뜨는대로 sudo apt-get install git)
  - cd cross-compile-tools
  - sudo ./fixQualifiedLibraryPath /mnt/raspberry-rootfs \
      ~/raspberry/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
  - sudo ln -s \
        /mnt/raspberry-rootfs/opt/vc/include/interface/vmcs_host/linux/vchost_config.h \
        /mnt/raspberry-rootfs/opt/vc/include/interface/vmcs_host/vchost_config.h


******************************************************************************************
 Qt 빌드
******************************************************************************************
1.
  - cd [Qt소스Path]/qtbase
  - ./configure -release \
                -opensource \
                -confirm-license \
                -opengl es2 \
                -optimized-qmake \
                -no-pch \
                -make libs \
                -make tools \
                -reduce-relocations \ * 에러가 난다: 일단 제거, 대략 뜻은 '요청했으나 컴파일러가 지원하지 않는다..' 뭘 요청한건지;; *
                -reduce-exports \
                -sysroot /mnt/raspberry-rootfs \
                -device linux-rasp-pi-g++ \
                -device-option CROSS_COMPILE=~/raspberry/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- \
                -prefix /usr/local/Qt-5.4.1-raspberry
    * -reduce-relocations 옵션에서 에러가 발생했다. 제거하기 전에 아래 두줄 문장을 혹시 몰라 해주었다.
        sudo apt-get install build-essential autoconf automake libtool
           (우분투 14.04에서 build-essential은 기본적으로 설치 되는가보다.)
        sudo apt-get install lib32stdc++6
  - make
    * 에러 난다. 'libdl과 libm이 shared/static link 어쩌고..' 하면서 메세지를 토해낸다.
      configure에서 지정한 sysroot옵션을 보면, '/mnt/raspberry-rootfs'이다.
      '/mnt/raspberry-rootfs/usr/lib/arm-linux-gnueabihf'디렉토리의 libdl.so, libm.so의 링크가 깨져있다.
      왜냐하면 lib...로 되어있기 때문이다.
      ln -s mnt/raspberry-rootfs/lib... 으로 일단 바꾸어줘야겠다.
      오리지널 내용이 아래와 같다
        libdl.so -> /lib/arm-linux-gnueabihf/libdl.so.2
        libm.so -> /lib/arm-linux-gnueabihf/libm.so.6
      변경
        cd /mnt/raspberry-rootfs/usr/lib/arm-linux-gnueabihf
        sudo rm libdl.so libm.so
        sudo ln -s /mnt/raspberry-rootfs/lib/arm-linux-gnueabihf/libdl.so.2 libdl.so
        sudo ln -s /mnt/raspberry-rootfs/lib/arm-linux-gnueabihf/libm.so.6 libm.so
  - sudo make install
    * /mnt/raspberry-rootfs/usr/local(pi SD카드), /usr/local 두 곳에 Qt-5.4.1-raspberry 디렉토리가 생성됐다.
2. 기타 다른 모듈들(qtimageformats qtjsbackend qtsvg ... 필요한건 전부)
// 아래처럼 동작하는 쉘 스크립트를 작성해서 하라는데.. 에러나면 어쩌나 싶으니 하나씩 해보자!
$ cd [qt소스Path]
$ for module in qtimageformats qtsvg qtxmlpatterns qtdeclarative qtgraphicaleffects \
      qtmultimedia *qtquick1 qtscript *qtwebkit qserialport qtwebsockets; do
> cd ../$module
> /usr/local/Qt-5.4.1-raspberry/bin/qmake
> make
> sudo make install
> done

  - cd [qt소스Path]/qtimageformats
  - /usr/local/Qt-5.4.1-raspberry/bin/qmake
  - make
  - sudo make install

  ...
  * qtquick1 - make시 에러난다 -> qtscript까지 진행하고 다시 make하니 별 이상없이 빌드완료 -> sudo make install
  * qtwebkit - qmake시 몇가지 이유로 인해 안된다고 한다 - 최종적으로 제외 ;;
    sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
    make -> permission 에러 => sudo make => LLint*.h화일이 없다고 에러
 
3. libdl.so libm.so 심볼릭 링크 원상복귀
  cd /mnt/raspberry-rootfs/usr/lib/arm-linux-gnueabihf
  sudo rm libdl.so libm.so
  sudo ln -s /lib/arm-linux-gnueabihf/libdl.so.2 libdl.so
  sudo ln -s /lib/arm-linux-gnueabihf/libm.so.6 libm.so


******************************************************************************************
 테스트
******************************************************************************************

1. 이미지 새롭게 굽기
  - sync
  - sudo umount /mnt/raspbery-rootfs
  - sudo dd bs=4M if=raspberry-working-image.img of=/dev/[sd카드의_디바이스]

2. 새로운 이미지로 pi 부팅

3. 테스트
  - ssh pi@[ip주소]
  - pi$ cat > test.qml
    import QtQuick 2.0
    Rectangle {
      color: "lightgray"
      Text {
        text: "Hello world!"
        anchors.centerIn: parent
      }
    }
    ^D
    $pi /usr/local/Qt-5.4.1-raspberry/bin/qmlscene test.qml


******************************************************************************************
 Qt Creator 설정
******************************************************************************************

1. 준비 작업
  - sudo cp -r usr/local/Qt-5.4.1-raspberry/mkspecs /mnt/rasp-pi-rootfs/usr/local/Qt-5.4.1-raspberry/
    (처음에 따라하다보니 Kits 부분에서 '빨간느낌표'를 해결하지 못해서 이 작업을 수행했다.
     조금 혼란스러운 부분이 있어 꼭 필요한지에 대한 의문이 있다)
  - sudo mount -o loop,offset=62914560 raspberry-working-image.img /mnt/raspberry-rootfs
    ('Qt Versions'설정에서 '빨간느낌표' 뜬다. 최종적으로 만들어진 'raspberry-working-image.img'를
      *작.업.시. 마.다. 항.상. 마.운.트.* 를 하고 있어야 한다.)
   
2. raspberry pi 장치 등록 : Tools -> Options -> Devices
  - Type : Generic Linux Device 후 Wizard 실행
  - The name to identify this configuration : 원하는대로
  - The device's host name or IP address : pi의 ip입력
  - The username to log into the device : 'pi'(pi의 디폴트 사용자)
  - The authentication type: Password
  - The user's password : 'raspberry' ('pi'사용자의 디폴트 암호)

3. 컴파일러 등록 : Tools -> Options -> Build & Run -> Compilers 탭
  - Name : 원하는대로
  - Compiler Path : [어딘가에압축풀어놓은Path]/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++

4. 디버거 등록 : Tools -> Options -> Build & Run -> Debuggers 탭
  - Name : 원하는대로
  - Path : [어딘가에압축풀어놓은Path]/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gdb

5. Qt Versions : Tools -> Options -> Build & Run -> Qt Versions 탭
  - qmake location : /usr/local/Qt-5.4.1-raspberry/bin/qmake

6. Kits 등록 : Tools -> Options -> Build & Run -> Kits 탭
  - Device type: Generic Linux Device
  - Device : 2번 항목
  - Sysroot : /mnt/raspberry-rootfs
  - Compiler : 3번 항목
  - Debugger : 4번 항목
  - Qt version : 5번 항목

/*
  끝.
*/

이렇게 해서 예제 프로그램 'maroon'을 열고 데스크탑과 라즈베리용으로 빌드하고 실행해 보았습니다.
잘 되기는 하는데.. '디바이스' 등록을 해놓고 원격으로 실행을 시키는 법을 몰라서;;
하여간, 이상! 입니다.



devilqoo 15-03-31 10:45
 
좋은 글에는 언제나 추천.
임베디드 경험이 별로 없는데 나중에 라즈베리파이 사면 큰 도움이 될 것 같네요. ^^
비행소… 15-04-01 13:53
 
http://cafe.naver.com/openrt/5564

raspbian 에서 Qt 빌드 없이 사용하는 방법 입니다.
     
구름님 15-04-01 17:54
 
이제 막 발 디딘 사람에게는 벅차요 ㅋㅋ. 글치만 글은 제대로 읽어 보았습니다. 언젠가 소화시킬 수 있는 날이 오겠죠 ^^
근데.. 라즈베리용에 설치한 Qt 버전이 4.8 이네요..
라즈베리가 OpenGL ES 2.0이 지원된다고 하기에 qml 작성시 declarative가 아닌 quick을 써보고 싶어서 좀 무리해 봤습니다.
          
비행소… 15-04-06 18:07
 
디바이스 등록과 실행, 디버깅까지 하는 방법도 함께있어요.
          
빵돈이 16-04-01 12:40
 
QT quick라는 놈이 뭔지요? 예전 QT designer 처럼 GUI 드로잉 툴인가요?
QT quick으로 GUI를 그리면 이걸 이용해서  qml 파일을 만들수 있는 것인지요?
 
 

Total 198
번호 제   목 글쓴이 날짜 조회 추천
198 [QT/Win32] MFC에서 Qt 사용하기 팁. (3) devilqoo 09-10 3217 0
197 [QT/X11] QML 모델을 C++ 코드로 구현하는 방법 중 하나 (1) 구름님 12-03 4911 0
196 [QT/X11] QWT for qt android (1) 구름님 03-07 6406 1
195 [QT/Embedded] QTcpSocket사용 시 플러그 뽑힘 증상 체크 방법 요원009 11-13 10476 0
194 [QT/Win32] QML 에서 CustomModule 을 import 하여 사용하기 tmdwn 05-18 6032 0
193 [QT/Embedded] Qt update함수/repaint함수 사용법좀 알려주세여.. (1) 잉농 05-14 5833 0
192 [QT/Embedded] C++ Exception을 활용한 런타임 콜스택 정보 얻기 (1) korone 04-01 6166 0
191 [QT/Embedded] Qt 5.4.1 raspberry Pi 프로그램 개발하기 (5) 구름님 03-31 20544 1
190 [QT/Win32] Qt 다국어 처리 (2) korone 03-17 12277 0
189 [QT/Win32] signal to signal devilqoo 02-13 5458 0
188 [QT/Win32] Qt x64 바이너리 제공 사이트 (1) 인라이… 02-12 5418 1
187 [QT/Embedded] 우분투 Qt5 크로스 컴파일 (14/11/26 2차 수정) (9) 김아무… 11-12 15275 0
186 [QT/Embedded] Qt 5.3.2에서 Mouse Double Click시 이벤트 문제 (2) korone 11-11 5475 0
185 [QT/Embedded] QtWinExtras korone 11-11 5512 0
184 [QT/Win32] Qt 코딩 스타일 (편집 편) (4) devilqoo 10-22 9957 0
183 [QT/Win32] Qt와 C++11 (2) devilqoo 10-12 10333 1
182 [QT/Win32] Qt 에서의 이벤트 처리 (5) devilqoo 10-09 9792 0
181 [QT/Win32] QList와 QVector의 비교. (2) devilqoo 10-02 7100 0
180 [QT/Win32] Qt에서 사용되는 컨테이너들을 정리해 보았습… (4) devilqoo 10-01 8021 0
179 [QT/X11] qmake DEFINES 변수에 공백문자가 포함된 값을 설… (1) 별님 09-25 5094 0
178 [QT/Win32] 데이터 압축 관련 qCompress(), qUncompress() (9) 구름님 09-16 5678 0
177 [QT/Win32] QML 로 One-Source Multi-Platform (iOS, Android) 실행 tmdwn 09-03 7157 0
176 [QT/Win32] QML 로 iOS Application 제작하기 tmdwn 09-02 7128 0
175 [QT/Win32] QML 로 Android Application 제작하기 (4) tmdwn 09-02 7576 2
174 [QT/X11] qt에서 메모리 조작하기. (2) 나무나… 07-25 7897 0
173 [QT/Win32] Q_DECLARE_FLAGS 매크로 (2) 구름님 07-11 6399 2
172 [QT/Win32] Q_PROPERTY 매크로 (6) 구름님 07-09 8773 2
171 [QT/Win32] Q_INTERFACE 매크로에 대해.. (4) 구름님 07-08 6204 2
170 [QT/Win32] windeployqt.exe라는 프로그램이 있습니다. (4) 구름님 07-07 12358 1
169 [QT/X11] Qt App을 Mac Appstore에 올리기 (3) korone 07-02 7792 0
 1  2  3  4  5  6  7  


About korone.net | Copyright 2003 korone.net. All rights reserved.