본문 바로가기

Raspbegrry Pi/Model 3B

RaspberryPi3 ModelB + Qt5.6.2 Cross Compile

 

목차 

1.Ubuntu18.04.4 / Raspbian-stretch 다운로드

2.VMWare에 우분투 설치

3.라즈베리파이3  Raspbian 설치

4.IN RaspberryPi (라즈베리파이 설정)

5.IN Your Computer (Ununtu18.04) (PC설정)

 

#개발환경

  -Ubuntu18.04.4 – 64bit

  -라즈베리파이3 Model B

  -Qt 5.6.2

  -raspbian-stretch(2018-10-09)

 

1. Ubuntu18.04.4 / Raspbian-stretch 다운로드

  https://ubuntu.com/download/desktop

 

Download Ubuntu Desktop | Download | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

http://downloads.raspberrypi.org/raspbian/images/raspbian-2018-10-11/

 

Index of /raspbian/images/raspbian-2018-10-11

 

downloads.raspberrypi.org

 

2. VMWare에 우분투 설치

 

2.1 Create a New Virtual Machine 클릭

2.2 Create a New Virtual Machine 클릭

2.3 우분투 설치 파일 선택

2.4 Next 클릭

 

 

 

 

 

2.5 각 항목 입력 후 Next

2.6 Next

2.7 디스크 사이즈 선택 후 Next

 

 

 

2.8 Costumize Hardware 클릭

2.9 Memory 4GB 변경 (사용자 옵션)

2.10 Processor cores : 4 로 변경 (사용자 옵션)

2.11 Next 클릭

2.12 Finish 클릭

2.13 완료

 

 

 

 

 

3. 라즈베리파이3 ß Raspbian 설치

3.1 Win32 Disk Imager 실행

3.2 라즈비안 img 불러오기

3.3 Write 클릭

3.4 완료

 

 

 

4. IN RaspberryPi

 4.1라즈베리파이 업데이트 진행

~$ sudo rpi-update (라즈베리파이 FW 업데이트)
~$ sudo reboot

★업데이트를 안 하면 /usr/lib/arm-linux-gnueabihf 내의 libEGL.so 및 libGLESv2.so 파일이 생성되지 않음(반드시 해야함)

업데이트 후 해당 내용 확인

 

4.2 필수 라이브러리 설치

~$ sudo nano /etc/apt/sources.list

- 해당 파일에서 deb-src 라인의 주석을 해제하고, 다음을 진행한다.

~$ sudo apt-get update
~$ sudo apt-get build-dep qt4-x11
~$ sudo apt-get build-dep libqt5gui5
~$ sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0

 

4.3 배포 라이브러리를 설치할 폴더 생성

~$ sudo mkdir /usr/local/qt5pi
~$ sudo chown pi:pi /usr/local/qt5pi

-폴더 생성하고 소유권 변경

-이 폴더에 PC에서 빌드한 Qt 라이브러리들을 복사 예정

 

 4.4 라즈베리파이 라이브러리 수정

~$ sudo mv /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup
~$ sudo mv /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup
~$ sudo ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
~$ sudo ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
~$ sudo ln -s /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so
~$ sudo ln -s /opt/vc/lib/libbrcmGLESv2.so /opt/vc/lib/libGLESv2.so
~$ sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1
~$ sudo ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2

 

4.5 SSH 설정

~$ sudo raspi-config

-Interfacing Options

 

-SSH 선택 후 엔터

 

 

Yes 선택 후 엔터 -> SSH Enable 완료

 

 

4.6 SSH권한 설정 (sshd_config 수정)

~$ sudo nano /etc/ssh/sshd_config

   

PermitRootLogin yes   

 

4.7 재부팅

~$ sudo reboot

 

Raspberry Pi 3 설정 완료 

 

 

5. IN Your Computer (Ununtu18.04)

5.1 초기 설정

패키지 인덱스 정보 업데이트 : apt-get은 인덱스를 가지고 있는데 이 인덱스는 /etc/apt/sources.list 에서 사용할 패키지의 정보를 얻는다.

~$ sudo apt-get update

설치된 패키지 업그레이드 : 설치되어 있는 패키지를 모두 새 버전으로 업그레이드함.

~$ sudo apt-get upgrade

 

5.2 작업 폴더 생성 / 툴체인 설치

~$ sudo apt install git       (git설치)
~$ mkdir ~/raspi
~$ cd ~/raspi
~$ git clone https://github.com/raspberrypi/tools
 

raspberrypi/tools

Contribute to raspberrypi/tools development by creating an account on GitHub.

github.com

5.3 sysroot 폴더 생성 / 동기화

~$ mkdir sysroot sysroot/usr sysroot/opt

-컴파일러가 헤더 및 라이브러리를 찾는 폴더

 

- 라즈베리파이의 /lib 폴더를 -> PC의 sysroot 폴더에 복사

- 라즈베리파이의 /usr/include 폴더를 -> PC의 sysroot/usr                   폴더에 복사

- 라즈베리파이의 /usr/lib 폴더를 -> PC의 sysroot/usr 폴더에 복사

