Qt Creator là một trường lập trình (IDE) cực kì phổ biến cho những người lập trình nhúng, giúp tạo và triển khai ứng dụng một cách nhanh chóng, nó có sẵn trên nhiều nền tảng như Linux, Windows và macOS.
Qt 5.12 là bản phát hành được sử dụng phổ biến của Qt framework. Bài viết này sẽ hướng dẫn bạn:
- Cài đặt môi trường biên dịch chéo Qt trên PC và Raspberry Pi (Qt 5.12.5)
- Cấu hình Qt Creator biên dịch chéo trên PC
Phần cứng:
- Raspberry Pi Model B cài đặt Raspberry Pi OS phiên bản bất kì.
- Một máy tính PC cài đặt Linux OS và Qt Creator.
Yêu cầu:
- Raspberry Pi đã cài đặt OS (tham khảo cách cài đặt).
- Cập nhật firmware cho Pi.
sudo rpi-update
reboot
- Bật ssh cho Pi.
sudo raspi-config
Interfacing Options
ssh
Cài đặt môi trường biên dịch chéo Qt cho Raspberry Pi
Cài đặt thư viện – Pi
Chúng ta cần cài đặt một số thư viện phát triển trước tiên vì vậy bạn phải cho phép hệ thống cài đặt deb-src. Bằng cách bỏ comment deb-src trong /etc/apt/sources.list.
sudo nano /etc/apt/sources.list
Tiếp theo chúng ta cập nhật và cài đặt các gói sau:
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
Tạo thư mục đích – Pi
Bước này chúng ta chỉ tạo một thư mục trên Raspberry Pi. Thư mục này (/usr/local/qt5pi) dùng để cài đặt phiên bản Qt được PC biên dich sau này.
sudo mkdir /usr/local/qt5pi
sudo chown pi:pi /usr/local/qt5pi
Download và cài đặt toolchain – PC
mkdir ~/raspi
cd ~/raspi
git clone https://github.com/raspberrypi/tools
Cấu hình và đồng bộ sysroot – PC
sysroot là một thư mục cha, bao gồm tất cả các thư mục con cần cho một hệ thống chạy. Chúng ta tạo một sysroot cho Pi để biên dịch chéo trên PC.
mkdir sysroot sysroot/usr sysroot/opt
Chúng ta dùng lệnh rsync để đồng bộ thư mục giữa Pi và PC, nếu có sự thay đổi trên PC chúng có thể dễ dàng truyền tải xuống Pi. Bạn có thể thay thế raspberrypi.local thành địa chỉ IP của Pi.
rsync -avz pi@raspberrypi.local:/lib sysroot
rsync -avz pi@raspberrypi.local:/usr/include sysroot/usr
rsync -avz pi@raspberrypi.local:/usr/lib sysroot/usr
rsync -avz pi@raspberrypi.local:/opt/vc sysroot/opt
Tiếp theo chúng ta cần điều chỉnh các symbolic links trong sysroot để tương thích trên PC.
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Download một phiên bản Qt – PC
Download và cài đặt phiên bản Qt 5.12.5.
wget http://download.qt.io/official_releases/qt/5.12/5.12.5/single/ qt-everywhere-src-5.12.5.tar.xz
tar xvf qt-everywhere-src-5.12.5.tar.xz
cd qt-everywhere-src-5.12.5
Cấu hình phiên bản Qt cho biên dịch chéo – PC
Trong phiên bản Raspberry Pi OS mới, thư viên EGL có tên khác với tên giả định trong file cấu hình, vì vậy chúng ta cần chỉnh sửa file ./qtbase/mkspecs/devices/linux-rasp-pi-g++/qmake.conf, thay thế tham chiếu -lEGL và -LGLESv2 thành -lbrcmEGL và -lbrcmGLESv2 tương ứng.
Thư mục linux-rasp-pi3-g++ (Qt 5.12) hoặc linux-rasp-pi-g++ ( từ Qt 5.12.2 tới Qt 5.12.5) được áp dụng cho phiên bản Raspberry Pi 3.
Version | Configure option | Architecture | Remarks |
Raspberry Pi 3 (not working for Qt 5.12.2 to 5.12.5) | -device linux-rpi3-g++ | ARM V8 | QtScript build fails -skip qtscript needed |
Raspberry Pi 2 | -device linux-rpi2-g++ | ARM V7 | |
Raspberry Pi 1 Raspberry Pi Zero | -device linux-rpi-g++ | ARM V6 |
Cũng có một cách khác để sửa điều này, bạn có thể tham khảo tại đây.
Chú ý: Câu lệnh sau được đã bỏ qua biên dịch các module qtwayland, qtlocation và qtscript vì không sử dụng.
./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
Khi cấu hình thành công, bạn sẽ thấy tương tự như sau:
Build options:
......
QPA backends:
......
EGLFS .................................. yes
EGLFS details:
......
EGLFS Raspberry Pi ................... yes
......
Biên dịch và cài đặt phiên bản Qt lên thư mục đích – Pi
Biên dịch sẽ mất rất nhiều thời gian tùy cấu hình PC của bạn, nên sử dụng biên dịch song song với cờ j, với j là số thread.
make -j4
make install
Sau khi biên dịch xong,chúng ta đồng bộ thư mục đích với Pi.
rsync -avz qt5pi pi@raspberrypi.local:/usr/local
Cấu hình Qt Creator biên dịch chéo cho Raspberry Pi
Bạn cần cài đặt Qt Creator trước để thực hiện tiếp bước này. Download và cài đặt tại đây.
Cấu hình Device mới cho QtCreator. Tools -> Options, Devices – >Add -> Generic Linux Device.

Sau đó cài đặt Name (Raspberry Pi), IP address (raspberrypi.local), Username (pi), Password (******).

Tiếp theo, chọn Kits -> Compilers -> Add -> GCC, chọn đường dẫn GCC tới: ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/gcc

Add -> G++, chọn đường dẫn G++ tới: ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/bin/g++

Chọn Kits -> Debugers -> Add , chọn đường dẫn tới: ~/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb

Chọn Kits -> Qt Versions -> Add, chọn đường dẫn tới: ~/raspi/qt5/bin/qmake

Cuối cùng cấu hình Kits, Kits -> Kits -> Add.
- Device type: Generic Linux Device
- Device: Raspberry Pi (defaut for Generic Linux)
- Sysroot: ~/raspi/sysroot
- Compiler C: GCC (rpi)
- Compiler C++: GCC (rpi)
- Debugger: GDB (rpi)
- Qt version: Qt 5.12.5 (qt5)(rpi)
Hoàn thành cấu hình QtCreator bạn có thể tạo một dự án mới hoặc chạy thử với một Example. Ở đây chúng ta chay thử với Digital Clock Example.
Biên dịch

Chạy project trên Pi


Một số lỗi có thể gặp
Lỗi hiển thị:
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
Cách sửa:
rm /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
ln -s /opt/vc/lib/libbrcmGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
Tham khảo thêm các lỗi:
Chúc các bạn thành công!
Thank you!!1