QT4.6.3应用程序移植到Qtopia-2.2.0的ARM中

2024-01-09 09:18

本文主要是介绍QT4.6.3应用程序移植到Qtopia-2.2.0的ARM中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440

参考Fedora12 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到micro2440后自己写下自己的操作经历

环境:虚拟机Fedora9(建议安装Vmware Tools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。
软件准备:
到 http://qt.nokia.com/downloads-cn下载最新版的软件包,当前是:

1、用于 Linux/X11 32位 的 Qt Creator 2.0.0 二进制软件包Qt SDK for Linux/X11 32-bit** (371 MB)( http://get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.04.bin)
2、用于嵌入式 Linux 的 Qt 库 4.6.3包qt-everywhere-opensource-src-4.6.3.tar.gz(Qt libraries 4.6.3 for Linux/X11(161 MB))
3、到光盘linux/中复制arm-linux-gcc-4.3.2.tgz准备待用

4、准备友善光盘里的root_qtopia-20100108.tar.gz
将 qt-everywhere-opensource-src-4.6.3.tar.gz 压缩包解压为3份,分别编译 PC ,嵌入式 x86 和 arm 三个版本。

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

5. 编译 PC 版:
进入pc目录
#./configure
# gmake
# gmake install
安装过程比较长,没有碰到过错误。

6. 编译嵌入式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.3/bin目录。
因为编译时间比较长,5、6步可以同时进行,以节省时间!

7、编译嵌入式arm版(需要 arm-linux-gcc 的支持):
使用友善自带的arm-linux-gcc 4.3.2编译完了,安装到/usr/local/arm/4.3.2目录
把编译器路径加入系统环境变量,运行命令:
#gedit /root/.bashrc
编辑/root/.bashrc文件,在最后一行加上 export PATH=/usr/local/arm/4.3.2/bin:$PATH
使用source /root/.bashrc加载一下

8、编译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后才能生成。
9、进入qt-everywhere-opensource-src-4.6.3-arm目录编译安装
首先先配置:
注:必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm ”参数, 不然安装后不在QtEmbedded-4.6.3-arm文件夹下,而是覆盖了QtEmbedded-4.6.3。
# ./configure /
-prefix /usr/local/Trolltech/QtEmbedded-4.6.3-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开始至此黏贴到超级终端上,注意/后面不能有空格,如果编译出现错误,删除整个目录重新解压重新编译应该就不会出错了)
编译:# gmake
安装:# gmake install

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

10、移植
我是通过NFS启动的系统,具体操作可以参照友善的手册,在 http://www.arm9.net/download.asp有下载,在第5.5.3节通过NFS启动系统。
[root@localhost ~]# service nfs start
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS 守护进程:                                        [确定]
启动 NFS mountd:                                          [确定]
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:71:D5:B3 
          inet addr:192.168.1.229  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe71:d5b3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:302975 errors:0 dropped:0 overruns:0 frame:0
          TX packets:103592 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:23765894 (22.6 MiB)  TX bytes:115864728 (110.4 MiB)
          Interrupt:19 Base address:0x2024

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2982 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2982 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:156260 (152.5 KiB)  TX bytes:156260 (152.5 KiB)

[root@localhost ~]#
得到Fedora9上eth0的ip为192.168.1.229
我的共享目录为/opt/FriendlyARM/mini2440/root_qtopia
连接串口后在nor flash启动或nand flash启动立即按任意一个按键进入vivi模式,键入    q进入shell of vivi
>param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.229:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.229:192.168.1.229:255.255.255.0:sbc2440.arm9.net:eth0:off"
>boot
启动系统后可以ls下检查是否为挂载的文件系统(首先在/opt/FriendlyARM/mini2440/root_qtopia目录下建立一个1234.txt)
Please press Enter to activate this console.
[root@FriendlyARM /]# ls
1234      dev       lib       opt       sbin      usr
Settings  etc       linuxrc   proc      sys       var
bin       home      mnt       root      tmp       www
[root@FriendlyARM /]#
11、将Fedora9上  /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪

12、将Fedora9上  /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 (去掉#,并且该行顶格)
我编辑时没有“#”

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

13、安装Qt-creator-2.0.0
把下载的qt-sdk-linux-x86-opensource-2010.04.bin文件拷到一个目录(如前面的/root/tmp目录),进入目录:

设置qt-sdk-linux-x86-opensource-2010.04.bin文件为可执行
#chmod u+x qt-sdk-linux-x86-opensource-2010.04.bin

安装:
# ./qt-sdk-linux-x86-opensource-2010.04.bin

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

*我们下载的是Qt的SDK(qt-sdk-linux-x86-opensource-2010.04.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.3-pc、x86版取QtE4.6.3-x86、arm版取QtE4.6.3-arm)。

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

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

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

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

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

7、一个例子
从usr/local/Trolltech/QtEmbedded-4.6.3/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.3-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.3/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.3-arm”项,余下参数不变,build。

复制编译好的文件(也许还有images文件夹)到2440的NFS文件系统的某个目录下,我直接把books文件夹复制过去了(在Fedora9 文件系统下是/opt/FriendlyARM/mini2440/root_qtopia/home/plg文件夹下)。
运行及错误处理:
在minicom下面,ps一下,找到qpe进程对应的PID,比如1234,然后通过kill 1234杀死Qtopia。
如果不kill  qpe的进程也可以,看是会看到界面有两层,一层是books一层是qtopia
进入books目录,执行./books –qws
如果前面步骤没错的话,就可以看到LCD上显示books的界面了!!
此时若出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。
解决办法是进入主机QtEmbedded-4.6.3-arm/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命令的

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

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

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

这里还有个小问题,root_qtopia里面不是有自带程序吗?
直接在开发板上的超级终端运行对应的程序如:
# cd /opt/Qtopia/bin/
# ./calculator
开发板上是能出现界面的
若在PC的超级终端上运行则会出现
./calculator: error while loading shared libraries: libqtopia2.so.2: cannot open
shared object file: No such file or directory
原因是在boot启动qtopia系统后,默认已经配置好qtopia环境了,在此环境下运行它的超级终端就相当于在此环境下运行,启动相应的程序就不用先配置了!
可以查考bin/qtopia的配置方式自己配置下:
#!/bin/sh

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH


TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
    export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB:/dev/input/mice"
    if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
        rm /etc/pointercal
    fi
else
    export QWS_MOUSE_PROTO="USB:/dev/input/mice"
    >/etc/pointercal
fi
unset TS_INFO_FILE

export QWS_KEYBOARD=TTY:/dev/tty1
export KDEDIR=/opt/kde

export HOME=/root

exec $QPEDIR/bin/qpe 1>/dev/null 2>/dev/null
我是直接复制
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
export QWS_KEYBOARD=TTY:/dev/tty1
export KDEDIR=/opt/kde
export HOME=/root
配置完后执行./calculator –qws
新的问题出现了,鼠标不能移动了,呵呵
此问题有待解决,正在学习中,知道的补上。谢谢

这篇关于QT4.6.3应用程序移植到Qtopia-2.2.0的ARM中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586634

相关文章

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

Java Web应用程序的推荐目录结构

以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。 找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个: ├── pom.xml└── src├── main│ ├── java│ │ └── myg

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

ARM 虚拟化介绍

0.目录 文章目录 0.目录1.概述 1.1 Before you begin 2.虚拟化介绍 2.1 虚拟化为什么重要2.2 hypervisors的两种类型2.3 全虚拟化和半虚拟化2.4 虚拟机和虚拟CPUs 3.AArch64中的虚拟化4.stage 2 转换 4.1 什么是stage 2 转换4.2 VMIDs4.3 VMID vs ASID4.4 属性整合和覆盖4.5模拟

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.