300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

时间:2021-06-16 03:37:50

相关推荐

Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

参考:

/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html

/dongliqiang/archive//08/30/4500002.aspx

环境:虚拟机Fedora12(建议安装Vmware Tools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。(minicom经常打不开ttyUSB0设备,我的解决方法是,打不开时就将USB串口移除,运行minicom,然后再接上USB串口,此时运行minicom一般都能打开设备)

软件准备:

到/downloads-cn下载最新版的软件包,当前是:

用于 Linux/X11 32位 的 Qt Creator 1.3.1 二进制软件包qt-creator-linux-x86-opensource-1.3.1.bin(/downloads/qt-creator-binary-for-linux-x11-32-bit)

用于嵌入式 Linux 的 Qt 库 4.6.2包qt-everywhere-opensource-src-4.6.2.tar.gz(/downloads/embedded-linux-cpp)

下载tslib1.4,这个忘了在哪下载的了,网上有很多,有些不能用,大家自己找个能用的吧。

*以下安装方法主要来自文章/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html

将 qt-everywhere-opensource-src-4.6.2.tar.gz 压缩包解压为3份,分别编译 PC ,嵌入式 x86 和 arm 三个版本。

我在root目录下建立tmp文件夹,将qt-everywhere-opensource-src-4.6.2.tar.gz直接解压后复制2分,分别命名为pc、x86、arm。

1. 编译 PC 版: ///估计是虚拟平台上用的

{

进入pc目录

#./configure

# gmake

# gmake install

安装过程比较长,没有碰到过错误。

}

2. 编译嵌入式x86版 ///x86平台,可能是真实的,可以运行在所有的x86平台上的,.试试看

{

进入x86目录

# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb

# gmake

# gmake install

安装过程比较长,没有碰到过错误。

编译安装PC版中的 qvfb:

进入pc/tools/qvfb/目录

#make

编译完毕,将pc/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目录。

}

3. 编译嵌入式arm版(需要 arm-linux-gcc 的支持):

{使用友善自带的ARM-Linux GCC 4.3.2编译完了,程序移植到开发板上后,出现Segmentation Fault错误,按原文,使用4.1.2正常。

直接将arm920t-eabi.tgz解压缩到根目录,不可以像文章中说的那样“我把它放在:/usr/local/arm/4.1.2/ ”,最起码我放过去后出错了。

把编译器路径加入系统环境变量,运行命令:

#gedit /root/.bashrc

编辑/root/.bashrc文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

编译tslib对触摸屏支持:

下载,tslib1.4.tar.gz,解压后:

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

# make

# make install

我下载的包解压后没有configure文件,需要运行autogen.sh后才能生成。

设置环境变量,以便编译时找到相关的库:

# export CPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi

# export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

修改qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):

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

这一步必须有,不然肯定出错。

配置:

必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ”参数, 不然安装后不在QtEmbedded-4.6.2-arm文件夹下,而是覆盖了QtEmbedded-4.6.2。

# ./configure \

-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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

上面划掉的蓝色内容,可以不要的,这样编辑也不会出错(虚拟机搞坏了,不得已重装,配置参数时忘了干上面的工作了,结果发现没出错)。

关于配置参数,参照一下这篇文章吧,可以用configure -embedded –help查看。

/blog/?p=582

如果你放弃配置,则使用命令:# gmake confclean

编译:# gmake

安装:# gmake install

安装完成后,在 /usr/local/Trolltech 目录中有三个文件夹:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-4.6.2-arm。

}

4、移植

我是通过NFS启动的系统,具体操作可以参照友善的手册,在/download.asp有下载,在第5.5.3节通过NFS启动系统。

将Fedora12上 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪,看原文吧。

将Fedora12上 /usr/local/tslib 中的库复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即将/usr/local/tslib下的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夹下。

如果运行时还缺少其他的库,复制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share",命令查看需要哪些共享库,一起复制过去。

为支持触摸屏,开机自动设置环境变量,在2440的 /etc/profile中追加:

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

export TSLIB_ROOT=/usr/local/lib

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

取消/usr/local/etc/ts.conf中的第一个注释:

# module_raw input (去掉#,并且该行顶格)

我编辑时没有“#”

