Showing posts with label Applications. Show all posts
Giới thiệu Applications
Đây là phần đi vào lập trình ứng dụng, bạn cần nắm được tất cả các phần trước đó bao gồm:
- C/C++
- Linux Basic
- Shell
- Beginning Linux Programming
- Toolchain, Make
- Cross compiling the libraries
- Setup development environment
- FriendlyARM overview
Nếu chưa có gì trong tay, hãy bắt đầu với For Beginner.
Tât cả các bài viết đều được viết cho Kit FriendlyARM mini2440, vì thế có thể áp dụng tương tự được cho tất cả kit nhúng linux khác.
Ứ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
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.gz, qt-everywhere-opensource-src-4.8.5.tar.gz, qt-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
Tag :
Applications,
QT Framework
Sử dụng QT Creator để tạo giao diện
Bài viết liên quan:
- Giới thiệu QT Framework
- QT Creator
1. Giới thiệu
Như các bài viết trước QT Creator được dùng với hai trường hợp
- Code Editor thông thường
- Design giao diện
2. Widget và cơ chế Signal-Slot
Widget là các thành phần giao diện, ví dụ như Button, Label, Image, List, Dialog...
Signal-Slot là cơ chế tương tác giữa các đối tượng widget với nhau, ví dụ như khi bấm vào một "Button A" thì một "Dialog B" được pop-up lên, khi đó giữa hai đối tượng phải được khai báo một cơ chế signal-slot giữa chúng.
3. Lập trình giao diện với QT Creator
Có rất nhiều tutorial trên youtube.com hướng dẫn chi tiết lập trình giao diện với QT Creator:
- C++ QT Programming
- C++ QT Tiếng Việt
Về cơ bản thì cần nắm được cách sử dụng các widget, cách tương tác giữa các thành phần widget, và nâng cao hơn là lập trình các tính năng về mạng (network, webkit), multimedia, ...
Ví dụ: Viết chương trình thực hiện các phép tính +, -, x, / hai số hạng.
Link Source code
- Giới thiệu QT Framework
- QT Creator
1. Giới thiệu
Như các bài viết trước QT Creator được dùng với hai trường hợp
- Code Editor thông thường
- Design giao diện
2. Widget và cơ chế Signal-Slot
Widget là các thành phần giao diện, ví dụ như Button, Label, Image, List, Dialog...
Signal-Slot là cơ chế tương tác giữa các đối tượng widget với nhau, ví dụ như khi bấm vào một "Button A" thì một "Dialog B" được pop-up lên, khi đó giữa hai đối tượng phải được khai báo một cơ chế signal-slot giữa chúng.
3. Lập trình giao diện với QT Creator
Có rất nhiều tutorial trên youtube.com hướng dẫn chi tiết lập trình giao diện với QT Creator:
- C++ QT Programming
- C++ QT Tiếng Việt
Về cơ bản thì cần nắm được cách sử dụng các widget, cách tương tác giữa các thành phần widget, và nâng cao hơn là lập trình các tính năng về mạng (network, webkit), multimedia, ...
Ví dụ: Viết chương trình thực hiện các phép tính +, -, x, / hai số hạng.
Link Source code
Giới thiệu QT Framework
Bài viết liên quan:
- Graphical Toolkits
1. Giới thiệu
QT là một graphic library đa nền tảng để xây dựng các chương trình có giao diện đồ họa - GUI, trên hệ thống nhúng (Embedded Linux) nó giống DirectFB, trên máy tính Linux/X11 nó giống với GTK. QT tương tự như Visual Studio MFC hay Visual Basic trên Windows.
QT có một thư viện graphic component rất phong phú, hỗ trợ xử lý các thiết bị ngoại vi (mice, keyboard, touchscreen, ...), có phần mềm xây dựng giao diện chuyên nghiệp (QT Creator). QT được dùng rất phổ biến cả trên máy Linux/X11 lẫn các thiết bị nhúng Embedded Linux.
2. Các thành phần chính
Về chung nhất, QT Framewok được chia như sau:
- GUI Designer
QT Creatorl là công cụ dùng để thiết kế giao diện đồ họa - GUI
- Qt modular class library
Các thư viện thành phần cốt lõi cho framework
Qt Core
Qt GUI
Qt Widgets
Qt QML
Qt Quick
Qt Quick Controls
Qt Quick Layouts
Qt Network
Qt Multimedia
Qt Multimedia Widgets
Qt SQL
Qt WebKit
Qt WebKit Widgets
Qt Test
- Cross platform
QMake là một compiler riêng của QT Framework, dùng để build các chương trình QT.
Note: Bản QT cho Windows được tích hợp MingGW compiler.
3. Cài đặt
QT Framework cho máy tính:
Với thiết bị nhúng là sự kết hợp của QT Creator và bộ thư viện Qt Essentials + QMake có tên QT-everywhere sẽ được đề cập ở các bài viết sau.
Chi tiết mời xem thêm tại Wiki.
- Graphical Toolkits
1. Giới thiệu
QT là một graphic library đa nền tảng để xây dựng các chương trình có giao diện đồ họa - GUI, trên hệ thống nhúng (Embedded Linux) nó giống DirectFB, trên máy tính Linux/X11 nó giống với GTK. QT tương tự như Visual Studio MFC hay Visual Basic trên Windows.
QT có một thư viện graphic component rất phong phú, hỗ trợ xử lý các thiết bị ngoại vi (mice, keyboard, touchscreen, ...), có phần mềm xây dựng giao diện chuyên nghiệp (QT Creator). QT được dùng rất phổ biến cả trên máy Linux/X11 lẫn các thiết bị nhúng Embedded Linux.
2. Các thành phần chính
Về chung nhất, QT Framewok được chia như sau:
- GUI Designer
QT Creatorl là công cụ dùng để thiết kế giao diện đồ họa - GUI
- Qt modular class library
Các thư viện thành phần cốt lõi cho framework
Qt Core
Qt GUI
Qt Widgets
Qt QML
Qt Quick
Qt Quick Controls
Qt Quick Layouts
Qt Network
Qt Multimedia
Qt Multimedia Widgets
Qt SQL
Qt WebKit
Qt WebKit Widgets
Qt Test
- Cross platform
QMake là một compiler riêng của QT Framework, dùng để build các chương trình QT.
Note: Bản QT cho Windows được tích hợp MingGW compiler.
3. Cài đặt
QT Framework cho máy tính:
yum install qt qt-creator
Với thiết bị nhúng là sự kết hợp của QT Creator và bộ thư viện Qt Essentials + QMake có tên QT-everywhere sẽ được đề cập ở các bài viết sau.
Chi tiết mời xem thêm tại Wiki.
Tag :
Applications,
QT Framework
BusyBox
1. BusyBox
BusyBox là một bộ tiện ích nhỏ gọn cho hệ thống nhúng, ví dụ như các lệnh ta dùng trong shell như "cat, date, ping, ip, route, ..." đều được tích hợp trong nó, chính vì vậy BusyBox được dùng để xây dựng nên Root File System.
Download source tại đây http://www.busybox.net
Toàn bộ các tiện ích và cách sử dụng được liệt kê ở link dưới:
http://www.busybox.net/downloads/BusyBox.html
2. Cross compile
2.1 Cấu hình
Export biến môi trường dẫn đến thư mục cross compiler:
Cấu hình mặc định hoặc bằng giao diện đồ họa:
Việc cấu hình được thực hiện bằng các phím mũi tên, enter, space và Esc.
2.2 Make compile
Chọn thư mục để install:
BusyBox Settings->Installation Options->BusyBox installation prefix
hoặc set qua biến môi trường
CONFIG_PREFIX=/path/to/rootfs
BusyBox là một bộ tiện ích nhỏ gọn cho hệ thống nhúng, ví dụ như các lệnh ta dùng trong shell như "cat, date, ping, ip, route, ..." đều được tích hợp trong nó, chính vì vậy BusyBox được dùng để xây dựng nên Root File System.
Download source tại đây http://www.busybox.net
Toàn bộ các tiện ích và cách sử dụng được liệt kê ở link dưới:
http://www.busybox.net/downloads/BusyBox.html
2. Cross compile
2.1 Cấu hình
Export biến môi trường dẫn đến thư mục cross compiler:
export CC_PATH=/opt/FriendlyARM/toolschain/4.4.3
export PATH=$PATH:${CC_PATH}/bin
Cấu hình mặc định hoặc bằng giao diện đồ họa:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig #default
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig #configure by GUI
Việc cấu hình được thực hiện bằng các phím mũi tên, enter, space và Esc.
2.2 Make compile
Chọn thư mục để install:
BusyBox Settings->Installation Options->BusyBox installation prefix
hoặc set qua biến môi trường
CONFIG_PREFIX=/path/to/rootfs
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- CONFIG_PREFIX=/path/to/rootfs install