嵌入式成长轨迹62【智能家居项目】【ARM 飞凌ok6410】【QT&QWT&sqlite3安装配置】

推荐阅读顺序:

基本环境搭建:

    【配置】在虚拟机Ubuntu下NFS网络文件系统建立

   《ok6410 Qt移植百科全书》

   【配置】QT&QWT&sqlite3安装配置 这中间出现问题可查阅

   【调试】ARM QT 移植环境搭建问题---补充《ok6410 Qt移植百科全书》

 

日常使用:

  【配置】将PC端QT代码修改为ARM端可用

  【配置】SD卡一键烧写

这中间出现问题可查阅:

  【调试】智能家居代码移植时环境调试问题集锦

 

Version 2012.12.7

 

环境配置人员

郑子木

 

 

硬件环境

QT版本为4.7.1,

arm-linux-gcc版本4.2.2-eabi,

飞凌OK6410开发板

飞凌提供的3.0.1内核

 

 

子环境A配置:编译移植tslib1.4

配置步骤1 

安装autoconf ,automake ,libtool三个工具

配置步骤2 

解压缩tslib1.4.tar.gz

 

tar xzvf tslib1.4.tar.gz

cd tslib

 

配置步骤3 

 ./autogen.sh // 用于生成configure

 

配置步骤4

./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes

配置步骤5

make

配置步骤6

make install

配置步骤7

修改/usr/local/tslib/etc目录下的ts.conf文件,将module_raw input前面的注释和空格都去掉,注意空格必须去掉,不然出错

//有需要可继续添加

以上子环境A配置完毕

注意事项

 

 

 

 

 

子环境B配置:编译基本QT库

配置步骤1 

NOKIA官网上下载qt-everywhere-opensource-src-4.7.1.tar.gz

将qt-everywhere-opensource-src-4.7.1.tar.gz压缩包解压

tar xzvf qt-everywhere-opensource-src-4.7.1.tar.gz

cd qt-everywhere-opensource-src-4.7.1

 

配置步骤2

配置QT(可以在这里对QT进行裁剪)

解压qt-everywhere-opensource-src-4.7.1.tar.gz,并拷贝出三份,分别命名成qt-4.7.1-arm、qt-4.7.1-x86、qt-4.7.1-pc。

 

1、配置x86版Qt 这个主要是用来搭建qvfb。Qvfb的作用是在x86上模拟arm架构(其实也可以只用pc版做模拟),并且可以用来制作字体库。但如果没有这些需求的话可以不编译。参考引用附件《使用qvfb进行测试和制作字体库》

cd qt-4.7.1-x86 ./configure -prefix /usr/local/Trolltech/qt-4.7.1-x86 -opensource -confirm-license -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb -make tools make make install

2、配置pc版Qt。主要是用来做开发和初期调试。

cd qt-4.7.1-pc ./configure -prefix /usr/local/Trolltech/qt-4.7.1-pc -opensource -confirm-license make make install

 

3、配置arm版Qt。主要是用来做arm板上的Qt支持。 cd qt-4.7.1-arm

./configure -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 4,8,16,18,24,32 -fast -optimized-qmake -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -host-little-endian -no-qt3support -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -no-phonon -no-nis -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomake examples -nomake tools -nomake docs -qt-mouse-tslib -I /usr/local/tslib/include -L /usr/local/tslib/lib -D__ARM_ARCH_5TEJ__

 

【备注】:

进行编译配置;

-opensource

-confirm-license

-release

-shared

-embedded arm

-xplatform

qws/linux-arm-g++

-depths 4,8,16,18,24,32

-fast

-optimized-qmake

加入以下插件

-qt-sql-sqlite

-qt-libjpeg

-qt-zlib

-qt-libpng

-qt-freetype

-little-endian

-host-little-endian

去掉以下插件

-no-qt3support

-no-libtiff

-no-libmng

-no-opengl

-no-mmx

-no-sse

-no-sse2

-no-3dnow

-no-openssl

-no-webkit

-no-qvfb

-no-phonon

-no-nis

-no-cups

-no-glib

-no-xcursor

-no-xfixes

-no-xrandr

-no-xrender

-no-separate-debug-info

-nomake examples

-nomake tools

-nomake docs

设置 tslib 为鼠标驱动、校正

-qt-mouse-tslib

-I/usr/local/tslib/include

-L/usr/local/tslib/lib

支持 arm 体系结构,6410:-D__ARM_ARCH_5TEJ__ 2440/10:-D__ARM_ARCH_4T__

-D__ARM_ARCH_4T__

 

 

 

配置步骤3

修改源代码

修改qt-everywhere-opensource-src-4.7.3/mkspecs/qws/linux-arm-g++/qmake.conf文件(添加lts参数,貌似是指tslib库):

QMAKE_CC = arm-linux-gcc -lts

QMAKE_CXX = arm-linux-g++ -lts

QMAKE_LINK = arm-linux-g++ -lts

QMAKE_LINK_SHLIB = arm-linux-g++ -lts

修改qt-everywhere-opensource-src-4.7.3/src/3rdparty/freetype/include/freetype/config/ftconfig.h

将"orr %0,%2, lsl #16/n/t" /* %0 |= %2 << 16 */

修改为 "orr %0, %0, %2, lsl #16/n/t" /* %0 |= %2 << 16 */

意思是加一个%0在%2前面。

 

配置步骤4

make

配置步骤5

make install

配置步骤6

准备中文字体,下载文泉驿字体库

将文泉驿字体库拷贝到QtEmbedded-4.7.3-arm/lib/fonts;

 

或者希望制作其它字体库:

参考引用附件《使用qvfb进行测试和制作字体库》

配置步骤 7

自行在ubuntu中安装Qt creator.在其中配置好Qt库的路径(否则会出现No valid Qt version set 错误):

 

1、/etc/bash.bashrc后追加设置环境变量

 #qt

 export PATH=/opt/qt-4.7.1/bin:/opt/qt-4.7.1/lib:$PATH

 

2、打开上方菜单Tools->options,左边选择build and run,之后在里边将qmake、gcc添加

auto detected的就不用管了,要的话就添加

Qt Versions

  Qt 4.7.1 (qt-4.7.1) /opt/qt-4.7.1/bin/qmake

在QT creator版本中手动加入了编译好的ARM版本,此时提示没有工具链,左边显示为红色叹号

Tool Chains 

  GCC-arm /usr/local/arm/4.3.2/bin/arm-linux-gcc-4.3.2

  GCC /usr/bin/gcc-4.6

同时在工具链中加入/usr/local/arm/4.3.2/bin/arm-linux-g++编译器路径后,提示没有安装qmlviewer,左边显示为黄色叹号。

 

3、在主页面左边菜单栏project那里,开起来就在第一种build&run方式里边,将qt版本和工具链都选上(如果要在电脑上运行,就得用里边配搭的Qt4.8而不是用4.7.1)。如果无法选择,就跳到第二种,尝试manage选上各个版本和工具链使之激活,再回第一种就出现可以选择了(、、、不要问我为什么,我也是走投无路、、、也许关掉qt creator再重启也行)。选好之后退出,在主页面build,运气好此时就能成功了。

 

4、还不能执行

/code/Helloword/moc_dialog.cpp:16: error: #error "(The moc has changed too much.)"

如果本来有一些生成的配置文件,用make clean甚至make distclean删除,再试。 

//有需要可继续添加

以上子环境B配置完毕

注意事项

 

 

 

 

子环境C配置:将库添加到开发板根文件系统

配置步骤1  gcc在/lib下所需库

飞凌在附带的文件系统中已给出。

 

根文件系统/lib需要的库(具体与版本有关,你可以试一个QT程序看提示缺少什么)

可从arm-linux-gcc安装目录下得到;

 

配置步骤2 拷贝tslib、QT相关库到开发板根文件系统

将安装的tslib目录拷贝到开发板根文件系统的/usr/local;

将安装的QT目录QtEmbedded-4.7.3-arm拷贝到开发板根文件系统的/usr/local/Trolltech;

 

配置步骤3

创建QT配置文件

根文件系统的/etc目录下创建一名为profile的文件,内容如下:

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.3-arm

export T_ROOT=/usr/local/tslib

export PATH=$QTDIR/bin:$PATH

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event1//只要是1,触摸屏tslib测试程序就能正常工作,但在做完驱动课设后发现必须是0才可以,不知道为什么

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=tslib:/dev/event1//只要是1,自己写的HelloQt应用程序就能正常工作,如果替换内核的话,有可能会发生改变——变为event0、1、2等。

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

注意TSLIB_TSDEVICE、QWS_MOUSE_PROTO指定的设备与具体开发板内核相关,可能与上面不同;

 

 

【备注】

export setTSLIB_ROOT=/usr/local/tslib

#tslib 库的目录

export setTSLIB_CONSOLEDEVICE=none

#tslib 运行需要的控制台,就是 LCD 屏幕 ,设定为 none

export setTSLIB_TSDEVICE=/dev/event0

#触摸屏设备文件

export set TSLIB_FBDEVICE=/dev/fb0

#LCD 显示器设备文件

export setTSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

# tslib 库配置文件路径

export set TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

# tslib 库插件的目录

export set TSLIB_CALIBFILE=/etc/pointercal

#触摸屏校正配置文件的路径

export setQTDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm

#QT 库的路径

export setQPEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm

#对于 QT 4 Embedded 版本同上

export set PATH=$QTDIR/bin:$PATH

#加入到 PATH

export setQWS_MOUSE_PROTO=tslib:/dev/event0

#触摸屏设备文件

export set QWS_DISPLAY=LinuxFb:/dev/fb0

#LCD 显示设备文件

export set QWS_SIZE=800x600

#显示区域大小,可以不加

export setLD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

#加入到 LD_LIBRARY_PATH

 

配置步骤4 采用nfs方式挂载根文件系统;

详见文档《【配置】在虚拟机Ubuntu下NFS网络文件系统建立 Version 2012.11.12》

配置步骤5 ARM板触摸屏校准

超级终端中输入:

/usr/local/tslib/bin/ts_calibrate

 

配置步骤6 自己编写程序,验证下

1、生成Makefile

在项目.pro同级文件目录下执行../qt-4.7.1/../qmake(按自己arm qt的安装路径来设置)

2、编译

qmake结束后,在Makefile相同文件目录下执行make

3、检验

通过file ./filename 来检验是否为ARM可执行文件。出现的信息中有ELF ARM字样即可,有x86则不可。

4、拷贝到ARM板NFS文件系统的某个位置下

5、执行程序

./filename -qws -font wenquanyi &

 

//有需要可继续添加

以上子环境C配置完毕

注意事项 在ARM上执行Qt程序要加上-qws指令,如果有指定字体库还要加-font

 

 

 

子环境D配置:QWT配置安装

配置步骤1 

解压qwt压缩包,进入目录qwt-5.2.1

 

配置步骤2

1、ARM版

1)qmake(使用ARM版本qmake)

2)打开目录下(有的在qwtconfig文件夹里)的qwtconfig.pri配置文件,屏蔽designer的编译。有这条语句:

  QWT_CONFIG     += QwtDesigner

加“#”注释掉。然后再编译就通过了。

另外,qwtconfig.pri文件中有以下一句:

  #QWT_CONFIG     += QwtExamples

这就是说工程默认是不编译示例程序的,要编译的话,就去掉注释,OK,编译完后会在qwt-5.2.1/examples目录下生成bin目录,下面就都是示例程序。

3)#make

如果没有屏蔽designer的编译,这里编译将出现错误,是关于一些Designer的头文件找不到,因为qwt自定义了一些designer的插件,方便我们进行开发,所以需要一些Qt Designer的头文件,

 

将qwt ARM版本的默认安装目录/usr/local/qwt-5.2.1/lib/下的4个库文件分别copy到arm文件系统的/usr/share/qt4/lib目录下和/usr/lib目录下

 

 

PC版

我们要编译出一个qwt的X86版本

1、确保Qt库已经安装并配置完毕环境变量:

   export PATH=/usr/local/Trolltech/Qt-4.6.3/bin/:$PATH; 

2、#qmake (使用x86版本的qmake工具)

在已经安转有Qt开发环境,并且已经配置完毕的情况下,这步将顺利完成,如果出现错误,就请仔细检查Qt是否正确安转。

3、执行命令:

#make

这个版本不必注释designer部分,直接编译就会通过。

4、编译完成后,执行命令:

#make install

5、安装完毕后,就可以在/usr/local下看到安装好的qwt目录,执行最后一步,将库文件目录导入至环境变量:

#vi /etc/profile

打开后,在最后输入:

export LD_LIBRARY_PATH=/usr/local/qwt-5.2.1/lib:$LD_LIBRARY_PATH

6、在/qwt-5.2.1/designer/plugins/designer目录下会有两个编译好的库文件,如下图(可能只有一个):

 

 

 

将这两个库文件copy到/qtsdk-2010.01/bin/designer目录下,如下图:

 

 

 

ok,再打开qt creator看下:

 

 

 

 

配置步骤3 配置需要编译的项目的.pro文件

在使用qwt的工程文件中加入: INCLUDEPATH += /usr/local/qwt-5.2.1/include LIBS += -L"/usr/local/qwt-5.2.1/lib/" -lqwt

 

配置步骤

 

//有需要可继续添加

以上子环境D配置完毕

注意事项

 

 

 

子环境E配置:Sqlite3配置安装

配置步骤1 安装PC端Sqlite3

1、解压文件tar -zxvf sqlite-amalgamation-3.7.3.tar.gz.

2、解压后生成sqlite-3.7.3目录. cd 进入sqlite-3.7.3。

3、./configure

4、make

5、make install

配置步骤2 配置编译ARM端Sqlite3

ubunturoot用户登录

1、将sqlite-3.3.6拷贝到目录 /root 

# cd

2、解压sqlite-3.3.6 并到该目录下建立任意目录如 build

#tar -zxvf sqlite-3.6.22.tar.gz

#cd sqlite-3.6.22

#mkdir build

3、修改sqlite-3.3.6下的 configure

# vi configure

或者

#gedit configure

注释掉下列这些代码(以下重复两次的说明被修改文件中有两个都要改的相同字段)

#if test "$cross_compiling" = "yes"; then # { { echo "$as_me:$LINENO:: error: unable to find a compiler for building build tools" >&5 #echo "$as_me: error: unable to find a compiler for building build tools" >&2;} # { (exit 1); exit 1; }; } #fi

#else # test "$cross_compiling" = yes && # { { echo "$as_me:$LINENO:: error: cannot check for file existence when cross compiling" >&5 #echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} # { (exit 1); exit 1; }; }

 

#else # test "$cross_compiling" = yes && # { { echo "$as_me:$LINENO:: error: cannot check for file existence when cross compiling" >&5 #echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} # { (exit 1); exit 1; }; }

保存退出;

4、到刚才你所创建的目录下,创建Makefile文件

# cd build

#../sqlite/configure --disable-tcl --host=arm-linux注:这里可能会出现错误,只要把configure的路径改为绝对路径就可以了

这个时候你所创建的目录下应该有Makefilelibtool等四个文件

5、修改刚刚生成的Makefile文件

修改 BCC = arm-linux-gcc -g -O2 为 BCC = gcc -g -O2

6、由于是移植到arm上,为了在应用程序中引用sqlite3中的API接口,我们需要创建静态库,所以再次需要修改Makefile

修改内容如下:

找到 sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.la sqlite3.h 修改为 sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.a sqlite3.h 找到 -o $@ $(TOP)/src/shell.c .libs/libsqlite3.la \ 修改为 -o $@ $(TOP)/src/shell.c .libs/libsqlite3.a \

(注意:这次编译不会生成sqlite的可执行文件,因为只是为了得到sqlite3.a静态库,在build目录下找到隐藏目录.libs ,该目录下有sqlite3.a

7、重复步骤6把修改的Makefile中的sqlite3.a再改为sqlite3.la

8、执行makemake install命令,如下:

# make # make install

这时应该不会有错误了,可以在目录 /usr/local 下看到目录 lib bin include

9、修改sqlite3可执行文件的执行权限

#chmod 775 sqlite3

10、将lib目录下的libsqlite3.solibsqlite3.so.0、 libsqlite3.so.0.8.6 下载到开发板的 lib目录下,将sqlite3下载到 bin 目录下;

11、测试数据库:

a、新建数据库 [rootL-ant]# sqlite3 test.db SQLite version 3.6.18 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table film (number,name); sqlite> insert into film values (1,'aaa'); sqlite> insert into film values (2,'bbb'); sqlite> select * from film; 1|aaa 2|bbb sqlite>.quit [rootL-ant]#

b、测试程序

//test_sqlite.c #include <stdlib.h> #include <stdio.h> #include <sqlite3.h> staticintcallback(void *NotUsed, int argc, char **argv, char **azColName) { inti; for(i=0; i<argc;i++) { printf("%s = %s\n", azColName[i], argv [i]); } printf("\n"); return0; } intmain(int argc, char **argv) { sqlite3 *db; char*zErrMsg = 0; intrc; if( argc!=3 ) { fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]); } rc = sqlite3_open(argv[1], &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); } rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); if( rc!=SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); } sqlite3_close(db); return0; }

使用如下命令编译测试程序:

arm-linux-gcc test.c -L.libs -I /root/sqlite-3.3.6/build -lsqlite3 -static

解释-L指向静态库sqlite3.a所在目录,-I指向sqlite3.h 所在目录

c、在超级终端下测试

[rootL-ant]#./test_sqlite test.db "select * from film" number = 1 name = aaa number = 2 name = bbb [rootL-ant]#

 

配置步骤 

 

//有需要可继续添加

以上子环境E配置完毕

注意事项 如果测试出现问题:

最近有需要用到sqlite,去官网下了一个编译安装后打开sqlite3出现SQLite header and source version mismatch这个错误。

百度了一下,http://stackoverflow.com/questions/6696861/how-do-i-upgrade-my-sqlite3-package-on-debian-lenny 这个解决方案。但是尝试了一问题依旧。

其实sqlite默认安装到了/usr/local/lib中,但是系统旧的sqlite库在/usr/lib/i386-linux-gnu里,而这个目录被搜索的优先级目测应该高于/usr/local/lib。我把旧的libsqlite3.so.0, libsqlite3.so.0.8.6删除就能打开sqlite3了。

——光是删掉还不行,应在将两个文件从/usr/local/lib取出覆盖之

 

 

//有需要可继续添加子环境

 

 

 

附件目录

附件一

QT 移植环境搭建问题---补充《ok6410 Qt移植百科全书》

附件二

ok6410 Qt移植百科全书

以上以外部文件方式给出

附件三

使用qvfb进行测试和制作字体库

   
   

 

附件3

题目:使用qvfb进行测试和制作字体库

来源:构建QT4.7.1嵌入式开发环境

正文内容:

测试安装情况 把usr/local/Trolltech/qt-4.7.1-x86/examples/widgits/calculator文件夹复制到root/tmp文件夹下 启动QtCreatorFile-->Open File or Project...,打开root/tmp/calculator/calculator.pro 这里我们分两部分,首先编译x86下的,并运行在qvfb下,再编译arm下的,最后移到开发板下运行。 x86下的编译与调试 1.QtCreator界面左侧点击Projects图标,打开工程设置界面。 2.Edit Project Settings for Project calculator-->Build Settings-->Edit Build Configuration;单击Add,在下拉列表中选择Using Qt Version x86弹出对话框单击Ok按钮,在Edit Build Configuration:下会出现蓝色的Make x86 Release active.字符,单击激活x86 Release 3.Run Settings-->Edit run configuration;右侧单击Show Details按钮,在打开的下拉列表中Arguments;文本框中添加参数-qws 4.设置完毕,点击Edit图标,回到编辑界面。 5.编译:在Build菜单下,先Clean Project calculator,然后Build Project calculator,在右下角Compile Output窗口能看到编译信息 6.运行: 启动终端,输入/usr/local/Trolltech/qt-4.7.1-x86/bin/qvfb -width 800 -height 480 &,启动qvfb 回到QtCreatorBuild-->Run,运行程序,切换我们的qvfb窗口中,就可以看到calculator的运行界面了 制作适合嵌入式系统的字库文件 1、拷贝Windows/Fonts/simhei.ttf/usr/local/Trolltech/qt-4.7.1-x86/lib/fonts 2、在一个终端中运行 /usr/local/Trolltech/qt-4.7.1-x86/bin/qvfb -width 800 -height 480 &,启动qvfp 3cd usr/local/Trolltech/qt-4.7.1/bin,在另外一个终端中运行 ./makeqpf -qws,就可以看见MakeQPF界面 4、在Famiy中选择SimHei(刚刚拷贝过来的),Pixel Size中选择要生成的字体的大小20等;在OutPut Options中选择生成文件的目录,待会去那找生成出的文件 5、点击Generate Pre-Rendered Font...,待会就会显示生成成功,会生成出一个simhei_20_50.qpf2文件 6、移除之前拷贝过来的simhei.ttf,要不然看不到效果(我现在也不知道为什么) 7、关掉MakeQPF,重新运行./makeqpf -qws -font simhei,这次显示的界面就和上次不一样了,字体大小明显发生了变化 8、你也可以试试其他的文件cd /usr/local/Trolltech/qt-4.7.1-x86/examples/widgets/calendarwidget,运行./calendarwidget -qws -font simhei 和运行 ./calendarwidget -qws的默认字体,比较一下看看 9Enjoy it! You have Done!

 

 

 

 

 

 

 

 

附件2

题目:

来源:

正文内容:

 

 

posted @ 2012-12-08 11:07  MooreZHENG  阅读(678)  评论(0编辑  收藏  举报