启动Micro2440运行 /usr/local/bin/ts_calibrate 校正触摸屏。

到此Qt4.6.2的移植暂告一段落,移植还没有完,此时如果在开发板上运行Qt4.6.2-arm编译的程序,则会出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。

5、安装Qt-creator-1.3.1

把下载的qt-creator-linux-x86-opensource-1.3.1.bin文件拷到一个目录(如前面的/root/tmp目录),进入目录:

设置qt-creator-linux-x86-opensource-1.3.1.bin文件为可执行

#chmod +x qt-creator-linux-x86-opensource-1.3.1.bin

安装:

# ./ qt-creator-linux-x86-opensource-1.3.1.bin

启动安装界面,默认一路Next即可。

*如果我们下载的是Qt的SDK(qt-sdk-linux-x86-opensource-.02.bin),这里可以选择安装Qt的开发环境,这样,在前面安装pc版Qt那步就可以省了,关键是可以省出很多时间的。

6、Qt-creator开发环境的配置

启动Qt-creator。

在Qt-creator菜单栏Tools—〉Options…打开Options窗口。

在Options界面左侧,点击Qt4—〉Qt Versions右侧显示Qt Versions设置界面。

在Qt Versions界面中点击那个蓝色的大“╋”号图标

在下方Version Name:文本框内输入Qt的版本名,可以随便填,能区分各个版本即可(如pc版取Qt4.6.2-pc、x86版取QtE4.6.2-x86、arm版取QtE4.6.2-arm)。

单击Qmake Location:右侧Browse…按钮,在弹出的“Select QMake Executable”窗口中找到对应版本的qmake程序(按照我们前面安转的,pc版路径:/usr/local/Trolltech/Qt-4.6.2/bin/qmake;x86版路径:/usr/local/Trolltech/QtEmbedded-4.6.2/bin/qmake;arm版路径:/usr/local/Trolltech/QtEmbedded-4.6.2-arm/bin/qmake),单击打开,回到Qt Versions界面。

回到Qt Versions界面,单击Debugging Helper:右侧Rebuild按钮,等待片刻,看到Debugging Helper:后出现一个绿色的“√”即可。

同理完成其他版本的添加。

添加完毕,单击OK按钮关闭Options窗口。

到此,Qt-creator配置完毕(我暂时就配置了这些)。

7、一个例子

从usr/local/Trolltech/QtEmbedded-4.6.2/demos下复制books例程到root/tmp文件夹下。

启动Qt-creator,File—〉Open File or Project…,打开root/tmp/books/books.pro。

这里我们分两部分,首先编译x86下的,并运行在qvfb下,再编译arm下的,移到开发板下运行。

7.1、x86下的编译与调试

在Qt-creator界面左侧点击Projects图标,打开工程设置界面。

从上往下,

在Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:单击Add,在下拉列表中选择Using Qt Version “QtE4.6.2-x86”弹出对话框单击Ok按钮,在Edit Build Configuration:下会出现蓝色的Make QtE4.6.3-x86 Release active.字符,单击激活QtE4.6.3-x86 Release。

在Run Settings——〉Edit run configuration:右侧单击Show Details按钮,在打开的下拉列表中Arguments:文本框中添加参数“-qws”。

设置完毕,点击Edit图标,回到编辑界面。

编译:在Build菜单下,先Clean Project “books”,然后Build Project “books”,在右下角Compile Output窗口能看到编译信息(按我们上面这样走来,到此编译不会出问题的)。

运行:

启动终端,# /usr/local/Trolltech/QtEmbedded-4.6.2/bin/qvfb -width 800 -height 480 &,启动Qvfb。

回到Qt-creator,Build——〉Run,运行程序。

切换我们的Qvfb窗口中,是不是看到Books运行的界面了。

调试:Debug——〉Start Debugging——〉Start Debugging,即可启动调试(请保证books路径中没有中文名,即不要把books工程放在了某个含有中文字符的文件夹下,不然无法启动调试)。

此时感觉如果前面编译选项Edit Project Settings for Project books——〉Build Settings——〉Edit Build Configuration:选择Debug项,则调试启动速度比Release时的要快很多。

7.2、arm编译并移植

