Lập trình ứng dụng Qt trên board FriendlyARM

Email In PDF.
30 likes
2 dislikes    
chumanhcuong

Bài viết hướng dẫn cách cài đặt, tạo một chương trình Qt sau đó cho chạy trên board FriendlyARM, việc lựa chọn board FriendlyARM sẽ tùy thuộc vào người sử dụng, có thể là mini2440, tyni6410 hoặc mini6410.

Mục tiêu của bài viết này sẽ hướng dẫn bạn cách làm thế nào để có thể chạy ứng dụng Qt trên nền Linux có sẵn trên board FriendlyARM, các công cụ liên quan phục vụ cho bài viết này cũng sẽ được đề cập chi tiết, với cách thức diễn tả bài viết với các dòng lệnh đi kèm với hình ảnh sẽ giúp cho bạn  hiểu vấn đề một cách đơn giản nhất.

Để có thể hiểu được các vấn đề tiếp theo trong bài viết này, một vài công cụ cần thiết đã được đề cập ở bài viết số 1, trong đó bạn có thể có được một vài thông tin về hệ điều hành sử dụng cho việc phát triên, compiler cho ARM processor....
http://hlab.com.vn/index.php?option=com_content&view=article&id=306

Nội dung:

  • Giới thiệu lược về Qt, cài đặt.
  • Tslib, cách cài đặt và biên dịch tslib.
  • Thư viện Opensource everywhere dành cho việc biên dịch ứng dụng Qt.
  • Viết một chương trình nhỏ với giao diện đồ họa tạo trên Qt, chạy nó dưới board FriendlyARM.

1. Qt

Qt (cách phát âm chính thức tương tự như từ cute /ˈkjuːt/ trong tiếng Anh, một kiểu phát âm phổ biến khác là Q.T. /ˌkjuːˈtiː/) là nền tảng xây dựng các ứng dụng chạy được trên nhiều hệ điều hành. Phần lớn các ứng dụng xây dựng bằng Qt đều có giao diện đồ họa, do vậy Qt còn được coi như là một bộ công cụ (widget toolkit). Ban đầu Qt ra đời như một sản phẩm thương mại và cũng được dùng để viết môi trường KDE, nhưng về sau được bổ sung giấy phép LGPL, theo đó có thể được sử dụng tự do để phát triển các phần mềm nguồn mở hay đúng hơn là có thể sử dụng trong các phần mềm thương mại nếu muốn. Bản quyền thương mại của Qt hiện nay đã được chuyển qua hình thức thu phí hỗ trợ. Bạn có thể dùng Qt như một thư viện để viết phần mềm thương mại, nếu có sửa đổi nào trong bộ nguồn chính của Qt thì bạn phải cung cấp mã nguồn đã sửa ra chứ không yêu cầu phải mở toàn bộ mã nguồn hay phải mua giấy phép thương mại như trước kia.

Có thể nói, việc sử dụng Qt trên Linux gần giống với việc chúng ta sử dụng Visual Studio trên Windows, tuy nhiên nếu bạn muốn sử dụng Qt trên Windows thì vẫn có phiên bản dành cho hệ điều hành này.

Giao diện làm việc với Qt Creator:

Đề cài đặt Qt Creator, trong Ubuntu bạn làm như sau:

Applications ->> Ubuntu Software Center ->> [tại ô Search] Qt Creator ->> Install

Sau khi cài đặt xong, để khởi động Qt, bạn vào : Applications ->> Programming ->> Qt Creator

Chú ý: để các bước thực hiện tiếp theo ít xảy ra lỗi thì bài viết khuyên bạn nên sử dụng một trong 2 phiên bản Ubuntu 10.10 hoặc Ubuntu 10.04.

2. Tslib

Nói một cách ngắn gọn, tslib là một thư viện cung cấp các stack, các chức năng cho việc giao tiếp với touchscreen trong hệ thống Linux.

Trước hết bạn cần cài đặt gói git-core nhằm giúp việc lấy source của tslib từ  server cung cấp.

Các bước tiến hành cài đặt và build tslib như sau:

Mở terminal :

$ apt-get install git-core

Để dễ quản lý các công việc trong bài viết này, thư mục QtTut được tạo để lưu trữ các file có liên quan.

$ cd /
$ mkdir QtTut

với 2 dòng lệnh trên chúng ta đã tạo một thư mục QtTut, tiến hành tải tslib:

$ cd /QtTut/
$ git clone http://github.com/kergoth/tslib.git

sau khi tải thành công:

config cho gói tslib:

$ cd /QtTut/tslib
$ ./autogen.sh
$ ./configure --host=arm-angstrom-linux-gnueabi --prefix=/usr/local/tslib --enable-static –enable-shared

chú ý rằng host ở đây được hiểu nôm nà là chúng ta sẽ chạy thư viện này trên nền phần cứng ARM, prefix với đường dẫn sẽ chứa thư mục tslib sau khi được build,tiến hành build thư viện tslib:

