Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337250
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-05-15 15:33:36

Qtopia 4.2.4 手机平台移植手册

Qtopia版本:

Qtopia-opensource-4.2.4,这个版本带有手机桌面环境

交叉编译器:

arm-linux-gcc 4.1.2 支持EABI

操作系统平台:

Linux -- Red Hat 9.0

开发板平台:

Arm -- TX2440A

 

 

 说明:由于移植完Qtopia后,根文件系统的大小是70M左右,如果我们使用的是64MNAND64MSDRAM,可能就装不下了,所以只能用挂载NFS的方法,实现qtopia的启动。(挂载NFS,参考《NFS服务器配置》),当然你也可以自己裁剪qtopia,可以裁到60M以下。

触摸屏校正程序:

tslib-1.4

tslib已经移植好,参考《tslib-1.4移植手册》,tslib的目录在根文件系统的/usr/local目录下

 

 下面开始移植:

安装目录是个比较重要的地方,编译Qtopia不同于其他的程序,Qtopia不应当在源码目录下编译。

首先最好设置两个目录,一个是源代码目录,一个是编译目录。

#mkdir qtopia,把qtopia源码包解压到该目录下,并改名为source

#tar xzvf qtopia-opensource-src-4.2.4.tar.gz

#mv qtopia-opensource-src-4.2.4 source

再建一个编译目录:

#mkdir target

然后进入target目录下,执行../source/configure ………,就可以在target目录下编译source的源码了。建这个目录是为了和qtopia进行交互,后面将会详细介绍。

再建一个安装目录,就是执行make install时的安装目录

#mkdir /home/yan/root_2.6.31/usr/local/qtopia 这个建在虚拟机下,同样要在根文件系统中创建这个目录,做为qpe的启动目录。

以下操作都是在source中进行的.

修改qtopiacore的一些宏定义:

进入source/qtopiacore/qconfig-qpe.h

首先注释掉关于鼠标光标的宏定义,让程序运行时,触摸屏中央有光标出现:

// Qtopia Core

/*

#ifndef QT_NO_QWS_CURSOR

# define QT_NO_QWS_CURSOR

#endif

*/

/*

#ifndef QT_NO_QWS_MOUSE

# define QT_NO_QWS_MOUSE

#endif

#ifndef QT_NO_QWS_MOUSE_AUTO

# define QT_NO_QWS_MOUSE_AUTO

#endif

*/

其它宏定义根据需要进行注释。

保存后将qconfig-qpe.h拷贝到global目录。

# cp qtopiacore/qconfig-qpe.h  qtopiacore/qt/src/corelib/global/

注释掉其他文件里的QT_NO_QWS_CURSOR的定义

# vim qtopiacore/qt/src/corelib/global/qfeatures.h

注释掉如下内容:

/*

#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))

#define QT_NO_QWS_CURSOR

#endif

*/

保存退出。

# vi qtopiacore/qt/src/corelib/global/qglobal.h

注释掉以下内容:

//# define QT_NO_QWS_CURSOR

修改源码包中两个头文件的名字

# cd src/libraries/qtopiabase/

# cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h

# cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp

最后还有一个时区的问题,qpe默认到/usr/share/zoneinfo下找时区信息,如果找不到时区信息,运行时会出错。

解决方法是在根文件系统上建立文件夹mkdir –p usr/share/zoneinfo

把虚拟机目录下/usr/share/zoneinfo中的所有文件拷到刚创建的文件夹中

关于配置的命令选项,网上写的都大体相同,但内容都不一样,五花八门,我把这些综合一下:

有几点说明:我用的触摸屏是320x240的,tslib/usr/local/tslib目录下

target目录下执行:

#../source/configure -release -image /usr/local/qtopia -prefix /usr/local/qtopia -xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize 320x240 -no-modem -quicklaunch –no-bluetooth -no-drm -no-infrared -extra-qtopiacore-config "-little-endian -release -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 8,16,32 -qt-sql-sqlite -qt-kbd-usb -no-kbd-tty -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib"

 

我在target目录下

#vim myconfig

../source/configure -release -image /usr/local/qtopia -prefix /usr/local/qtopia -xplatform linux-arm-g++ -arch arm -no-qvfb -displaysize 320x240 -no-modem -quicklaunch –no-bluetooth -no-drm -no-infrared -extra-qtopiacore-config "-little-endian -release -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 8,16,32 -qt-sql-sqlite -qt-kbd-usb -no-kbd-tty -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib"

 

主要配置选项解说如下:

-xplatform linux-arm-g++ -arch arm

目标平台为arm-linux,体系结构为arm

-no-qvfb

目标平台已支持framebuffer,因而不使用虚拟帧缓冲。

-extra-qtopiacore-config

Qtopia core 配置选项。

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

目标平台编译配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目录下的配置文件,嵌入式平台为arm

-qconfig qpe

使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,则使用-qconfig large选项。