编译:在Projects设置界面下,选择Using Qt Version “QtE4.6.2-arm”项,余下参数不变,build。

复制编译好的文件(也许还有images文件夹)到2440的NFS文件系统的某个目录下,我直接把books文件夹复制过去了(在Fedora12 文件系统下是/opt/FriendlyARM/mini2440/root_qtopia/home/plg文件夹下)。

运行及错误处理:

在minicom下面,ps一下,找到qpe进程对应的PID,比如1234,然后通过kill 1234杀死Qtopia。

进入books目录,执行./books –qws,此时就会出现前面讲到的“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。

我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件libstdc++.so.6.0.8(通过右键属性——〉基本,可以看到链接的文件),复制并重命名为libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib文件夹下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。

*重命名其实是比较野蛮的方法,可以用ln命令的,参照下面这篇文章……

/a263238386/blog/item/362f01ce7b11a10a93457eae.html

然后再运行./books –qws,看问题是不是解决了!

这里有个新的问题还没解决,就是在开发版上运行时字非常小,留着以后处理吧。

OK!至此,Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440算告一段落了,留下两个问题:字体非常小的问题、开发板上的远程调试,留待下次解决。

1 加载USB摄像头驱动程序

Linux下自带有ov511控制芯片的USB摄像头驱动,但是我们使用的是中星微的摄像头,所以无法直接使用。目前Linux下的开源USB摄像头驱动spca5xx支持中星微的摄像头。在网上下载好源码,交叉编译成内核模块后使用insmod命令加载到系统中去。把摄像头连接到开发板上,发现可以识别到摄像头,下面我们就可以进行摄像头图像采集编程了。

2 Linux下的视频采集编程接口简介

Linux对于视频采集设备的支持,是通过Video For Linux实现的,通常可以简称为V4L,现在较高版本的Linux内核都已经包含了Video For Linux。Video For Linux是为各种电视卡,以及并口和USB接口的音视频采集设备提供统一的编程接口,在Linux 下,视频采集设备的正常使用依赖于对Video For Linux标准的支持。

3 基于Video For Linux的图片捕捉

基于Video For Linux的图片捕捉流程如图所示,主要包括三个部分:初始化,同步,读取数据。

命令“

rpm -Uvh libusb-0.1.8-2.1.i386.rp

由于友善之臂太吊了,触屏幕驱动已经完美搞定,而且光盘里还有Arm-linux-gcc 4.3.2,省了我不少事

这次移植很顺利

先移植tslib

解压之后,执行./autogen.sh

生成configure

然后

echo ac_cv_func_malloc_0_nonnull=yes>arm-linux.cache

这句很重要,大意是不使用malloc之类的,如果没有这个,极其有可能出错

最后

./configure --host=arm-linux --prefix=/opt/ts

接下来是QT

QT的configure参数

./configure \

-prefix /qtlib/ \

-release -shared \

-fast \

-pch \

-no-qt3support \

-qt-sql-sqlite \

-no-libtiff -no-libmng \

-qt-libjpeg \

-qt-zlib \

-qt-libpng \

-qt-freetype \

-no-openssl \

-nomake examples -nomake demos \

-optimized-qmake \

-no-phonon \

-no-nis \

-no-opengl \

-no-cups \

-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm\

-no-xinerama -no-xshape \

-no-separate-debug-info \

-xplatform qws/linux-arm-g++ \

-embedded arm \

-depths 16 \

-no-qvfb \

-qt-gfx-linuxfb \

-no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb\

-qt-kbd-usb \

-confirm-license \

-qt-mouse-tslib -I/opt/ts/include -L/opt/ts/lib

最后一句定义使用tslib作为鼠标驱动,-I和-L指定tslib的include文件和lib文件位置

为了节省时间,很多地方都nomake了

搞定,nfs到开发板上,再设置一下环境变量

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CONFFILE=/opt/ts/etc/ts.conf

export TSLIB_PLUGINDIR=/opt/ts/lib

export TSLIB_CALIBFILE=/etc/pointercal

export QTDIR=/opt/qt4

export QPEDIR=/opt/qt4

export PATH=$QTDIR/bin:$PATH

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

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

