当前位置:编程学习 > wap >>

ubuntu下移植QT基本流程

配置tftp
配置tftp服务的步骤:
1、安装相关软件包:tftpd(服务端),tftp(客户端),xinetd
sudo apt-get install tftpd tftp xinetd 

2、建立配置文件
在/etc/xinetd.d/下建立一个配置文件tftp
sudo vi tftp
在文件中输入以下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出

3、建立tftp服务文件目录(上传文件与下载文件的位置),并且更改其权限
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R

4、重新启动服务
sudo /etc/init.d/xinetd restart
至此tftp服务已经安装完成了,下面可以对其进行一下测试。(假设在当前目录下有一个测试文件test.txt)
$tftp 127.0.0.1                      
tftp> put test.txt
Sent 1018 bytes in 0.0 seconds
tftp> get test.txt
Received 1018 bytes in 0.1 seconds
tftp> quit
$
 
通过get命令,可以把当前目录下的test.txt文件,通过tftp上传到它的服务文件目录。这时,在/tftpboot下面会出现test.txt文件。通过put命令,可以从/tftpboot下,下载test.txt文件。这样就验证了tftp服务配置的正确性。当文件上传与下载结束后,可以通过quit命令退出。
 
严格按照以上步骤配置tftp服务,一般都可以成功。如果出现无法get或者put的时候,可以查看一下防火墙是否关闭。
配置nfs服务器
在ubuntu下安装、配置nfs服务的步骤如下:
1、安装nfs
Ubuntu上默认是没有安装nfs服务器的,因此我们首先安装nfs服务器端:
$sudo apt-get install nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。
 
2、配置/etc/exports
nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。
例如,我们要将根目录下的rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:/rootfs *(rw,sync,no_root_squash)
其中:/rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
其它nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
 
3、重启服务
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart
 
4、测试nfs
此时可以运行以下命令来显示一下共享出来的目录:
$showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs挂载到/mnt下:
$ sudo mount -t nfs localhost:/rootfs /mnt
可以运行df命令查看是否挂载成功。查看后可以使用以下命令卸载:
$ sudo umount /mnt

QT4向s3c2410平台移植
1.开发平台:ubuntu 8.10,交叉编译器版本3.4.5(arm-linux-gcc),qt-embedded-linux-opensource-src-4.4.3.tar.gz。
2.目标平台:s3c2410,320*240触摸屏 ,linux-2.6.26.5,u-boot-1.3.4
3.移植步骤如下:
(1)首先配置linux内核,支持LCD驱动,然后点亮你的屏,并且支持framebuffer,具体的内核配置如下:
      Device Drivers  --->    Graphics support  --->  <*> Support for frame buffer devices  --->  
                                                           <*>   S3C2410 LCD framebuffer support 
当然里面还涉及一些细节,这里就不一一说了,如果大家这块有问题,可以提出来!
(2)如果你想支持USB鼠标和USB键盘,只需配置内核既可:
      Device Drivers  ---> [*] HID Devices  --->    <*>   USB Human Interface Device (full HID) support 

(3)编译内核进行测试。
(4)接下来我们在以上工作的基础上开始移植QT4。首先下载源码:ftp://ftp.trolltech.no/qt/source/qt-embedded-linux-opensource-src-4.4.3.tar.gz,放在你普通用户的一个目录,比如/home/yoyoili/qt4_port.解压.
 
 (5)进入解压好的目录。

(6)然后就是很关键的配置,QT4的移植是通过配置来是否支持某种特性,比如openssl等等。那么根据你自己的需求呢进行相应的配置就可以了,这里参考网站的一篇文章进行了配置,具体如下:
./configure \
  -prefix  /home/yoyoili/qt4_port/qt/build \  //指定安装的目录,与开发板上运行的目录一致
  -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 \
  -no-armfpa
这里我没有去实现触摸屏的校准,由于时间的问题,以后陆续补充完整,如果支持触摸屏在加一个:-qt-mouse-tslib。
这个过程如果涉及很多问题,一般都是你的系统缺少了某些库的问题,我的ubuntu 8.10相应的库都安装的比较齐全,没有错误,如果你是fedroa,只需要完全安装,就不会有什么问题,这个是验证过的!

(7)然后就是make && make install,编译和安装了,如果好的话,就会在你的安装目录,也就是 /home/yoyoili/qt4_port/qt/build 有相应的如下目录:bin  include  lib  mkspecs  plugins  translations,大家可以看看里面的内容。这里我们关心的是一个lib,就是库文件,以后交叉编译好的程序在板子上跑起来以后都需要这些库。把所需要的库拷贝到开发板的相应的目录即可,这里比如:cp /home/yoyoili/qt4_port/qt/build/lib/libQt* /home/yoyoili/source/rootfs/home/qt/build/lib,当然有的库你可以不需要拷贝的。