- 라즈베리파이의 /opt/vc 폴더를 -> PC의 sysroot/opt 폴더에 복사

~$ rsync -avz pi@raspberrypi_ip:/lib sysroot
~$ rsync -avz pi@raspberrypi_ip:/usr/include sysroot/usr
~$ rsync -avz pi@raspberrypi_ip:/usr/lib sysroot/usr
~$ rsync -avz pi@raspberrypi_ip:/opt/vc sysroot/opt

 rsync 는 동기화를 통해서 간편하게 보드와 PC간 파일을 주고받을 수 있도록 하는 기능, SD카드 뽑아서 직접 파일 옮겨도 됨.

 

5.4 심볼릭 링크 상대 조정

( RaspberryPi<->Ubuntu 원본 파일의 위치 정보를 가리키는 파일, 원본 파일이 수정되거나 삭제될 경우 심볼릭 파일도 수정되거나 삭제된다.)

~$ wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
~$ chmod +x sysroot-relativelinks.py
~$ ./sysroot-relativelinks.py sysroot

 

5.5 Qt 설치

~$ cd ~/raspi
~$ wget http://linorg.usp.br/Qt/archive/qt/5.6/5.6.2/single/qt-everywhere-opensource-src-5.6.2.tar.gz
~$ tar xvf qt-everywhere-opensource-src-5.6.2.tar.gz

 linux-arm-gnueabi-g++를 linux-arm-gnueabihf-g++이름으로 복사.

 

~$ sudo cp -R qt-everywhere-opensource-src-5.6.2/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-opensource-src-5.6.2/qtbase/mkspecs/linux-arm-gnueabihf-g++

 qmake.conf에 있는 arm-linux-gnueabi- 문자열을 arm-linux-gnueabihf-로 변경.

 

~$ sudo sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-opensource-src-5.6.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf

 

 

5.6 Qt 빌드

~$ cd qt-everywhere-opensource-src-5.6.2
~$ ./configure -release -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -skip qtdeclarative -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm

 

 

EGLFS, EGLFS Raspberry Pi ----- yes 인지 확인

 

 

(./qtbase/mkspecs/devices 를 참고)

Qt 5.6.2는 라즈베리파이 3이지만 –device linux-rpi-g++

옵션으로 입력.

-skip 인수를 사용하여 문제가 있거나 시간이 많이 걸리는 모듈의 컴파일을 생략할 수 있음

-skip qtwayland qtlocation qtscript qtdeclarative 모듈의 컴파일은 생략함.

컴파일 완료 후 ERROR LOG 없는지 확인 후

 

~$ make -j4   (-j4 생략 가능 or vmware core최대수)
~$ make install

-j4 옵션은 코어 4개를 사용하여 병렬 처리

 

 

5.7 완료된 결과를 Raspberry Pi3 에 복사

~$ rsync -avz qt5pi pi@raspberrypi_ip:/usr/local

PC에서 빌드 및 모두 완료된 qt5pi 폴더 안의 내용을 라즈베리파이에서 만든 usr/local/qt5pi 폴더로 복사.

 

5.8 QtCreator 설치 / 실행

~$ sudo apt-get install qtcreator
~$ sudo qtcreator

관리자 권한으로 QtCreator 실행

 

5.9 QtCreator 설정

Tool -> Option -> Device -> Add -> Generic Linux Device

 

 

 

 

 

 

GCC -> C

Compiler Path 를 설정

~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/gcc

ABI 를 arm-linux-generic-elf-32bit 로 설정

 

GCC -> C++

Compiler Path 를 설정

~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/g++

ABI 를 arm-linux-generic-elf-32bit 로 설정

 

 

Tool -> Option -> Build & Run -> Debuggers -> Add

Name : arm-linux-gnueabihf-gdb

Path : ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb

 

 

Tool -> Option -> Build & Run -> Qt Versions -> Add

 qmake location : ~/raspi/qt5/bin/qmake

 

Tool -> Option -> Build & Run -> Kits -> Add

Compiler : C / C++ 아까 만들어 둔 GCC(RPi3) / G++(RPi3)

Debugger : 아까 만들어 둔 arm-linux-gnueabihf-gdb

Qt Version : 아까 만들어 둔 Qt 5.6.2(qt5)

Apply -> OK

크로스 컴파일 구축 완료

 

QT 프로젝트 작업시 .pro 파일에 해당 내용 추가

target.path = /home/pi/qtCode                #결과가 출력될 경로. 원하는   경로로 설정하면 된다

INSTALLS += target

 

라즈베리파이의 ~/qtCode 경로로 실행파일 생성됨.

 

테스트 프로젝트를 만들고 정상적으로 컴파일 완료 된 후, 라즈베리파이 화면에 잘 출력되는지 확인.

 

 

End.

 

 

'Raspbegrry Pi > Model 3B' 카테고리의 다른 글

Raspberry3B SD카드 3B+에서 부팅 안될때  (0) 2021.07.16
Embedded platform 초기 설정  (0) 2020.11.24
Raspberry Pi3 + RTC(DS-1307) 연동  (0) 2020.11.24