-qt-sql-sqlite

数据库支持Sqlite

-qt-kbd-usb

键盘支持usb协议。

-no-mouse-linuxtp -qt-mouse-tslib

-I/usr/local/tslib/include -L/usr/local/tslib/lib

触摸屏协议不支持linuxtp,支持tslib,并在后面添加上刚才编译的tslib的头文件和库。

如果没有什么错误,就可以make, make install了,这个时间比较长,2个小时左右。

make的时候可能会出现错误,应该是和交叉编译器有关,因为我们以前习惯是把交叉编译器放在/usr/local/arm/目录下,但是如果用4.1.2版本的就会出点问题,所以解压时加上参数:-C ,那么就直接解压到了:

/opt/toolchains/arm920t-eabi/目录下。然后设置环境变量,修改/etc/profile文件,加上一句export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH,保存退出,执行#source /etc/profile查看一下版本:#arm-linux-gcc –v ,确保是4.1.2版本的,继续make

过一会还会出现一个错误,没有找到:arm-linux-ranlib

查看一下/arm920t-eabi/bin/目录下,发现没有arm-linux-ranlib这个文件,因为arm-linux-XXX文件是一个连接文件,它连接到

arm-angstrom-linux-gnueabi-XXX,我们把arm-linux-ranlib,做一个软连接:

#ln –s arm-angstrom-linux-gnueabi-ranlib arm-linux-ranlib

然后用ll命令查看:arm-linux-ranlib->arm-angstrom-linux-gnueabi-ranlib

说明已经建立软连接了,再继续编译就可以能过了。

 

 

Vim /usr/local/tslib/etc/ts.conf

# module_raw input

改为

module_raw input

拷贝/usr/local/tslib/bin/ts_calibrate root_2.6.31/usr/bin

拷贝/usr/local/qtopia/bin/ts_calibrate root_2.6.31/usr/bin

如果是用NFS方式启动,那么只需要确保虚拟机的Linux目录下有如下文件夹:

/usr/local/qtopia /usr/local/tslib      /usr/share/zoneinfo

就可以,只需要配置一下启动脚本,开机自己挂载NFS,就能启动了。

 

新建一个名为 qtopia的文件,加入可执行权限,并把它放到root_2.6.31/usr/bin目录下,内容为:

#!/bin/sh

export T_ROOT=/usr/local/tslib

export QTOPIA=/usr/local/qtopia

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:$QTOPIA/lib

export QWS_SIZE=320x240

export QWS_MOUSE_PROTO=“Tslib:/dev/event0”

export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0

if [ -f "$TSLIB_CALIBFILE" ]; then

$QTOPIA/bin/qpe -qws

else

ts_calibrate

$QTOPIA/bin/qpe -qws

fi

 

然后在/etc/init.d/rcS文件中加入一句:

qtopia&

 

 

到这里具有Qtopia手机界面的根文件系统制作完了,但是

#mkyaffs2image root_2.6.31 root_2.6.31.bin

发现生成的root_2.6.31.bin72M,但是我们的SDRAM只有64M,大页NAND FALSH 256M是足够的,于是将

#tar cjvf qtopia.tar.bz2 /usr/local/qtopia/

#tar cjvf zoneinfo.tar.bz2 /usr/share/zoneinfo/

将打包文件通过NFSrz命令通过串口发送到NAND FALSH

解压时又有问题:

[root@TX2440A /]# tar xjvf zoneinfo.tar.bz2

usr/share/zoneinfo/

usr/share/zoneinfo/Africa/

tar: write error: No space left on device

 

[root@TX2440A /]# df -h

Filesystem                Size      Used Available Use% Mounted on

/dev/root                58.9M     58.8M     40.0K 100% /

tmpfs                    29.8M    112.0K     29.7M   0% /tmp

tmpfs                    29.8M         0     29.8M   0% /dev

var                      29.8M         0     29.8M   0% /dev

192.168.1.110:/           8.8G      8.0G    343.0M  96% /mnt

 

一看分区,知道NAND FLASH移植出了问题:

重新配置内核:

配置内核,支持NandFlash

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

[*] MTD partitioning support

<*> NAND Device Support --->

<*> NAND Flash support for S3C2410/S3C2440 SoC

[*] S3C2410 NAND Hardware ECC //这个一定要选上

Nand Flash Capacity Select(256M Nand For TX-2440A)--->

()64M NAND FOR TX-2440A

X256M NAND FOR TX-2440A

 

#make zImage

下载到开发板,重启后

[root@TX2440A /]# df -h

Filesystem                Size      Used Available Use% Mounted on

/dev/root               250.9M     59.0M    191.9M  24% /

tmpfs                    29.6M    112.0K     29.5M   0% /tmp

tmpfs                    29.6M         0     29.6M   0% /dev

var                      29.6M         0     29.6M   0% /dev

 

 

阅读(2210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~