注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

(转载)Qtopia在ARM平台的移植(真相只有一个,不看不知道)  

2011-01-14 09:45:48|  分类: ARM学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Qtopia在ARM平台的移植

Qt编程 2009-04-26 20:45:44 阅读326 评论0   字号:大中小 订阅


 

安装两个工具:

QtopiaCore-4.3.5:

./configure -embedded x86 -qvfb -no-openssl

make

make install

QtopiaCore-4.3.5-arm:

./configure -embedded arm

make

make install


Qtopia是一种全方位的应用程序开发平台,一个图形界面框架(平台)。Trolltech提供三大基于嵌入式Linux的Qtopia版本:Qtopia手机版,Qtopia PDA版本和Qtopia消费电子产品平台。

QtopiaCore-4.3.5是在X86平台上运行的,在字符模式下运行,如果在图形模式下需要一个模拟字符环境的工具:qvfb,这是qt-x11下的一个可执行程序,把它拷到环境变量中。

用qtopiaCore-4.3.5编译qt程序,先运行qvfb,在另一个窗口运行qt程序,后面要加上参数 -qws ,就可以使程序在qvfb的模拟字符环境下运行了。


关于环境变量:

打开/etc/profile,在最后一行加入:

export PATH=/usr/local/Trolltech/Qt-4.3.5/bin:$PATH

export PATH=/usr/local/Trolltech/QtopiaCore-4.3.5/bin:$PATH

export PATH=/usr/local/Trolltech/QtopiaCore-4.3.5-arm/bin:$PATH


如果想用哪个编译器就保留,其他的用用#注释掉,保存退出,执行source /etc/profile

即可。


Qtopia移植到ARM上:

把程序用 QtopiaCore-4.3.5-arm编译后,移植到ARM上,运行.

出现错误,缺少libQtGui.so.4,把QtopiaCore-4.3.5-arm/lib下的这个库也传过来,运行,还是有错误,缺少库,按提示,把所有的库都传过来,其中有几个库:libstdc++.so.6,这是在/usr/local/arm/3.4.1/arm-linux/lib下。

所有的库都安装成功后,还要设置环境变量,export LD_LIBRARY_PATH=库所在路径

运行,又一个错误,无法找到/usr/local/Trolltech/QtopiaCore-4.3.5-arm/lib/fonts

这个是字体的文件夹,编译时默认的路径是这个,在这里找不到,所以要创建这个文件夹

因为文件系统中除了/mnt/yaffs,其他的都是不可写,可以用一种方法:

mount -t ramfs ramfs /usr/local/

这个是挂载内存文件系统,把/usr/local/写入内存中,就可在其中创建目录

mkdir /usr/local/Trolltech

mkdir /usr/local/Trolltech/Qtopia-4.3.5-arm

mkdir /usr/local/Trolltech/Qtopia-4.3.5-arm/lib

mkdir /usr/local/Trolltech/Qtopia-4.3.5-arm/lib/fonts


还要加一个命令,可以使用触摸屏:

ln -s /dev/fb/0 /dev/fb0

ln -s /dev/touchscreen/0raw /dev/ts


根文件系统的制作:

安装工具cramfs-1.1,里面有两个可执行文件cramfsck,mkcramfs,把这两个拷到/bin目录下。

把一个别人做好的根文件系统拿过来,如名为root.cramf。

执行:cramfsck -x rootfs root.cramf

这条命令是释放根文件系统,-x指定释放到哪个目录下

进入rootfs,可以修改制作自己的根文件系统,把Qt程序和需要的库文件放在一个指定目录,如/home,在/etc/profile中设置环境变量,把搜索库的路径设置为/home。

查看可执行文件需要哪个库,可以用arm-linux-readelf -a game | grep Shared

game是可执行文件,执行该命令会列出一些库,找到这些库文件,拷到根文件系统的lib下或/usr/lib下。

有ld-linux.so.2、 libdl.so.2、 libgcc_s.so.1、 libm.so.6文件、 libpthread.so.0、libstdc++.so.6,libQtCore.so系列文件、libQtGui.so系列文件、libQtNetwork.so系列文件

rootfs的/lib下放的是交叉编译器的一些库文件,注意版本要一致,如果可执行程序是用

3.4.1版编译的,那么/lib下就应该是3.4.1的库,如果这里面是2.95.3的库,那么运行程序时就会出错。

在/usr/local/Trolltech/QtopiaCore-4.3.5-arm/lib/fonts 下面有两个f打头的文件

fixed_120_50.qpf fixed_70_50.qpf,把这两个拷过来,放到根文件系统的对应目录下,就可以显示正常的英文了。


在rootfs的/etc/profile中,添加:

ln -s /dev/fb/0 /dev/fb0

ln -s /dev/touchscreen/0raw /dev/ts

export QWS_MOUSE_PROTO=linuxtp:/dev/ts 这个是让触摸屏生效

ifconfig eth0 192.168.220.10 把网卡地址改成同一网段

可以把一些长的命令简化:

alias mntfs='mount -t nfs -o nolock' 挂载根文系统指令


根文件系统做好后,就要生成.cramfs的文件,用以下命令:

mkcramfs rootfs rootfs.cramfs


mkcramfs的命令格式如下:

# mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile

其中:

-h为显示帮助信息;

-e edition为设置生成的文件系统中的版本号;

-i file是将一个文件映像插入这个文件系统之中(只能在Linux-2.4.0以后内核中使用)

-n name设定了Cramfs文件系统的名字;

dirname指明了需要被压缩的整个目录树;

outfile为最终的输出文件。

实际使用时常用如下格式:

# mkcramfs dirname outfile


cramfsck的命令格式如下:

cramfsck [-hv] [-x dir] file

其中:

-h 为显示帮助信息;

-v 使输出信息更详细;

-x dir 释放文件到dir所指出的目录中;

file 为希望测试的目标文件。


根文系统做好后,烧入开发板,执行应用程序,要加上参数“-qws”

因为用串口烧写rootfs非常慢,有一种非常方便的烧写方法,用到一个小工具imagewrite

把要烧写的rootfs放在imagewrite 文件夹下,挂载nfs,进入imagewrite文件夹,执行:

imagewrite /dev/mtd/0 rootfs.cramfs:1216k

不到一分钟就可以烧写完毕,会提示write file[rootfs.cramfs] complete!

然后重启,就可以进入刚烧写的文件系统了。

对于vivi:

imagewrite /dev/mtd/0 vivi:0

对于内核:

imagewrite /dev/mtd/0 zImage:192k


有时会烧写不成功,要多尝试,有的时候提示烧写成功,但是重启后就进不去了,这个就很麻烦,还得用串口再烧,不明白是什么原因,可能是rootfs没做好。这样就可以先做一个最小的rootfs,大概2M多,把它用串口烧进去,然后挂载nfs,再用imagewrite烧。

转载地址:http://xgc94418297.blog.163.com/blog/static/112966040200932684544497/
  评论这张
 
阅读(796)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017