最后一句比较重要,大概是指定QWS的鼠标类型,即指定使用tslib,如果没有设置这个,QWS则不会对触屏有响应

运行demo里面的mousecalibration,完美成功~~~

接下来开始学一下QWebView的使用,写个简易浏览器试试看

(原文件名:video.jpg)

引用图片

图片捕捉流程见上图,主要包括3个步骤:

1)初始化:首先是使用open函数打开视频设备文件,而且是独占的可读模式。然后使用Video For Linux接口函数设置视频设备的数据通道,设置视频数据传输的模式,可选的有NSTC或者PAL等。为了方便读取图像数据,使用mmap函数建立内存映射,在应用程序中直接读取图像数据。最后就是设置要捕捉的图片大小,即分辨率,我使用的摄像头最大可以提供分辨率800*600,每秒25张图片。

2)同步:等待一帧视频数据采集完毕后才能读取数据,否则将出现错误,同时还可以对帧号进行操作。

3)读取数据:我们使用的中星微摄像头传输过来的图片已经是JPEG编码格式。

下图就是使用Video For Linux采集的320*240的jpeg格式图片。

/?p=559

在mini2440上移植qt embedded for linux 4.5.2

作者:孙晓明,华清远见嵌入式学院讲师。

【实验环境】

1、主 机:Fedora9 DVD 发行版

2、目标机:mini2440友善之臂

3、源码包:

ftp:///qt/source/qt-embedded-linux-opensource-src-4.5.2.tar.gz

4、编译器 arm-linux-gcc-4.1.2

/downloads/toolchains/arm920t-eabi.tgz

我这几天移植qt-embedded-linux-opensource-src-4.5.2 因为之前使用友善的 arm-linux-gcc-4.3.2编译qt-embedded-linux-opensource-src-4.5.2 没有错误,但是运行 例子程序example/widget/analogclock/analogclock -qws & 就会出段错误, 所有改用 openmoko的arm-linux-gcc-4.1.2编译, 最后可以成功看到界面。

移植的tslib1.4 在,并且运行ts_calibrate 五点校准,触摸屏是有反应的,并能生成/etc/pointercal

ts_test 也是好使的,拖拽都没有问题。 但是就是运行移植的 QTE的程序 触摸屏一点反应也没有。 顺便说一下,内核还是用的mini2440出厂时nand里的linux-2.6.29,没有动过,触摸屏已经是被内核支持了。

这是我配置的环境变量:

以下环境变量都是我在终端敲入的

export QTDIR=/usr/local/QtEmbedded-4.5.2-moko-arm

export QPEDIR=/usr/local/QtEmbedded-4.5.2-moko-arm

export PATH=$QTDIR/bin:$PATH

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

export TSLIB_ROOT=/usr/local/tslib

export TSLIB_TSDEVICE=/dev/event0

export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=Tslib:/dev/event

这是我安装tslib1.4的步骤:

一、tslib移植

第一步:解压tslib-1.4.tar.gz

tar -zxvf tslib-1.4.tar.gz

第二步:进入解压过的目录

cd tslib-1.4

第三步:执行tslib-1.4目录下的autogen.sh

./autogen.sh

第四步:执行autogen.sh脚本所生成的Makefile文件

在命令行打入以下命令:

echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache

./configure --host=arm-linux --prefix=/usr/local/tslib --cache-file=$ARCH-linux.cache

第五步:

make

make install

第六步:把指定安装目录下的tslib的文件都copy到你所挂载的根文件下