$ make
$ make install

 

Cuối cùng chúng ta thu được một thư mục tslib với các file trong đó sẽ được sử dụng cho phần tiếp theo!

3. Cài đặt thư viện Opensource everywhere.

Thư viện này sẽ giúp chúng ta biên dịch ứng dụng của Qt để chạy trên nền phần cứng ARM

Bạn tải một trong 2 gói này về ứng với mỗi phiên bản Ubuntu:

http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz  (Ubuntu 10.04 LTS)
http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0.tar.gz  (Ubuntu 10.10)

Copy file vừa tải về vào thư mục QtTut

$ cp /qt-everywhere-opensource-src-4.6.2.tar.gz /QtTut/

giải nén

$ tar -zvxf qt-everywhere-opensource-src-4.6.2.tar.gz

truy nhập vào thư mục vừa giải nén

$ cd qt-everywhere-opensource-src-4.6.2

chỉnh sửa các file sau bằng gedit có sẵn trong qt:

$ gedit mkspecs/common/g++.conf

thay đổi dòng sau:

QMAKE_CFLAGS_RELEASE += -O2

thành

QMAKE_CFLAGS_RELEASE += -O0

đóng cửa sổ gedit, gõ tiếp dòng sau:

$ gedit /mkspecs/qws/linux-arm-g++/qmake.conf

sửa toàn bộ nội dung của file thành như sau:

#
# 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  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++
# modifications to qmake.conf
QMAKE_AR  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP  = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-strip
QMAKE_INCDIR  += /usr/local/tslib/include
QMAKE_LIBDIR  += /usr/local/tslib/lib
load(qt_config)

sau khi thực hiện thành công 2 bước trên, chúng ta sẽ config cho thư viện với lệnh sau:

$ mkdir /usr/local/Qt
$ cd /QtTut/qt-everywhere-opensource-src-4.6.2/
$ ./configure -embedded arm -xplatform qws/linux-arm-g++ -prefix /usr/local/Qt -qt-mouse-tslib -little-endian  -no-webkit -no-qt3support -no-cups -no-largefile -optimized-qmake -no-openssl -nomake tools

Configure thành công chúng ta sẽ tiến hành build:

$ make
$ make install

Thời gian build cho thư viện này tương đối lâu, thời gian chờ đợi có thể là 2 tới 3 giờ.
Sau khi build thành công, chúng ta sẽ có thư  mục Qt như đường dẫn trên, trong đó có chứa các file cần thiết để hỗ trợ cho Qt.

4. Viết chương trình đơn giản trên Qt Creator để chạy trên board FriendlyARM tyni6410

Khởi động Qt Creator

Tại form chính chúng ta thiết kế cơ bản như sau:
kéo một TextEdit và 2 pushbutton, một nút với tên là Display và một nút nhấn là Clear

 

Chuột phải vào nút display, chọn Go to slot... ->> chọn Clicked() … ->>OK

thêm dòng lệnh sau cho sự kiện click của pushbutton display:

ui->textEdit->setText(QString("Hello World!"));

Chuột phải vào nút Clear, chọn Go to slot... ->> chọn Clicked() … ->>OK

thêm dòng lệnh sau cho sự kiện click của pushbutton display:

ui->textEdit->setText(QString(" "));

Build Project:

Để chạy được ứng dụng trên board FriendlyARM, chúng ta sẽ cần tới qmake của thư viện Qt đã được build ở phía trên của bài viết.

Nhấp vào thẻ Project , chúng ta sẽ setting cho project, ở đây bạn sẽ thấy các vùng thiết lập cho việc build project.

Tại General → Nhìn dòng Qt Version, bạn nhấn vào Manage. Trong hộp thoại hiện ra, ở thẻ Qt version, trong danh sách chúng ta nhìn thấy có Auto-dectected Manual. Nhấp chuột chọn Manual, nhấn dấu cộng bên phải hộp thoại, tại Version name gõ FriendlyARM, tại qmake location, bạn tìm đến đường dẫn chứa file qmake của Qt lúc trước đã build, cụ thể nó ở đường dẫn như sau:

/usr/local/Qt/bin/qmake

Apply ->> OK.

Trở về thẻ Project, với Build Setting, trong General, bỏ chọn Shadown build.
trong Qt version chọn FriendlyARM.
Bên dưới Build Setting cỡ lớn, tại Edit build Configuration chọn FriendlyARM Realease.

Cuối cùng chúng ta được như sau:

Save lại và build ứng dụng.
Vào menu Build ->> Rebuild All.

Build thành công chúng ta sẽ có file thực thi như trong hình, file có màu tím:

Bước tiếp theo chúng ta sẽ làm cho file này chạy được trên board FriendlyARM.

Khởi động board FriendlyARM, sau khi khởi động chúng ta sẽ điều khiển lệnh thông qua telnet:

kết nối board FriendlyARM với PC thông qua cổng mạng, hoặc kết nối chung vào một switch.