(8)然后拷贝显示中文的文泉驿字体,这里比如:cp /home/yoyoili/qt4_port/qt/build/lib/fonts/wenquanyi_160_75.qpf /home/yoyoili/source/rootfs/home/qt/build/fonts (前面的路径就是编译并安装以后的目录,这个字体就是这个目录的lib/fonts下面 ,当然后面就是我们开发板根文件系统的目录)

(9)测试,我们用源码自带的程序来进行测试,比如在源码的example里有很多,你只需qmake && make就可以了,然后把可执行文件拷贝开发板上用的根文件系统。

(10)设置相应的环境变量,这个环境变量是给开发板使用的,不是给你的PC机!具体如下:
      export QTDIR=/home/qt/build
      export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  //(否则找不到库)
      export PATH=$QTDIR/bin:$PATH
      export QT_QWS_FONTDIR=/home/qt/build/fonts   // (否则字体无法显示)
     当然如果你用触摸屏还有相关的设置,你也需要在这里添加!

(11)运行我们的程序:
  ./test -qws -fn /home/qt/build/fonts/wenquanyi_160_75.qpf
然后你的屏上就有了显示。

(12)然后你可以在开发板上插上你的USB鼠标就可以来操作这个小QT程序了。
(13)如果你想玩键盘:
设置你的console=tty0既可以操作你的开发板了,你就可以玩命令了,那么这个console的参数的指定有两种方法,一个可以通过u-boot传递,这里比如:setenv bootargs root=/dev/nfs nfsroot=192.168.1.110:/home/yoyoili/source/rootfs ip=192.168.1.120 init=/linuxrc console=tty0,另一个就是通过内核,你只需配置内核既可以:具体如下:
  Boot options  --->     (root=/dev/nfs nfsroot=192.168.1.2:/home/yoyoili/source/rootfs ip=192.168.1.3 init=/linuxrc console=tty0)!

(14)这里说一下可能出现的问题:
  1.在编译你的QT程序的时候会有一个collect错误,应该是连接的qt4的库不是arm交叉编译工具编译的,两者连接有冲突。在file.pro中去掉对qt4库的连接即可,增加一行CONFIG -= qt,即可去掉。

  2.如果出现这个问题:/lib/libQtCore.so: undefined reference to `clock_gettim
解决的办法就是在Makefile里的LFAGS后添加一个 -lrt就可以。

  3.有的人用的交叉编译器是用的arm-softfloat-linux-gnu-gcc,所以在make编译的时候老是提示arm-linux-gcc找不到,解决这个问题的办法很多,一个方法就是重新制作你的交叉编译器,修改arm-softfloat.dat(好像是这个)将里面的TARGET修改为arm-linux就可以了,另一个方法就是修改QT4源码的mkspecs/qws/linux-arm-g++目录下修改qmake.config将arm-linux-gcc修改为arm-softfloat-linux-gcc,然后再make就行了。

  4.当然你可以用很多工具来编译你的程序,比如qtcreator,kdevelop! --------------------编程问答-------------------- up,收藏之... --------------------编程问答-------------------- up --------------------编程问答-------------------- --------------------编程问答-------------------- install --------------------编程问答-------------------- 顶,不错 --------------------编程问答-------------------- --------------------编程问答-------------------- 收藏了!!呵呵 --------------------编程问答-------------------- 要是都这么顺利就好了~ --------------------编程问答-------------------- 收藏之。。 --------------------编程问答-------------------- 学习了。。。 --------------------编程问答-------------------- 收藏! --------------------编程问答-------------------- 不错 收藏了 --------------------编程问答-------------------- 楼主,能否问个问题?

我在虚拟机的ubuntu下开发QT程序,现在写了个很简单的QT程序,比如,label->setText(tr("中文显示"));就是显示不出中文来...(前提我已经将编码格式设置为UTF-8了)

你是怎么让QT程序在ubuntu下显示中文的啊?

--------------------编程问答-------------------- QT移植中usb键盘不能输入  跪求指点 --------------------编程问答-------------------- 我的在配置参数加上-qt-kbd-usb选项后,配置不过:

-qt-kbd-usb:unknow argumeny

我$./configure -h,选项-qt-kbd-<driver> ...Possible values for <driver>:[tty linuxniout qvfb qnx]

我想qt移植使用USB键盘,怎么配置呢?求教各位了。
  --------------------编程问答--------------------
引用 13 楼  的回复:
楼主,能否问个问题?

我在虚拟机的ubuntu下开发QT程序,现在写了个很简单的QT程序,比如,label->setText(tr("中文显示"));就是显示不出中文来...(前提我已经将编码格式设置为UTF-8了)

你是怎么让QT程序在ubuntu下显示中文的啊?

label->setText(QString::fromLocal8Bit("中文显示"));
一般建议使用ts翻译文件处理
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,