sudo cp -a /home/linux/tslib/* /opt/FriendlyARM/mini2440/root_qtopia/usr/local/tslib/

第七步:修改/opt/FriendlyARM/mini2440/root_qtopia/usr/local/tslib/ 下的etc目录中ts.conf文件

vi ts.conf 将第二行的#module_raw input修改成module_raw input 注意一定要顶格写否则程序执行时会发生读取ts.conf错误

Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440(一)

10-04-29 12:20 发表于:《南京嵌入式开发圈》分类:未分类

环境:虚拟机Fedora12(建议安装Vmware Tools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。(minicom经常打不开ttyUSB0设备,我的解决方法是,打不开时就将USB串口移除,运行minicom,然后再接上USB串口,此时运行minicom一般都能打开设备)

软件准备:

到/downloads-cn下载最新版的软件包,当前是:

用于 Linux/X11 32位 的 Qt Creator 1.3.1 二进制软件包qt-creator-linux-x86-opensource-1.3.1.bin(/downloads/qt-creator-binary-for-linux-x11-32-bit)

用于嵌入式 Linux 的 Qt 库 4.6.2包qt-everywhere-opensource-src-4.6.2.tar.gz(/downloads/embedded-linux-cpp)

到/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html下载arm920t-eabi.tgz(即arm-linux-gcc-4.1.2)(/downloads/toolchains/arm920t-eabi.tgz)

到/download.asp下载Root_Qtopia,我用的是友善光盘里的root_qtopia-0108.tar.gz(/linux/root_qtopia-0108.tar.gz)

下载tslib1.4,这个忘了在哪下载的了,网上有很多,有些不能用,大家自己找个能用的吧。

*以下安装方法主要来自文章/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html

将 qt-everywhere-opensource-src-4.6.2.tar.gz 压缩包解压为3份,分别编译 PC ,嵌入式 x86 和 arm 三个版本。

我在root目录下建立tmp文件夹,将qt-everywhere-opensource-src-4.6.2.tar.gz直接解压后复制2分,分别命名为pc、x86、arm。

1. 编译 PC 版:

进入pc目录

#./configure

# gmake

# gmake install

安装过程比较长,没有碰到过错误。

2. 编译嵌入式x86版:

进入x86目录

# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb

# gmake

# gmake install

安装过程比较长,没有碰到过错误。

编译安装PC版中的 qvfb:

进入pc/tools/qvfb/目录

#make

编译完毕,将pc/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目录。

3. 编译嵌入式arm版(需要 arm-linux-gcc 的支持):

使用友善自带的ARM-Linux GCC 4.3.2编译完了,程序移植到开发板上后,出现Segmentation Fault错误,按原文,使用4.1.2正常。

直接将arm920t-eabi.tgz解压缩到根目录,不可以像文章中说的那样“我把它放在:/usr/local/arm/4.1.2/ ”,最起码我放过去后出错了。

把编译器路径加入系统环境变量,运行命令:

#gedit /root/.bashrc

编辑/root/.bashrc文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

编译tslib对触摸屏支持:

下载,tslib1.4.tar.gz,解压后:

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

# make

# make install

我下载的包解压后没有configure文件,需要运行autogen.sh后才能生成。

设置环境变量,以便编译时找到相关的库:

# export CPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi

# export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

修改qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):

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

这一步必须有,不然肯定出错。

配置:

必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ”参数, 不然安装后不在QtEmbedded-4.6.2-arm文件夹下,而是覆盖了QtEmbedded-4.6.2。

# ./configure \

-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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

上面划掉的蓝色内容,可以不要的,这样编辑也不会出错(虚拟机搞坏了,不得已重装,配置参数时忘了干上面的工作了,结果发现没出错)。

关于配置参数,参照一下这篇文章吧,可以用configure -embedded –help查看。

/blog/?p=582

如果你放弃配置,则使用命令:# gmake confclean

编译:# gmake

安装:# gmake install

安装完成后,在 /usr/local/Trolltech 目录中有三个文件夹:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-4.6.2-arm。

4、移植

我是通过NFS启动的系统,具体操作可以参照友善的手册,在/download.asp有下载,在第5.5.3节通过NFS启动系统。

将Fedora12上 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪,看原文吧。

将Fedora12上 /usr/local/tslib 中的库复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即将/usr/local/tslib下的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夹下。

如果运行时还缺少其他的库,复制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share",命令查看需要哪些共享库,一起复制过去。

为支持触摸屏,开机自动设置环境变量,在2440的 /etc/profile中追加:

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

export TSLIB_ROOT=/usr/local/lib

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

取消/usr/local/etc/ts.conf中的第一个注释:

# module_raw input (去掉#,并且该行顶格)

我编辑时没有“#”

启动Micro2440运行 /usr/local/bin/ts_calibrate 校正触摸屏。

到此Qt4.6.2的移植暂告一段落,移植还没有完,此时如果在开发板上运行Qt4.6.2-arm编译的程序,则会出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。

编译QT4-embedded-4.4.3

# tar jxvf qt-embedded-linux-opensource-src-4.4.0.tar.bz2

# mv qt-embedded-linux-opensource-src-4.4.0 qt-embedded-linux-opensource-src-4.4.0-arm

# cd qt-embedded-linux-opensource-src-4.4.0-arm

#./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm –opensource -confirm-license -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -qt-mouse-tslib -qconfig nocursor -I/home/tslib-1.3/build/include -L/home/tslib-1.3/build/lib

参考““./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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“

其中-prefix /home/qt4arm 是你要安装的路径。-I/home/tslib-1.3/build/include -L/home/tslib-1.3/build/lib是你刚才编译好的tslib-1.3的两个文件夹路径。

几分钟后配置完毕

# make && make install

一共需要一个半小时(虚拟机下编译,本机配置为1G内存,AMD1.8G单核CPU)。

把所需要的库拷贝到开发板的相应的目录即可,最好和prefix参数的目录一致,像我的就是拷贝到/home/qt4arm/lib下,当然有的库你可以不需要拷贝的,运行程序提示缺啥就拷贝啥。

然后拷贝显示中文的文泉驿字体wenquanyi_160_75.qpf 到/home/qt4arm/lib/font下。

最后拷贝tslib-1.3下build文件夹到开发板相应地方。

3,设置坏境变量

export QTDIR=/home/qt4arm

export PATH=$QTDIR/bin:$PATH

export QWS_DISPLAY=LinuxFb:/dev/fb0

export QWS_SIZE=640x480

export QWS_SW_CURSOR=1

export QWS_MOUSE_PROTO=Tslib:/dev/event0

export QWS_KEYBOARD=TTY:/dev/tty0

export QT_ONSCREEN_PAINT=0

export PONTERCAL_FILE=/etc/pointercal

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

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_PLUGINDIR=/lib/ts

export TSLIB_CONSOLEDEVICE=/dev/tty

export TSLIB_FBDEVICE=/dev/fb0

mini2440 qt4 移植(转+自己添加)

LInux环境搭建与设置 -04-24 10:06:49 阅读1974 评论5 字号:大中小

由于mini2440的光盘里自带一个root_default.tgz根文件,因此省了很大一部分力气自己去裁剪,但是也有很大的缺陷就是:本身就对内核不熟悉,现在跳过了这一步,就更加不理解了。以后还是要补上来。

我做的时候现在fc8下试过,第一次是配置的时候“The tslib functionality test failed!”错误

但是不明白原因的,我是按照下面的配置来的还是出问题了。

去掉后根据./configure -h 的提示配置完成,gmake到某处时,错误中断。试了几次都是这样

也许是我的fc8并非完全安装吧。最后换到了亲爱的RH9.0下,按照下面的指示编译成功。不过还有个现象就是在fc8下安装qt-x11可以成功,RH9.0下安装qt-x11就失败了。可能是GCC版本的问题了。在RH9.0下我用的是tslib-1.3

1.编译tslib-1.4 (这部分很好ts-lib的编译还算顺利了)

解压到/home下

#./autogen.sh

#./configure --prefix=/home/duancp/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes (可以先生成个cache文件)

#make

#make install-strip //生成瘦身应用程序和库

2.安装arm-linux-gcc-3.4.1.tar.bz2

在根目录下解压,解压后的默认目录在/usr/local/arm/3.4.1

设置环境变量,运行命令:

vi /etc/profile

加入 export PATH=/usr/local/arm/3.4.1/bin:$PATH

3.编译qt-embedded-linux-opensource-src-4.4.3.tar.gz

tar zxf qt-embedded-linux-opensource-src-4.4.3.tar.gz

cd qt-embedded-linux-opensource-src-4.4.3

(我的QT的安装目录设置为根目录下的/minin2440)

./configure -prefix /mini2440 -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -qt-mouse-tslib -I/home/duancp/mytslib/include -L/home/duancp/mytslib/lib

上面的红色部分必须让找前面的tslib的目录设置,否则会出现“The tslib functionality test failed!”错误

./make

make install

cd example/qws/mousecalibtration

qmake &&make (生成mousecalibtration可执行文件,后面需要将其拷贝到根文件中)

(这一步实现时有问题,可能是环境变量没设置好)

4.制作根文件

我的工作目录是在根文件下,首先将root_default.tgz拷贝到根目录下,加压,生成root_default

cd /root/root_default

mkdir tslib

cd tslib

为了方便,将编译的tslib下的bin、etc、lib文件夹全部拷贝过来 (拷贝tslib支持库,我自己的理解了)

cp -a /home/duancp/mytslib/lib ./

cp -a /home/duancp/mytslib/bin ./

cp -a /home/duancp/mytslib/etc ./

cd etc

vi ts.conf (据说是ts.conf的大小有限制,所以必须裁剪,是具体情况而裁剪)

将里面的第二条语句(#module_raw inout)前面的“#”去掉,否则后面触摸屏将不能使用

cd ..

mkdir mini2440 (这里将mini2440作为了qpe目录,实现GUI程序)

cd mini2440

因为我的flash有64M,为了方便,将QT4.4.3的lib文件夹全部拷贝过来,但是要删除fonts内除了wenquanyi_120_50.qpf 之外的其他文件,否则太大

cp -a /mini2440/lib ./

rm -rf fonts

mkdir fonts

cp -a /mini2440/lib/fonts/wenquanyi_120_50.qpf fonts

将前面编译的QT的触摸屏自带程序拷贝过来

cp -a /*/example/qws/mousecalibtration/mousecalibtration ./

