1、 基于 ARM7的 QT移植心得 暑假里主要学习 ARM 和 QT 编程,基于 ARM7的 QT 移植费了不少时间和功夫,在网上查了很多资料,尝试了很多次,也失败了很多次,遇到了各种各样的错误。因为涉及到的知识实在是太多了,所以在总结了经验与教训的基础上,觉得有必要花点时间写篇心得,希望可以为嵌入式爱好者以后也许会碰到的跨平台移植提供一点点的帮助。 一 移植实验的准备工作 1.开发板:我用的是 ARM7板子,三星的 S3C44B0。 2.操作系统: ubuntu10.04.其实,在 windows下也可以进行 ARM 实验,但是用惯了 linux系 统,再去用诸如 Cygwin这样的虚拟环境觉
2、得真的很差劲。而且我不是很喜欢用虚拟机,很不方便。所以想方设法让所有的工作(像编译,串口下载程序, NFS 挂载等)都在 linux下完成。 3.安装 qt-embedded-linux-opensource-src-4.5.3.tar.gz和qt-x11-opensource-src-4.5.3.tar.gz,用于 QT 编程。 4.Minicom的安装与配置(相当于 windows下的超级终端)。 5.Kermit的安装与配置(用来传送文件和下载程序到开发板)。 6.NFS 挂载,用来在开发板 运行 QT 程序。 7.另外,还得学会编译 uclinux的内核。这一步可以不做,在 NFS挂载
3、时,我在开发板上跑的操作系统是 uclinux。如果 NFS 挂载不成功,很可能是内核不支持,这就需要重新编译和烧写内核。以下详细说道。 二 以下是移植实验的详细步骤 1.安装 qt-embedded-linux-opensource-src-4.5.3.tar.gz 注:先安装 Linux下的 G+工具 #apt-get inatall g+ /已安装则不需要 把 qt-embedded-linux-opensource-src-4.5.3.tar.gz 拷贝到/home/resource 下 #cd /home #tar-zxvf /resource/qt-embedded-linux-o
4、pensource-src-4.5.3.tar.gz /解压 #./configure.如果把上述代码复制到终端命令行没有出错,则会出现一个提示选择信息,那是 QT 安装的版本选择信息,一般选择“ O”,意思是开源 (opensource),然后继续。等待一点时间。 #make.等待大概 2个小时 #make install.同样等待大概两个小时,安装完毕 注:若安装过程中出现问题,可能前两步安装没有到位,返回去检查。若 无 错 误 , 安 装 成 功 , 会 在 目 录/usr/local/Trolltech/QtEmbedded-4.5.3 下看到对应安装好的文件。 #cd /usr/lo
5、cal/Trolltech/QtEmbedded-4.5.3 #ls #cd /usr/local/Trolltech/QtEmbedded-4.5.3/bin #ls #mv qmake qmake-arm /修改 qmake为 qmake-arm #gedit /etc/bash.bashrc /添加 linux系统环境变量 在文件末尾加上环境变量 export PATH=$PATH: /usr/local/Trolltech/QtEmbedded-4.5.3/bin 保存关闭 #qmake-ar(按 Tab建,会出现 qmake-arm表示环境变量设置成功) 注:此步也比较重要,一个 l
6、inux系统多安装几个 QT 程序的话,会出现相同的 qmake 命令,所以为了区分 qmake,改名成 qmake-arm,而后面添加环境变量是因为以后编译 QT 应用程序要用到。 2.用同样的方法安装 qt-x11-opensource-src-4.5.3.tar.gz(此处省略步骤) 3.Minicom配置 #sudo apt-get install minicom 接下来配置: #sudo minicom -s 出现这样的配置界面: +-configuration-+ | Filenames and paths | | File transfer protocols | | Seria
7、l port setup | | Modem and dialing | | Screen and keyboard | | Save setup as dfl | | Save setup as. | | Exit | | Exit from Minicom | +-+ 选择 Serial port setup, 会看到这样的选项: +-+ | A - Serial Device : /dev/ttyS0 | | B - Lockfile Location : /var/lock | | C - Callin Program : | | D - Callout Program : | | E
8、 - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : No | | G - Software Flow Control : No | | | | Change which setting? | +-+ 输入前面对应的字母即可进入相应的选项。将选项 A的值设置为/dev/ttyS0 表示是串口 1,将选项 E的值设置为 115200,将选项 F设置为 NO(请根据实际情况配置) . 设置默认上传 /下载的目录, 选择 Filenames and paths , 会看到这样的选项: +-+ | A - Download direc
9、tory : /home/lingd/arm/download | | B - Upload directory : /home/lingd/arm/upload | | C - Script directory : | | D - Script program : runscript | | E - Kermit program : | | F - Logging options | | | | Change which setting? | +-+ 注意:开发板发送给 pc 的文件将保存在 Download directory 所设定的目录中,而 pc要下载到开发板的文件保存在 Uploa
10、d directory所设定的目录中 设置完成后, 选择” Save setup as dfl” ,保存为默认设置 . 然后选择“ Exit” ,即可进入 Minicom的主界面 ,按 Ctrl-A,再按 z,可以获取到 minicom CTRL-A命令的帮助信息 . 每次只需在终端输入 minicom,再给开发板上电,就进入了 minicom,相当于 windows下面的超级终端的使用。 4.kermit的安装与配置 # apt-get install ckermit 修改 kermit的配置文件 配置 - # vi /etc/kermit/kermrc 下面是使用 U-Boot和 Linu
11、x时推荐配置 : set line /dev/ttyUSB0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5 # 将上面的设置添加到“ /etc/kermit/kermrc”中 # /dev/ttyUSB0表 示使用 usb 转串口的连接线接开发板,如果是只用用串口线连接主机的话,需要设置为 /dev
12、/ttyS0 启动 - 启动 kermit,连接串口 : # kermit C-Kermitconnect # 现在就已经成功连接到串口了。 切换 - 按下 Ctrl + , 再按 c可以跳回 kermit C-Kermit 此时输入 c,即 connect即可连接到串口 发送文件 - kermit中输入 connect后 ,转入了 u-boot串口界面。 输入 loadb 0xc008000,启动开发板上的 kermit协议。 按下 Ctrl + , 再按 c, 切换到 kermit。 C-Kermit send /home/led.bin kermit开始传送,并且显示一个传送界 面,并动
13、态显示传送进度。 传送完毕后,输入 c,即 connect命令,回到 u-boot的串口界面,然后用命令 go 0xc008000运行程序。如果需要将程序拷贝到 flash中,和 windows下的超级终端一样使用,即用 cp 命令。 5.NFS 挂载 5.1.nfs原理是通过网络,将远程主机共享的文件系统,挂载到本机。Ubuntu 10.04上默认是没有安装 NFS 服务器的,首先要安装 NFS 服务程序: # sudo apt-get install nfs-kernel-server (安装 nfs-kernel-server 时, apt 会自动安装 nfs-common 和portm
14、ap) 这样,宿主机就相当于 NFS Server。 5.2修改配置文件 /etc/exports 在终端下用 # vim /etc/exports 打开 exports文件。 如果你没有配置过这个文件的话此文件应该是空的。在开始部分写入 /home *(rw,sync,no_root_squash) /home - 与客户 机共享的目录; * - 表示允许任意用户使用,也可以使用具体 IP; (rw,sync,no_root_squash) - rw,挂载此目录的客户机对此目录有读写权利; sync,; no_root_squash,挂载此目录的客户机享有主机 root的权利; 我 是 将
15、主 机 的 根 目 录 设 置 为 共 享 目 录 / *(rw,sync,no_root_squash) OK,保存,退出。 修改完成之后输入: # exportfs rv来使配置文件生效 5.3配置宿主机的 IP 配置宿主机的 IP,在命令行中 输入 # ifconfig 来查看本机的 IP地址。如果没有设置,可以用命令 # ifconfig eth0 192.168.0.18 来设置 IP。其中的 IP 地址可以根据具体情况来设定。设定完成后在通过 ifconfig来再次查看是否已经设定成功。 5.4启动宿主机 NFS 服务 安装完 NFS 服务后就可以通过 # /etc/init.d/
16、nfs-kernel-server restart( /etc/init.d/nfs-kernel-server start)来重新开启网络文件系统服务,以便后面的开发板挂载。 也可以通过 # /etc/init.d/nfs-kernel-server stop来停止。 5.5 目标板的挂载操作 给你的目标机上电,目标板上的 Linux操作系统起来以后,在 PC 机上 Ubuntu 操作系统上打开 minicom,通过串口向目标板发送 shell命令。 像主机操作一样,首先检查目标板(客户机)的 IP 是否与宿主机的IP 再同一个地址段上,否则用上面用过的命令进行检查和设置本地IP。 设置完 IP 之后可以 ping一下检查网卡、网线是否连接正确。 既在 minicom 中输入 # ping 192.168.0.18 (主机 IP 地址)连接