kiểm tra kết nối :

$ ping 192.168.1.230
$ telnet 192.168.1.230

gõ tài khoản đăng nhập và password.

tạo thư mục chứa file chương trình:

[root@FriendlyARM /]# mkdir myApp 

tiếp theo chúng ta sẽ tiến hành truyền file apphello tới board thông qua đường mạng với giao thức ftp.
mở một terminal mới trên ubuntu gõ lệnh sau:

$ cd /apphello/
$ ftp 192.168.1.230

đăng nhập với tài khoản và mật khẩu giống trong telnet

gõ lệnh sau để gửi truyền file chương trình xuống board:

ftp> put apphello

apphello là tên file chương trình được build ở phía trên.

trong thư mục apphello chứa file thực thi apphello, bạn tạo file có nội dung:

#!/bin/sh
if [ -e /etc/friendlyarm-ts-input.conf ] ; then
 . /etc/friendlyarm-ts-input.conf
fi
true    ${TSLIB_TSDEVICE:=/dev/touchscreen}
TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE
export TSLIB_CONFFILE
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_DISPLAY=:1
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin
if [ -c /dev/touchscreen ]; then
 export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"
 if [ ! -s /etc/pointercal ] ; then
 rm /etc/pointercal
 /usr/bin/ts_calibrate
 fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
fi
export QWS_KEYBOARD=TTY:/dev/tty1
export HOME=/root
cd /myApp
./apphello -qws
hotplug

đặt tên file là appscript, save lại và đóng cửa sổ edit lại.

tại khung terminal ftp gõ lệnh sau:

ftp> put appscript

tại cửa sổ terminal telnet chúng ta sẽ kiểm tra file tại thư mục root dưới board

[root@FriendlyARM /]# ls

gõ các lệnh sau để cho phép các file thực thi trong môi trường sở hữu.

[root@FriendlyARM /]# chmod +x apphello 
[root@FriendlyARM /]# chmod +x appscript

kiểm tra lại với lệnh ls ta thấy màu hiển thị của file đó chuyển sang màu xanh lá cây là ok.

tiếp theo di chuyển chúng vào thư mục myApp đã được tạo ở trên

[root@FriendlyARM /]# mv apphello /myApp
[root@FriendlyARM /]# mv appscript /myApp

tại cửa sổ terminal telnet, gõ lệnh sau để chỉnh sửa file rS trong thư mục /etc/init.d/rcS

[root@FriendlyARM /]# vi /etc/init.d/rcS

di chuyển con trở tới vị trí cần sửa sau đó nhấn phím i để nhập dữ liệu, sau khi sửa xong nhấn phím ESC - > :w ->> Enter để lưu lại.
sửa nội dung của file rcS thành như sau:

#! /bin/sh 

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

 runlevel=S
  prevlevel=N

  umask 022

 export PATH runlevel prevlevel
 #
#       Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#

trap ":" INT QUIT TSTP
/bin/hostname FriendlyARM

[ -e /proc/1 ]    || /bin/mount -n -t proc  none /proc
[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys
[ -e /dev/tty ]   || /bin/mount    -t ramfs none /dev
/bin/mount -n -t usbfs none /proc/bus/usb
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
/bin/mount -n -t ramfs none /tmp
/bin/mount -n -t ramfs none /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
/sbin/hwclock -s
/sbin/hwclock -s
syslogd
/etc/rc.d/init.d/netd start 
echo "                        " > /dev/tty1
echo "Starting networking..." > /dev/tty1
sleep 1  
/etc/rc.d/init.d/httpd start
echo "                        " > /dev/tty1
echo "Starting web server..." > /dev/tty1
sleep 1  
/etc/rc.d/init.d/leds start
echo "                        " > /dev/tty1
echo "Starting leds service..." > /dev/tty1
echo "                        " 
sleep 1
echo "                        " > /dev/tty1
/etc/rc.d/init.d/alsaconf start
echo "Loading sound card config..." > /dev/tty1
echo "                        "
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
#/bin/qtopia &
/myApp/appscript &
echo "                                  " > /dev/tty1
echo "Starting myApp, please waiting..." > /dev/tty1

Ctrl+Z để thoát edit, trở lại dòng input lệnh.

copy Qt lib có sẵn dưới board, thư viện cần thiết để có thể chạy ứng dụng Qt dưới board FriendlyARM

[root@FriendlyARM /]# mkdir /usr/local/Qt
[root@FriendlyARM /]# cp -r /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/  /usr/local/Qt/

gõ lệnh sau để restart lại board:

[root@FriendlyARM /]# shutdown -r now

Quan sát dưới board:

__________________________________________________________________
About Author
chumanhcuong

chumanhcuong

Firmware Engineer,1989 :

  • MicroController
  • Embedded System.
  • Embedded OS (Linux,RTOS,Android)


Add comment

Security code
Refresh

BÀI LIÊN QUAN