cd /root

解压mkyaffsimage.tgz,得到mkyaffsimage可执行文件

./mkyaffsimage root_default root.yaff2

得到根文件root.yaff2,如果要看一下大小,可以执行

ll root.yaff2 -h

这样可以将root.yaff2烧到板子上去了。

在板子上运行mousecalibtration的时候没有出现什么错误,可以正确的显示输入的汉字

目前在板子上运行的时候存在一定的问题:进入tslib运行ts_calibrate,总是提示ts_open: No such file or directory,这个问题一直没有解决,留在后面解决。

在板子上运行的时候环境变量如下: (设置环境变量)

export QTDIR=/mini2440

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

export PATH=$QTDIR/lib:$OPIEDIR/bin:$PATH

export QWS_MOUSE_PROTO=tslib:/dev/input/event0

export TSLIB_ROOT=/tslib

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_CONFFILE=/tslib/etc/ts.conf

export TSLIB_FBDEVICE='/dev/fb0'

export QWS_KEYBOARD='LIRC:/dev/lircd'

将上面的配置写成个脚本文件,开机时在初始化中开启就行了。

或者直接写到/etc/profile 里面就可以实现开机启动设置变量了。

要是在板子上运行的时候提示缺少某些文件的时候,就去在PC机上的linux下寻找,需要主要的是看若是提示缺少的文件是以个链接文件时,需要把链接对象也拷入

