我教你konqueror的移植(1)(2)
五 编译qtopia目标平台版本
与qte2.3.5对应的 qtopia版本是qtopia 1.6.*
我选择的是 qtopia-commercial-1.6.1
编译脚本如下
#!/bin/sh
unset TMAKEPATH
export QTDIR=`pwd`/../../qt-2.3.5
export QTEDIR=$QTDIR
export QPEDIR=`pwd`/../
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export CC=arm-linux-gcc
export AR=arm-linux-ar
export NM=arm-linux-nm
export RANLIB=arm-linux-ranlib
export CXX=arm-linux-g++
export LINKER=arm-linux-g++
export STIRP=arm-linux-strip
export LD=arm-linux-ld
make clean
./configure -release -shared -platform linux-ipaq-g++ &&
make
六 编译konqueror
在konqueror homepage下有很多konqueror-embedded-snapshot的包下载
http://developer.kde.org/~hausmann/snapshots/Attic/
我下载的是konqueror-embedded-snapshot-20030705.tar.gz 解压缩
为了支持中文网页 konqueror 的字体必须设置为unifont 而不是默认的helvetica
在dropin目录下修改kglobalsettings.cpp
将KGlobalSettings类 generalFont成员函数找到初始化QFont对象
s_generalFont = new QFont( "helvetica", 12 );
其中的helvetica改为unifont
我的交叉编译脚本:
export QTDIR=/usr/local/Qt/qt-2.3.5
export QTEDIR=$QTDIR
export QPEDIR=/usr/local/Qt/ qtopia-commercial-1.6.1
export PATH=$QTDIR/bin:$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
export AR=arm-linux-ar
export AS=arm-linux-as
export LD=arm-linux-ld
export RANLIB=arm-linux-ranlib
export CC=arm-linux-gcc
export CXX=arm-linux-g++
export NM=arm-linux-nm
./configure --disable-debug --libdir=$QPEDIR/lib --host=arm-linux --prefix=$QPEDIR/image/opt/Qtopia --enable-qt-embedded --enable-embedded --enable-qtopia --enable-qpe --enable-readwrite --enable-cgi --enable-sidebar --enable-fontsubs --disable-jshostext --enable-largeicons --with-qt-dir=$QTDIR --with-qt-libraries=$QTDIR/lib --with-qtopia-dir=$QPEDIR --with-gui=qpe --with-qt-includes=$QTDIR/include
make
make install
这时在konqueror 的文件夹中 konq-embed/src下 可以找到konqueor可执行文件 konqueror.desktop
和konqueror.png
把可执行文件拷贝到$QPEDIR/bin下 把konqueror .desktop拷贝到$QPEDIR/apps/Application下
把konqueror.png 拷贝到$QPEDIR/pic下
备注:在拷贝konqueror.desktop之前 ,在PC机上选择该文件,右键选择快捷菜单中的属性,在弹出的窗口中选择启动器标签 ,在命令一栏konqueror的后面添上-font unifont 以显示中文网页
在PC机的 /usr/local下有一个kde文件夹 将这个文件夹拷贝到嵌入式文件系统下的某个目录 (我拷贝在嵌入式文件系统的 /usr/local下 )
这个文件夹下的子目录下的 html4.css和 charsets二个 文件是运行konqueror必须的
六 移植并执行
在PC机编译好的qtopia目录下有一个createdesktop脚本 运行这个脚本 生成一个.tar文件 可以将这个文件拷贝到嵌入式文件系统下的某个目录 同时还要将交叉编译的qt-2.3.5中的lib目录下的库文件和font文件爱你夹拷贝加入到qtopia的lib目录下
我将tar包解压缩后拷贝在/usr/person下(当然也可以拷贝tar包,运行qpe时再将tar包解压缩)
为了使qt能找到触摸屏驱动 需建立链接 在rootfs中的/etc/init.d/rcS中加入
ln -s /dev/misc/touchscreen/ucb1x00 /dev/ts
ln -s /dev/misc/touchscreen/ucb1x00 /dev/h3600_ts
ln -s /dev/misc/touchscreen/ucb1x00 /dev/tpanel
ln -s /dev/misc/touchscreen/ucb1x00 /dev/touchpanel
为了使konqueror能访问Internet 需要设置网关 在rootfs中的/etc/init.d/rcS中加入
route add default gw 192.168.2.1 (192.168.2.1是网关IP)
首次运行qtopia需要校正 用户在触摸屏上指定4个角和中心点的位置
这时qpe会向/tmp/poitercal这个文件里写数据 而原先这个文件是空的
文件内容为:73763 0 -1058203 0 76106 -1382584 65536
可以在init.d/rcS中加入相关命令 省去每次加电运行qpe 均需校正的麻烦
/home/zhangyu/rootfs/usr/person/qtopia-commercial-1.6.1
在PXA255上运行qtopia的脚本:
export HOME=/usr/person/qtopia-commercial-1.6.1
export QTDIR=/usr/person/qtopia-commercial-1.6.1
export QPEDIR=/usr/person/qtopia-commercial-1.6.1
export QWS_MOUSE_PROTO=TPanel:/dev/h3600_ts
export LD_LIBRARY_PATH=/usr/person/qtopia-commercial-1.6.1/lib:$LD_LIBRARY_PATH:/usr/local/qt-2.3.5/lib
export KDEDIR=/usr/local/kde
/usr/person/qtopia-commercial-1.6.1/bin/qpe -qws -font unifont &
一定要指明kde路径 否则运行konqueror时提示找不到html4.css和 charsets二个 文件
这时候就可以看见qtopia 的启动画面 如果在选择语言为中文或韩文后发现标题和图标文字为方块 可以在settting下进行appearence和launch拉中选择字体文unifont
在应用程序中有个web browser的图标 点击就打开浏览器
备注:颜色显示问题 由于我烧写的内核framebuffer中对16位深度的像素,RGB颜色分配位数均为5位
可参考内核dirve/video/pxafb.c
if (var->bits_per_pixel == 16) {
var->red.offset = 10; var->red.length = 5;
var->green.offset = 5; var->green.length = 5;
var->blue.offset = 0; var->blue.length = 5;
}
而qt-embedded在将RGB颜色转换为16位深度时 定义的RGB分别占用5位 6位 5位 若不改动会造成色彩失真 在图像边缘处尤其明显
转换的函数在src/kernel/qcolor_qws.cpp中被调用
case 16: {
return pix = qt_convRgbTo16(rgbVal);
#endif
} case 24:
该函数和占位格式的定义在qgfx_qws.h中
# define QT_QWS_DEPTH16_RGB 565 改为# define QT_QWS_DEPTH16_RGB 555
随后的
static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100);
static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10);
static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10);
static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits);
static const int qt_green_shift = qt_bbits-(8-qt_gbits);
static const int qt_neg_blue_shift = 8-qt_bbits;
RGB的占位和偏移量均由QT_QWS_DEPTH16_RGB 常量决定
修改后 颜色显示正常
怎么样?通过阅读文章,觉得做开发一个Konqueror还是有点难度的,赶快学习吧!
评论暂时关闭