วันพฤหัสบดีที่ 9 เมษายน พ.ศ. 2563

การทำ qt cross compile raspberry pi4

ถ้าต้องการทำ Cross Compile RaspberryPi4 ให้ทำตามนี้https://mechatronicsblog.com/cross-compile-and-deploy-qt-5-12-for-raspberry-pi/
(ที่มา https://forum.qt.io/topic/109885/cross-compile-qt-5-12-5-for-raspberry-pi-4/7)

ที่ raspberry pi

หลังจากทำ raspbian ลง sd-card แล้ว ให้ทำ headless ssh ตาม step 3, ตามเวปนี้ https://hackernoon.com/raspberry-pi-headless-install-462ccabd75d0

1.sudo nano /etc/default/keyboard ให้เปลี่ยนจาก "gb" ไปเป็น "us"  เพื่อทำให้ keyboard เป็น us
2.sudo reboot
3.sudo raspi-conig
3.1 change password
3.2 change Time-Zone ให้เป็น Asia, Bangkok
3.3 Interface option
3.3.1 Enable I2C
3.3.2 Enable SSH
4.sudo nano /boot/config.txt
4.1 uncomment hdmi_force_hotplug=1
4.2 uncomment hdmi_group=1, hdmi_mode=16
5.sudo apt-get update
6.sudo apt-get upgrade
7.sudo apt-get install wiringpi
8.cd /temp
9.wget https://project-downloads.drogon.net/wiringpi-latest.deb
10.sudo dpkg -i wiringpi-latest.deb
11.check ด้วยคำสั่ง gpio -v และ gpio readall

12.sudo nano /etc/apt/sources.list
uncomment the deb-src line in the /etc/apt/sources.list
  • 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
  • sudo mkdir /usr/local/qt5pi
  • sudo chown pi:pi /usr/local/qt5pi

ที่ computer linux

sudo apt-get install python
  • mkdir ~/raspi
  • cd ~/raspi
  • git clone https://github.com/raspberrypi/tools
 mkdir sysroot sysroot/usr sysroot/opt
4บรรทัดต่อไปนี้ ให้เปลี่ยน raspberrypi_ip เป็น ip ของ raspberry pi ที่เราใช้อยู่
  • 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
  • wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
  • chmod +x sysroot-relativelinks.py
  • ./sysroot-relativelinks.py sysroot

wget http://download.qt.io/official_releases/qt/5.12/5.12.7/single/qt-everywhere-src-5.12.7.tar.xz
ที่มา https://www.tal.org/tutorials/building-qt-512-raspberry-pi

เพื่อเป็นการเช็คว่าไฟล์ที่ download มา สมบูรณ์หรือไม่ ให้ทำนี้
md5sum qt-everywhere-src-5.12.7.tar.xz
ควรจะมีผลลลัพธ์ตามนี้ 
ce2c5661c028b9de6183245982d7c120  qt-everywhere-src-5.12.7.tar.xz 
  • tar xvf qt-everywhere-src-5.12.7.tar.xz
  • cd qt-everywhere-src-5.12.7
sudo apt-get install build-essential

=========== ตรงนี้ไม่แน่ใจว่าต้องทำหรือไม่ ====================== 
git clone https://github.com/oniongarlic/qt-raspberrypi-configuration.git

cd qt-raspberrypi-configuration && make install DESTDIR=../qt-everywhere-src-5.12.7
ตรงนี้ให้แก้เป็น
cd qt-raspberrypi-configuration && make install DESTDIR=~/raspi/qt-everywhere-src-5.12.7
================================================

./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 -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm
 จริงๆแล้วควรจะต้องแก้ไขเป็น  -device linux-rasp-pi-vc4-g++ เนื่องจากบอร์ดของเราเป็น rpi4 แต่ทำแล้วใช้ไม่ได้ จึงต้องเป็น -device linux-rasp-pi-g++ ตามเดิม

ตัวอย่างที่แก้ไขแล้ว ที่ใช้ไม่ได้
 ./configure -release -opengl es2 -device linux-rasp-pi-vc4-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 -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v -no-gbm

หลังจาก ./config ...... เสร็จแล้ว ให้เช็คว่า config สมบูรณ์ไหม โดยให้เปิดไฟล์ config.summary 
ต้องเป็นตามนี้
  • Build options:
  • ......
  • QPA backends:
  • ......
  • EGLFS .................................. yes
  • EGLFS details:
  • ......
  • EGLFS Raspberry Pi ................... yes
ต่อไปก็ make ขั้นตอนนี้นานมากเป็นชั่วโมง ขึ้นอยู่กับความเร็วของคอมพิวเตอร์ของเรา
แล้วก็ make install

 rsync -avz qt5pi pi@raspberrypi_ip:/usr/local
ให้เปลี่ยน raspberrypi_ip เป็น ip ของ raspberry pi

แล้วก็ลง qt ที่เครื่อง linux ของเรา ตามนี้ https://www.qt.io/download
ให้เลือก download for open source users โดยคลิกที่ go open source
 
ลงไปด้านล่างของเวป click download the qt online installer แล้วก็คลิก download


จะมี pop-up ให้ download qt-unified-linux-x64-3.2.2-online.run ขึ้นมา ก็ให้กด save file
- chmod +x qt-unified-linux-x64-3.2.2-online.run
- ./qt-unified-linux-x64-3.2.2-online.run

จะมีอยู่ช่วงนึงจะให้เลือกว่าเราจะลงเวอร์ชั่นไหน ในที่นี้เลือก 5.12.7 เหมือนกับกับที่ทำตั้งค่า cross compile
แล้วก็รอ download กันยาวๆไป
เมื่อลงโปรแกรมเสร็จแล้ว ก็ให้เปิดโปรแกรมขึ้นมา
ไปที่ tools, options, device section(มองหาที่ด้านซ้าย), device tab(มองหาที่กลางบน), แล้วกด add ที่ด้านขวามือ

แล้วเลือกเป็น general linux device แล้ว click start wizard

name : Raspberry Pi
ip : 192.168.1.xx (ตาม ip ของ raspberry pi ของเรา)
user name : pi

จะมีให้สร้าง key deployment ให้คลิกที่ create new key pair

ขั้นตอนนี้ต้องเปิด Raspberry Pi ไว้ด้วย เพราะจะมีการทดสอบระหว่าง qt ของเครื่องคอมฯ กับ RPi

คลิก Generate and save key pair

ไปที่ kit section, compiler tab, แล้วกด Add
GCC, C
ในช่อง compiler path ให้ใส่ ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/gcc
กด Add แล้วเลือก GCC, C++
ในช่อง compiler path ให้ใส่ ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/c++

ไปที่ Debugger tab แล้วกด Add
ในช่อง path ให้ใส่ ~/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb

ไปที่ Qt version tab แล้วกด Add ให้ตั้ง qmake path ไปที่ ~/raspi/qt5/bin/qmake

สุดท้าย ไปที่ Kits tab, กด Add แล้วตั้งชื่อ และเลือก icon ตามใจ แล้ว configure ค่าต่างๆ ตามนี้
  • Device type: Generic Linux Device
  • Device: Raspberry Pi (defaut for Generic Linux)
  • Sysroot: ~/raspi/sysroot
  • Compiler C: GCC (Raspberry Pi)
  • Compiler C++: GCC (Raspberry Pi)
  • Debugger: GDB (Raspberry Pi)
  • Qt version: Qt 5.12.7 (Raspberry Pi)
กด Apply, OK

หลังจากนี้ ให้ลองสร้าง project ใหม่ จะมีตอนที่ให้เลือก Kits ก็เลือก Raspberry Pi ที่เราสร้างไว้

แล้วก็ลองเขียนโปรแกรมได้เลย
Enjoy!