我在运行的时候缺少一个librt.so.1(具体记不得了,好像是这个)的文件,我的办法是把/usr/local/arm/3.4.1/arm-linux/lib下的该文件和其链接对象拷贝过来放在板子里的lib中,就ok了!

QTE4.5.2 移植成功,但群创7寸屏无响应 (已解决)

已解决

我这几天移植qt-embedded-linux-opensource-src-4.5.2

因为之前使用友善的 arm-linux-gcc-4.3.2编译qt-embedded-linux-opensource-src-4.5.2 没有错误,但是运行

例子程序example/widget/analogclock/analogclock -qws & 就会出段错误, 所有改用 openmoko的arm-linux-gcc-4.1.2编译,

最后可以成功看到界面。

移植的tslib1.4 在,并且运行ts_calibrate 五点校准,触摸屏是有反应的,并能生成/etc/pointercal

ts_test 也是好使的,拖拽都没有问题。

但是就是运行移植的 QTE的程序 触摸屏一点反应也没有。

顺便说一下,内核还是用的mini2440出厂时nand里的linux-2.6.29,没有动过,触摸屏已经是被内核支持了。

这是我配置的环境变量:

以下环境变量都是我在终端敲入的

export QTDIR=/usr/local/QtEmbedded-4.5.2-moko-arm

export QPEDIR=/usr/local/QtEmbedded-4.5.2-moko-arm

export PATH=$QTDIR/bin:$PATH

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

export TSLIB_ROOT=/usr/local/tslib

export TSLIB_TSDEVICE=/dev/event0

export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=Tslib:/dev/event

这是我安装tslib1.4的步骤:

一、tslib移植

第一步:解压tslib-1.4.tar.gz

tar -zxvf tslib-1.4.tar.gz

第二步:进入解压过的目录

cd tslib-1.4

第三步:执行tslib-1.4目录下的autogen.sh

./autogen.sh

第四步:执行autogen.sh脚本所生成的Makefile文件

在命令行打入以下命令:

echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache

./configure --host=arm-linux --prefix=/usr/local/tslib --cache-file=$ARCH-linux.cache

第五步:

make

make install

第六步:把指定安装目录下的tslib的文件都copy到你所挂载的根文件下

sudo cp -a /home/linux/tslib/* /opt/FriendlyARM/mini2440/root_qtopia/usr/local/tslib/

第七步:修改/opt/FriendlyARM/mini2440/root_qtopia/usr/local/tslib/

下的etc目录中ts.conf文件

vi ts.conf 将第二行的#module_raw input修改成module_raw input 注意一定要顶格写否则程序执行时会发生读取ts.conf错误

接下来是我的QTE配置:

解压源码包:

tar xzvf qt-embedded-linux-opensource-src-4.5.2.tar.gz

改名:

mv qt-embedded-linux-opensource-src-4.5.2 qt-embedded-linux-opensource-src-4.5.2-moko-arm

cd qt-embedded-linux-opensource-src-4.5.2-moko-arm

vim mkspecs/qws/arm-linux-g++/qmake.conf

在最后两行加入:

QMAKE_INCDIR = /usr/local/tslib/include

QMAKE_LIBDIR = /usr/local/tslib/lib保存退出。

退到qt-embedded-linux-opensource-src-4.5.2-moko-arm目录下,然后执行以下命令:

./configure -prefix /usr/local/QtEmbedded-4.5.2-moko-arm -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -no-armfpa -no-feature-QWS_CURSOR -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

已解决!原因是忘记加上面的两句了 触摸屏好使了

然后make make install

把/usr/local/QtEmbedded-4.5.2-moko-arm 拷贝到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/QtEmbedded-4.5.2-moko-arm

因为我用的是nsf网络挂在,所有不怕文件多。

我刚开始移植时也碰到了这种问题,网上搜了很多,好像是说在板子里运行程序时,启动时没找到相应的字体,删除一些其它字体就好了,我删除字体后(在 your QTDIR/lib/fonts/下),只剩下unifont_* 和wenquanyi_*, 运行程序的命令是 ./your programe -qws -fn wenquanyi .。这样运行起来的程序字体是正常的,但后来发现一个问题,就是因为我把其它字体都删除了,在一些程序中我想设置其他字体就做不了了,所以感觉这不是真正解决问题的方法,希望有高人指点一下

先用矢量字体调试,然后再转换为pcf字库,关键还是看需求,如果不是用特别大的字号而且板上flash空间较大的话,直接用ttf字库就可以,网上搜搜文泉驿

至于显示中文就更简单了,需要用到QTextCodec这个类

移植QT4.5 Segmentation Fault报错解决方法和字体偏小的办法

我想大多数人都跟我一样直接用友善提供的arm-linu-gcc 4.3.2的版本来编译QT程序,所以遇到这个错误是必然的。

这个错误的原因主要是因为程序在编写的时候,指针的处理不当,而出现在移植QT身上,是因为交叉编译器,优化过度了,因此有两个解决办法。

办法1:安装 eabi的,版本为4.1.2 的交叉编译器

详细可以参考/bbs/read.php?tid=22059

办法2:取消,交叉编译器的优化选项,去掉Makefile 的 -O2选项,不过程序会变得稍微大了,本人采用方法2,暂时没遇到什么特殊情况。

PS:对于QT4.5.1的移植字体,可能偏小,这是由于字体库的原因,QT本身不带汉字的字库,所以只能选择一个稍微好看的字库,在执行的时候,可以输入 ./hello -qws -fn SIMHEI &

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。