Showing posts with label QT Framework. Show all posts

Build QT for Raspberry PI


Bài viết này sẽ hướng dẫn cách build QT để viết chương trình có GUI trên Raspberry PI

- qt-everywhere-opensource-src-5.3.2
- 2017-07-05-raspbian-jessie-lite    (bản lite không có đồ họa)


1. Build QT

#build QT => cd to qtbase folder
RPI_TOOLCHAIN=/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
RPI_SYSROOT=/home/linuxpc/2017-07-05-raspbian-jessie-lite-rootfs

#configure
./configure -opengl es2 -device linux-rasp-pi-g++ \
-device-option CROSS_COMPILE=$RPI_TOOLCHAIN  \
-opensource -confirm-license -optimized-qmake \
-reduce-exports -release -make libs -skip qtwebkit \
-sysroot $RPI_SYSROOT \
-prefix /usr/local/qt5pi

#affter install you have 2 folder: one is /usr/local/qt5pi (qmake for host) 
#and one is $RPI_SYSROOT/usr/local/qt5pi  (lib for rpi)
make -j4
make install


Sau khi xong make install thì sẽ thu được 2 thư mục của QT

- /usr/local/qt5pi  : dùng để build app cho RPI
- $RPI_SYSROOT/usr/local/qt5pi : bạn copy thư mục này xuống SD card

2. Build app

#build app
export PATH=$PATH:/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin  
export QMAKESPEC=/usr/local/qt5pi/mkspecs/devices/linux-rasp-pi-g++

cd /path/to/myproject
/usr/local/qt5pi/bin/qmake
make






Sunday, October 15, 2017

Ứng dụng QT Helloworld


Tạo project với QT Creator






- Export biến môi trường cross compiler
- Export QMAKESPEC chỉ đến thư mục chứa qmake.conf mà bạn đã cấu hình khi build QT Everywhere
- Di chuyển vào thư mục project
- Chạy chương trình qmake được sinh ra khi build xong QT Everywhere
- Compile với make

$ export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin  
$ export QMAKESPEC=/path/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++  
$ cd /home/ninhld/Documents/Helloworld
$ /friendlyarm/bin/qmake  
$ make

- Copy thư mục lib của QT Everywhere đã build xuống board bằng SDCard hoặc mount NFS
- Copy chương trình Helloworld lên board bằng SDCard hoặc mount NFS
- Export biến môi trường đến thư viện qt lib

 DEPEND_LIB_DIR=/friendlyarm  
 export CFLAGS=-I${DEPEND_LIB_DIR}/include  
 export CPPFLAGS=-I${DEPEND_LIB_DIR}/include  
 export LDFLAGS=-L${DEPEND_LIB_DIR}/lib  
 export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig  
 export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib  
 export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin  

- Di chuyển vào thư mục có Helloworld và chạy app
 [root@FriendlyARM /]# cd /friendlyarm/examples/  
 [root@FriendlyARM examples]#   
 [root@FriendlyARM examples]#   
 [root@FriendlyARM examples]#   
 [root@FriendlyARM examples]# ./Helloworld -qws  
   




Sunday, September 20, 2015

Build QT everywhere cho board nhúng FriendlyARM Mini2440



1. Download source code
https://download.qt.io/archive/qt/
Tất cả các version được đặt ở link trên, bạn có thể dùng các version qt-everywhere-opensource-src-4.7.2.tar.gzqt-everywhere-opensource-src-4.8.5.tar.gzqt-everywhere-opensource-src-5.3.2.tar.gz.
Ở các version 5 trở lên có một sự thay đổi lớn so với các version 4 trở xuống, trong bài viết này sử dụng qt-everywhere-opensource-src-4.7.2.tar.gz làm ví dụ.

2. Build QT Everywhere
- Build tslib-1.0

- Giải nén qt-everywhere-opensource-src-4.7.2.tar.gz bằng chuột hoặc bằng lệnh
$ tar xf qt-everywhere-opensource-src-4.7.2.tar.gz  

- Di chuyển terminal vào thư mục source vừa giải nén
- Mở file qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++/qmake.conf và modify:
 #  
 # qmake configuration for building with arm-linux-g++  
 #   
 include(../../common/g++.conf)  
 include(../../common/linux.conf)  
 include(../../common/qws.conf)  
   
 # modifications to g++.conf  
 QMAKE_CC  = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc  
 QMAKE_CXX     = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++  
 QMAKE_LINK    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++  
 QMAKE_LINK_SHLIB = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++  
    
 # modifications to linux.conf  
 QMAKE_AR     = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-ar cqs  
 QMAKE_OBJCOPY   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-objcopy  
 QMAKE_STRIP    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-strip  
   
 load(qt_config)  

- Configure
 ./configure --prefix=/friendlyarm -embedded arm -xplatform qws/linux-arm-g++ \  
 -qt-mouse-tslib -little-endian -no-webkit -no-qt3support -no-cups -no-largefile \  
 -optimized-qmake -no-openssl -nomake tools -qt-sql-sqlite -no-3dnow -system-zlib \  
 -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-opengl -gtkstyle -no-openvg \  
 -no-xshape -no-xsync -no-xrandr -qt-freetype -qt-gfx-linuxfb -qt-kbd-tty \  
 -qt-kbd-linuxinput -qt-mouse-tslib -qt-mouse-linuxinput  

Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition. Chọn o

...

Type '3' to view the GNU General Public License version 3.
Type 'L' to view the Lesser GNU General Public License version 2.1.
Type 'yes' to accept this license offer.
Type 'no' to decline this license offer.

Do you accept the terms of either license? Chọn yes  

- Compile
 make  
 make install  



Sau khi build xong sẽ được thư mục như trên:
- bin : thư mục chứa chương trình qmake, dùng để tạo Makefile để build các qt application cho board
- lib : thư mục tất cả các thư viện qt, chúng ta sẽ copy thư mục này xuống board để dùng
        ngoài ra còn có thư mục con là fonts để dùng cho qt


3. Ví dụ
Chúng ta sẽ chạy các ứng dụng được build sẵn trong thư mục examples như trong hình trên.

Để chạy được app dưới board có hai cách:
- Copy qt xuống sdcard
- Dùng NFS

3.1 sdcard
- format FAT32
- copy thư mục lib và examples vào một thư mục nào đó dưới sdcard, vd <sdcard>/qte
- gắn sdcard vào board
- sdcard sẽ được tự đọng mount vào thư mục /sdcard , có thể dùng lệnh cat /sdcard để xem
- setup biến môi trường để chạy app

 DEPEND_LIB_DIR=/sdcard/qte  
 export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig  
 export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib  

- chạy app
 cd /sdcard/qte/examples/widgets/analogclock  
 ./analogclock -qws  

Note: Khi copy lib xuống sdcard format FAT32 thì sẽ mất khả năng tạo alias, có nghĩa là trong thư mục lib bạn sẽ thấy có 3 dạng của một lib như dưới
libQtGui.so.4
libQtGui.so.4.7
libQtGui.so.4.7.2

trên thực tế chỉ có libQtGui.so.4.7.2 là thực sự tồn tại, libQtGui.so.4 và libQtGui.so.4.7 là những alias của libQtGui.so.4.7.2, chính vì thế khi copy xuống sdcard bạn chỉ thấy libQtGui.so.4.7.2 mà thôi. Vì thế sau khi copy xong bạn cần thực hiện một việc là đổi tên tất cả các file dạng libQtGui.so.4.7.2 thành libQtGui.so.4

3.2 NFS
Sau khi mount xong thì làm các bước source biến môi trường và chạy app như trên sdcard



- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -