本文介绍的关于mini2440的t4.7的移植和搭建环境的方法,主要是借鉴网上的一些博客和老师给的文档。参考文章:
http://www.360doc.com/content/11/1214/14/7899729_172184546.shtml
http://blog.chinaunix.net/uid-26663150-id-3245971.html
http://www.docin.com/p-693636033.html
http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html
http://hi.baidu.com/zy6666h/item/1ca216374df9c64d3175a13e
http://biancheng.dnbcw.info/linux/430648.html
软硬件信息:
开发板:mini2440
宿主机操作系统:Red Hat Enterprise Linux 5.1
arm-linux-gcc-4.3.2.tgz
arm-qte-4.7.0-20101105.tar.gz
fontconfig-2.4.2.tar.gz(qt4.7的补丁)
tslib-1.4.tar.gz
x86-qte-4.6.1-20100201.tar.gz
wenquanyi_120_50.qpf(字库)
为了最终能在开发板上跑一个我们写的测试程序,整个过程大致有以下 五步:
1.建立交叉编译环境arm-linux-gcc;
2.移植触摸屏驱动;
3.交叉编译qt4.7的库文件,然后移植到开发板上;
4.在我们的宿主机的操作系统Red Hat里面安装Qt;
5.建立和配置测试程序test,最后下载开发板上。
1.建立交叉编译环境arm-linux-gcc
在这里,我推荐使用arm-linux-gcc-4.3.2。之前我使用的是arm-linuc-gcc-4.5.1,结果在后面的触摸屏驱动移植上遇到了问题,最后使用了arm-linux-gcc-4.3.2才移植成功。
(1)解压arm-linux-gcc-4.3.2
#tar -xvzf arm-linux-gcc-4.3.2.tgz -C /
注意:C后面有个空格,并且C是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。执行该命令,将把arm-linux-gcc安装到/opt/FriendlyARM/toolschain/4.3.2目录下;
(2)修改个人配置文件.bashrc
#gedit/root/.bashrc
编辑/root/.bashrc 文件,注意“bashrc”前面有一个“.”,修改最后一行为 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。
说明:.bashrc是用户配置文件,在用户登录系统时,系统将会自动读取它,修改后要想及时生效,可以退出系统在登录,或者使用source .bashrc
(3)注销当期登录,重新登录后,命令行输入:
#arm-linux-gcc -v
如果出现下面信息,则说明交叉编译环境安装成功了。
2.移植移植触摸屏驱动
在这里,建议先触摸屏驱动移植在交叉编译qt的库文件,因为交叉的过程会用到驱动程序的库(这点本人不太确定)。以下是步骤:
(1)解压tslib-1.4.tar.gz
(2)进入解压后的文件夹:cd tslib
(3)执行:./autogen.sh
(4) 为免make过程出现错误,执行:
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
(5)执行: ./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --prefix=/usr/local/tslib
(6)执行:make
(7)执行:make install,文件夹/usr/local/tslib的内容如下:
(8)修改ts.conf内容
vi /usr/local/tslib/etc/ts.conf
最后内容如下:
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
(9)然后打包整个tslib的内容,下载到开发板里的对应路径下(/usr/local/tslib下);
(10)配置环境变量
vi /etc/profile
添加如下内容:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0 (你的开发板dev下的触摸屏设备节点文件,没有的话,就自己 创建一个,进入/dev/input/目录mknodevent0 c 13 64 )
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
(11)重启MINI2440,在终端下输入./ts_calibrate出现tslib的触摸屏五点校准画面,至此,tslib的安装移植成功完成。
3、交叉编译qt4.7的库文件,然后移植到开发板上
要在开发板上运行qt的应用程序,我们不仅需要有应用程序在ARM平台下的可执行的二进制文件,还需要应用程序所需要的Qt库文件,这些库文件同样需要交叉编译成适合ARM平台的文件。交叉编译后的生成的qt库文件, 挑出我们需要的文件下载到开发板相应的路径下面(路径名与它们在Red Hat的路径相同,即要与应用程序在宿主机交叉编译时的库文件的路径相同)。
(1)解压arm-qte-4.7.0-20101105.tar.gz,解压后的文件夹里面还有压缩包qt-everywhere-opensource-src-4.7.0.tar.gz,解压之。
#tar-zxvf arm-qte-4.7.0-20101105.tar.gz
#tar zxvf qt-everywhere-opensource-src-4.7.0.tar.gz
(2)制作配置文件,并放到qt-everywhere-opensource-src-4.7.0里面
#gedit autoconfig.sh
编辑文件如下:
#!/bin/bash
./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.7.0-arm \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24 \
-fast \
-optimized-qmake \
-pch \
-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-opengl \
-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
exit
(3)生成Makefile文件并编译安装
#chmod 755 autoconfig.sh
#./autoconfig.sh
#make
#make install
注意:步骤#./autoconfig.sh 会很漫长,而且执行到最后可能会在终端打印很多字符‘y’,不管它就是了。
(4)运 行mktarget脚本,将会从编译好的目标文件目录中,提取出必要的QtE-4.7.0库文件和可执行二进制示例,并打包为target-qte-4.7.0.tgz(打包过程会提示找不到或打不开某些文件或文件夹,不管它就是了)把它在开发板的根目录下解压,就可以使用了,如下命令
#tar xvzf target-qte-4.7.0.tgz –C /
这样,就会在/usr/local/目录下创建生成Trolltech目录,它里面包含了运行所需要的所有库文件和可执行程序。
(5)将/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts中的字体全部删除将 wenquanyi_120_50.qpf字体复制到fonts下:
#rm –rf /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts/*
#cp wenquanyi_120_50.qpf /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts/
(6)配置系统脚本文件
#vi /etc/init.d/rcS&
我们将看到系统的启动脚本,这个脚本的最后,启动的是qtopia:/bin/qtopia & 。我们将此行注释起来,并添加:/bin/qt4 &
接下来,我们修改位于开发板/bin目录下的脚本文件qt4(如果没有就建一个),其内容如下:
脚本的倒数第二行:/bin/test -qws表示的就是执行我们的测试程序。同时可以注意到此行上面的两行被注释掉了,假如你解除注释,并注释掉:/bin/test -qws 。那么重启开发板,将启动程序embeddedsvgviewer,再加上先前已经移植了触摸屏的驱动程序,则该程序能正常执行使用,这可以测试我们到这一步为止所做的工作的否目的是否达到了。
4.在我们的宿主机的操作系统Red Hat里面安装Qt
在Red Hat里面安装qt的开发环境,我们将能够开放出适应宿主的qt应用程序。然而,我们想要的是目标平台mini2440上的应用程序,这个就只要我们选择好编译选项就行了。
(1)安装Qt Creator
#tar-zxvf x86-qte-4.6.1-20100201.tar.gz
# chmod u+xqt-sdk-linux-x86-opensource-2010.01.1.bin
# ./qt-sdk-linux-x86-opensource-2010.01.1.bin
安装完毕后,桌面将显示Qt Creator的图标。
(2)安装补丁
#tar -zxf fontconfig-2.10.93.tar.gz
#cd fontconfig-2.10.93
# ./configure-prefix=/usr
# make
# make install
5.经过前面的步骤,我们已经搭建好了开发环境。接下来就写第一个程序——测试程序test
(1)打开Qt Creator,新建工程,选择Qt4 Gui Application,Base Class选择Qwidget(注意不要选择QMainWindow,否则编译的时候会出错,这可能是Qt4.7的bug),工程名取名为test;
(2)建好工程后,双击打开Forms文件下的widget.ui,然后将窗体的属性geometry设置为:Width 320 Height 240 (因为我的mini2440开发板的LCD是3.5寸,像素值为320X240),并在窗体的之间放置一个QLabel控件,适当修改其属性如下:
(3)点击“Tools | Options”,添加qmake,其中,一个qmake是用于生成X86平台的目标文件,另一个qmake是用于生成ARM平台的目标文件。结果如下图:
(4)点击Qt Creator左边的“Project”的图标,配置生成ARM平台的可执行程序的工程选项,如下图:
(5)接着,编译程序。
(6)在工程的根目录下找到可执行文件test,然后下载到开发板的/bin目录下,重启开发板,将能看到我们的qt程序。
以下链接可以下载文章中涉及的部分文件:
http://pan.baidu.com/s/1qWGtQAo