先是按网上教程,先把x86-qtopia 与arm-qtopia下载下来,解压后执行里面的脚本(开发板里的资源)
弄好后,开始移植到开发板
移植过程注意问题:
1、编译时报错XXX EABI version is 0,XXX EABI is 5
这就说明现在的交叉编译器不支持EABI换个arm-linux-gcc 4.3.3
2、出现执行qtopia后无反应或者执行某些QT应用程序出现segment fault
是内核,根文件系统,QT用的交叉编译器不匹配,可以都用4.3.3,但注意要在内核配置里选上EABI,好像在kernel feature里
3、打开任意一个QT应用程序,例如qpe 提示not found
这是因为busybox编译成静态,而QT是需要动态编译的,
在busybox里选上use share lib...这个选项
4、动态编译后出现Failed to execute /linuxrc
这主要是没将必要的库文件加入,可以将交叉编译器的库文件加到文件系统的lib目录下
如cps /usr/local/arm/4.3.3/arm-none-linux-gnueabi/libc/lib/* ./lib
cp /usr/local/arm/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/* ./lib
5、如果无法显示[root@xxx]#
要在busybox 里选上
Busybox Settings --->
Busybox Library Tuning --->
[*] Username completion
[*] Fancy shell prompts
如果不选择上面两项,文件系统是不是别PS1这个环境变量的参数的。
下面是转的:
http://blog.csdn.net/wwwxxlby520/archive/2009/07/24/4375834.aspx
添加触摸屏
(1) 编译tslib:
/qt_arm/tslib
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache //为了防止出现undefined reference to `rpl_malloc' 错误
./configure --host=arm-linux --cache-file=arm-linux.cache –enable-inputapi=no
在make之前,为了支持触摸屏,这里有一点小小的修改,打开src/ts_read_raw.c文件,查看你的触摸屏驱动程序数据结构,看与ts_read_raw.c结构中的哪个一样,就将代码中的
char *defaulttseventtype="UCB1x00";
修改为
char *defaulttseventtype="H3600"; //这里因为我的驱动是h3600_ts_event结构,修改为你驱动对应的结构,好了,如果你触摸屏驱动程序支持ioctrl操作,上面的 configure操作中的[—enable-inputapi=no]你可以删除。好了,现在可以make了,^_^
make
cp qt_arm/tslib/src/.libs/libts-0.0.so.0* qt_arm/qte/lib/
cp qt_arm/tslib/src/.libs/libts.so qt_arm/qte/lib/
cp qt_arm/tslib/src/*.h qt_arm/qte/include/
(2) 修改文件
vi /usr/local/arm/qt_arm/qte/src/kernel/qwsmouse_qws.cpp
其中有3处/ect/pointercal 将其改为/tmp/pointercal
(这里因为我的根文件系统不可写,默认的/etc下不可写,所以在校准的时候把pointercal方到了/tmp/下,这里按照你//自己校准文件的存放路径改即可,如果是可读根文件系统,就不用修改了)
目标板子最好为可写文件系统,tslib校准程序会写etc/pointercal文件,只读文件系统的话,建一个链接到/tmp目录吧
################################################
:h3600 -> input/tsraw0
################################################
(3) 在/usr/local/arm/qt_arm/qtopia/src/qt/qconfig-qpe.h的末尾加上,
这是使qt自己支持触摸屏,我也加了。
//#define QT_QWS_IPAQ
//#define QT_QWS_IPAQ_RAW
==============================================
编译修改工作
//①、vi /root/yizhi/qtopia-free-2.2.0/qtopia/mkspecs/qws
/linux-arm-g++/qmake.conf
将此行
QMAKE_LIBS_QT = -lqte
修改为
QMAKE_LIBS_QT = -lqte -luuid -ljpeg -lts
②、 如果想让Qtopia支持鼠标,需要修改/usr/local/arm/qt_arm/qtopia/src/qt/qconfig-qpe.h文件
注释如下部分
/*
#ifndef QT_NO_QWS_CURSOR
#define QT_NO_QWS_CURSOR
#endif
#ifndef QT_NO_QWS_MOUSE_AUTO
#define QT_NO_QWS_MOUSE_AUTO
#endif
#ifndef QT_NO_QWS_MOUSE_PC
#define QT_NO_QWS_MOUSE_PC
#endif
*/
============================================
cp /usr/local/arm/qt_arm/qtopia/src/qt/qconfig-qpe.h
/usr/local/arm/qt_arm/qte/src/tools
=====================================================================================
(4) 开始configure了 qte ,qtopia (加入:-tslib)
=====================================================================================
cd qte
./configure -qconfig qpe -no-xft -qvfb -depths 4,8,12,16 -xplatform linux-arm-g++ -system-jpeg -gif -tslib
make
cd ..
cd qtopia
./configure -edition pda -prefix /usr/local/arm/qt_arm/board -xplatform linux-arm-g++ -displaysize 320x240
make
make install
=====================================================================================
(5) 拷贝库与触摸屏校准/测试程序
=====================================================================================
mkdir /qt_arm/board/bin/tests
//mkdir /qt_arm/board/lib/ts
cp /qt_arm/tslib/tests/.libs/ts_* /qt_arm/board/bin/tests //几个所需的测试文件,比如生成的校准文件,测试文件等
cp /qt_arm/tslib/src/.libs/libts-0.0.so.0* /qt_arm/board/lib //几个所需的库文件
cp /qt_arm/tslib/src/.libs/libts.so /qt_arm/board/lib //几个所需的库文件
cp /qt_arm/tslib/plugins/.libs/*.so /qt_arm/board/lib //触摸屏插件模块库; 这些是ts.conf要用到的库文件
把文件/qt_arm/tslib/etc/ts.conf文件拷贝到你的板子的/qt_arm/board目录下,并将moudle mousebuts 前面的#去掉
下一步是要把board文件夹mount到板子的/tmp目录下
////////////////////////////////////////////////////
【总结】:需要拷贝的文件:
# cp e2fs/lib/libuuid.so* board/lib/
# cp jpeg-6b/.libs/libjpeg.so* board/lib
# mkdir board/bin/tests
# cp tslib/tests/.libs/ts_* board/bin/tests
# cp tslib/src/.libs/libts-0.0.so.0* board/lib
# cp tslib/src/.libs/libts.so board/lib
# cp tslib/plugins/.libs/*.so board/lib
# cp tslib/etc/ts.conf board //将moudle mousebuts 前面的#去掉
拷贝pointercal到board
拷贝setnenv.sh到board
/////////////////////////////////////////////////////
=====================================================================================
(6) 运行[以下操作在目标板上进行]:
=====================================================================================