1. 按照《移植QTOPIA.pdf》 文档,编译 qtx11
《Embedded QT完整编译过程》
《Embedded QT完整编译过程》
2. 编译e2fsprogs-1.3.5
arm-linux-gcc 3.4.1编译e2fsprogs-libs的时候报告错误:
fd.h:342: error: variable or field `__user’ declared void,
fd.h:342: error: variable or field `__user’ declared void,
经查gcc 3.4.1中新增类型 __user ,需要引入编译器定义头文件,在引用#include <linux/fd.h>的文档前面加上 #include <linux/compiler.h>,可以解决这个编译错误。
3.
cp -r e2fs/lib/uuid qtopia/include
cp e2fs/lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib
cp -r e2fs/lib/uuid qtopia/include
cp e2fs/lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib
//cp jpeg-6b/.libs/libjpeg.so.* /usr/local/arm/2.95.3/arm-linux/lib
cp jpeg-6b/.libs/libjpeg.so.* qt/lib
cp jpeg-6b/jpeglib.h qt/include
cp jpeg-6b/.libs/libjpeg.so.* qtopia/lib
cp jpeg-6b/jpeglib.h qtopia/include
cp jpeg-6b/.libs/libjpeg.so.* qt/lib
cp jpeg-6b/jpeglib.h qt/include
cp jpeg-6b/.libs/libjpeg.so.* qtopia/lib
cp jpeg-6b/jpeglib.h qtopia/include
4. 编译qtopia
make 时,报错:
.obj/release-shared/moc_fifteen.o(.text+0xa4): In function `FifteenMainWindow::staticMetaObject()':
: undefined reference to `QMainWindow::staticMetaObject()'
.obj/release-shared/moc_fifteen.o(.text+0x10c): In function `FifteenWidget::staticMetaObject()':
: undefined reference to `QWidget::staticMetaObject()'
.obj/release-shared/moc_fifteen.o(.text+0x174): In function `PiecesTable::staticMetaObject()':
: undefined reference to `QTableView::staticMetaObject()'
.obj/release-shared/moc_fifteen.o(.text+0x234): In function `PiecesTable::initMetaObject()':
: undefined reference to `QTableView::className() const'
.obj/release-shared/moc_fifteen.o(.text+0x290): In function `FifteenWidget::initMetaObject()':
: undefined reference to `QWidget::className() const'
.obj/release-shared/moc_fifteen.o(.text+0x368): In function `FifteenMainWindow::initMetaObject()':
: undefined reference to `QMainWindow::className() const'
/usr/local/arm/qt_arm/qte/lib/libqte.so: undefined reference to `QListBox::returnPressed(QListBoxItem*)'/usr/local/arm/qt_arm/qte/lib/libqte.so: undefined reference to `QPopupMenu::activatedRedirect(int)'
/usr/local/arm/qt_arm/qte/lib/libqte.so: undefined reference to `QMainWindow::toolBarPositionChanged(QToolBar*)'
【解决方案】:
# cd qte
# export QTDIR=$PWD
对qte重新configure,make
然后,对qtopia进行make clean;然后在make
/usr/local/arm/qt_arm/qte/lib/libqte.so: undefined reference to `QMainWindow::toolBarPositionChanged(QToolBar*)'
【解决方案】:
# cd qte
# export QTDIR=$PWD
对qte重新configure,make
然后,对qtopia进行make clean;然后在make
=================================================
5. -sh: ./qpe: not found
【解决方案】busybox要采用动态编译
5. -sh: ./qpe: not found
【解决方案】busybox要采用动态编译
(1)进入busybox配置模式,
Busybox Setting-->
build options-->
[ ] Build BusyBox as a static binary (no shared libs) //去掉该项
[*] Build shared libbusybox (NEW) //选中该项
(2)配置好之后,如果直接下载到板子上,会有错误:
failed to excute /linuxrc.
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
Busybox Setting-->
build options-->
[ ] Build BusyBox as a static binary (no shared libs) //去掉该项
[*] Build shared libbusybox (NEW) //选中该项
(2)配置好之后,如果直接下载到板子上,会有错误:
failed to excute /linuxrc.
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
【解决方案】:把库文件拷贝到board/lib下面,要拷贝的库文件见有:
① 从3.4.1中拷贝库文件 ld*,libc*,libm* 到wpb_rootfs/lib下面,并建立原来的连接关系
② libstdc++.so.6:从3.4.1拷贝相关文件到wpb_rootfs/lib
libgcc_s.so.1 从3.4.1拷贝相关文件到wpb_rootfs/lib
libdl.so.2 从3.4.1拷贝相关文件到wpb_rootfs/lib
① 从3.4.1中拷贝库文件 ld*,libc*,libm* 到wpb_rootfs/lib下面,并建立原来的连接关系
② libstdc++.so.6:从3.4.1拷贝相关文件到wpb_rootfs/lib
libgcc_s.so.1 从3.4.1拷贝相关文件到wpb_rootfs/lib
libdl.so.2 从3.4.1拷贝相关文件到wpb_rootfs/lib
=================================================
6.
6.
如果找不到:libqtopia2.so.2, 则说明: 没有设置好环境变量
libuuid.so.1 从e2fs拷贝相关文件到 board/lib
libjpeg.so.62 从jpeg-6b拷贝相关文件到 board/lib
# cp e2fs/lib/libuuid.so* board/lib/
# cp jpeg-6b/.libs/libjpeg.so* board/lib
libjpeg.so.62 从jpeg-6b拷贝相关文件到 board/lib
# cp e2fs/lib/libuuid.so* board/lib/
# cp jpeg-6b/.libs/libjpeg.so* board/lib
=================================================
7.
could not open for writing 'Settings/qpe_new.conf'
QCopChannel::send: Must construct a QApplication before using QCopChannel
【解决方案】:$HOME环境变量没有设置阿? 要设到一个可写的位置。
7.
could not open for writing 'Settings/qpe_new.conf'
QCopChannel::send: Must construct a QApplication before using QCopChannel
【解决方案】:$HOME环境变量没有设置阿? 要设到一个可写的位置。
Can't open framebuffer device /dev/fb
:driver cannot connetc
:driver cannot connetc
【解决方案】:ln –s /dev/fb/0 /dev/fb0
如果不支持ln命令,则在busybox配置中添加对ln命令的支持
如果不支持ln命令,则在busybox配置中添加对ln命令的支持
=================================================
===================================================
8.添加触摸屏
(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了,^_^
/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目录吧
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
这是使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
./configure -edition pda -prefix /usr/local/arm/qt_arm/board -xplatform linux-arm-g++ -displaysize 320x240
make
make install
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/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
/
拷贝pointercal到board
拷贝setnenv.sh到board
/
=====================================================================================
(6) 运行[以下操作在目标板上进行]:
=====================================================================================
(i) 做链接
# ln -s /dev/fb/0 /dev/fb0
//帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链接/dev/fb0到/dev/fb/0
# ln -sf /dev/input/tsraw0 /dev/ts
//qtopia要打开/dev/ts,你没有这个文件, 所以 dev下边应该有触摸平的节点,
相当于, qtopia启动要找 /dev/ts, 但是你只有/dev/input/tsraw0
所以你把ts链接到你的触摸屏的文件就可以了!
我得触摸屏设备节点文件为/dev/input/tsraw0
所以,建立链接 /dev/ts 到/dev/input/tsraw0
(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)
相当于, qtopia启动要找 /dev/ts, 但是你只有/dev/input/tsraw0
所以你把ts链接到你的触摸屏的文件就可以了!
我得触摸屏设备节点文件为/dev/input/tsraw0
所以,建立链接 /dev/ts 到/dev/input/tsraw0
(这里要自己针对自己板子具体的文件进行设置,要不然也会报错)
(ii)指定环境变量
mount -t nfs 192.168.10.1:/usr/local/arm/qt_arm/board /tmp
在你的板子上设置运行环境变量
export HOME=/tmp
export QTDIR=/tmp
export QPEDIR=/tmp
export PATH=$QPEDIR/bin:$PATH
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
export LD_LIBRARY_PATH=/tmp/lib
export TSLIB_TSDEVICE=/dev/input/ts0 //指定触摸屏设备节点文件
export TSLIB_CONSOLEDEVICE=none //tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0 // /dev/fb0 指定帧缓冲设备
// 我的开发板上只有/dev/fb/0,所以做了一个链接 ln -s /dev/fb/0 /dev/fb0
export TSLIB_CALIBFILE=/tmp/pointercal //指定触摸屏校准文件pintercal的存放位置
//默认是在/etc下面,可写文件系统为/etc/pointercal
export TSLIB_CONFFILE=/tmp/ts.conf //指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=/tmp/lib //指定触摸屏插件所在路径:
// mousebuts.so variance.so dejitter.so linear.so的存放路径
export POINTERCAL_FILE=/tmp/pointercal
mount -t nfs 192.168.10.1:/usr/local/arm/qt_arm/board /tmp
在你的板子上设置运行环境变量
export HOME=/tmp
export QTDIR=/tmp
export QPEDIR=/tmp
export PATH=$QPEDIR/bin:$PATH
export QWS_MOUSE_PROTO=TPanel:/dev/input/ts0
export LD_LIBRARY_PATH=/tmp/lib
export TSLIB_TSDEVICE=/dev/input/ts0 //指定触摸屏设备节点文件
export TSLIB_CONSOLEDEVICE=none //tslib运行需要的控制台,这里就是LCD屏幕 ,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0 // /dev/fb0 指定帧缓冲设备
// 我的开发板上只有/dev/fb/0,所以做了一个链接 ln -s /dev/fb/0 /dev/fb0
export TSLIB_CALIBFILE=/tmp/pointercal //指定触摸屏校准文件pintercal的存放位置
//默认是在/etc下面,可写文件系统为/etc/pointercal
export TSLIB_CONFFILE=/tmp/ts.conf //指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=/tmp/lib //指定触摸屏插件所在路径:
// mousebuts.so variance.so dejitter.so linear.so的存放路径
export POINTERCAL_FILE=/tmp/pointercal
***************************
如果为可写根文件系统,可以修改开发板/etc/profile文件,将这些环境变量写入,就不用每次设置了
*****************************
如果为可写根文件系统,可以修改开发板/etc/profile文件,将这些环境变量写入,就不用每次设置了
*****************************
校准屏幕(5点校准)
cd /tmp/bin/tests
./ts_calibrate
会陆续在LCD的4个角和中点出现光标,点击光标进行校准,生成校准文件
再运行测试
./ts_test
这时LCD上出现光标,你的手指点哪里光标就会跟到哪里才成功
运行PDA
cd /tmp/bin
./qpe
出现”Tap anywhere to continue”,然后进行qpe5点校准,进入qpe
cd /tmp/bin/tests
./ts_calibrate
会陆续在LCD的4个角和中点出现光标,点击光标进行校准,生成校准文件
再运行测试
./ts_test
这时LCD上出现光标,你的手指点哪里光标就会跟到哪里才成功
运行PDA
cd /tmp/bin
./qpe
出现”Tap anywhere to continue”,然后进行qpe5点校准,进入qpe
【问题】: 如何运行设置环境变量文件 setenv.sh
【解决方法】:. ./setenv.sh
【解决方法】:. ./setenv.sh
【问题】: ts_open:No such file or dircetory //ts_open() 打开触摸屏设备
【解决方法】:是触摸屏驱动没移植好,导致打不开触摸屏设备。先确认一下在/dev/input/下面是否有ts0,mouse0等,
如果没有,是触摸屏驱动没有移植好
【解决方法】:是触摸屏驱动没移植好,导致打不开触摸屏设备。先确认一下在/dev/input/下面是否有ts0,mouse0等,
如果没有,是触摸屏驱动没有移植好
【问题】: Cannot create Qt/Embedded data directory: /tmp/qtembedded-0
【解决方法】:把qt加载到一个可读写的目录下面
【解决方法】:把qt加载到一个可读写的目录下面
【问题】: 运行./ts_calibrate又出现了令人十分之郁闷的错误:
ts_config: Success
【解决方法】:cp tslib/plugins/.libs/*.so board/lib //这些是ts.conf要用到的库文件:
// mousebuts.so variance.so dejitter.so linear.so
export TSLIB_PLUGINDIR=/tmp/lib //指定触摸屏插件所在路径:
// mousebuts.so variance.so dejitter.so linear.so的存放路径
// mousebuts.so variance.so dejitter.so linear.so
export TSLIB_PLUGINDIR=/tmp/lib //指定触摸屏插件所在路径:
// mousebuts.so variance.so dejitter.so linear.so的存放路径
【问题】: 1:option '-16018' not recognisedts_config:success
【解决方法】:必须将pointercal文件删除,然后从tslib/etc/下面将原始的ts.conf重新拷贝到board下面即可。
【问题】: timezone警告的问题
【解决方法】:
在usr/etc/profile中添加export TZ=America/New_York
拷贝 qtopia/etc/zoneinfo/zone.tab 到 /usr/share/zoneinfo/下
//拷贝 qtopia/etc/zoneinfo/America/New_York 到 /usr/share/zoneinfo/America/New_York下
拷贝 qtopia/etc/zoneinfo 到 /usr/share/下
【问题】:我怎么知道/dev/input/eventX这些事件到底是什么事件阿,是鼠标还是键盘或者别的,
eventX代表的是所有输入设备(input核心)的事件,比如按键按下,或者鼠标移动,或者游戏遥控器等等,
【解决方法】:在系统查看的方法是 cat /proc/bus/input/devices 就可以看到每个eventX是什么设备的事件了。
//插入鼠标后
I: Bus=0013 Vendor=dead Product=beef Version=0101
N: Name="s3c2410 TouchScreen"
P: Phys=
H: Handlers=mouse0 event0 ts0 evbug
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003
eventX代表的是所有输入设备(input核心)的事件,比如按键按下,或者鼠标移动,或者游戏遥控器等等,
【解决方法】:在系统查看的方法是 cat /proc/bus/input/devices 就可以看到每个eventX是什么设备的事件了。
//插入鼠标后
I: Bus=0013 Vendor=dead Product=beef Version=0101
N: Name="s3c2410 TouchScreen"
P: Phys=
H: Handlers=mouse0 event0 ts0 evbug
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003
I: Bus=0003 Vendor=15d9 Product=0a37 Version=0100
N: Name="USB Mouse"
P: Phys=usb-s3c24xx-1/input0
H: Handlers=mouse1 event1 ts1 evbug
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
N: Name="USB Mouse"
P: Phys=usb-s3c24xx-1/input0
H: Handlers=mouse1 event1 ts1 evbug
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
=====================================================================================
(7)
【问题】: 出现”Tap anywhere to continue”,不能进行:qpe5点校准,进入qpe
/dev/input 下面有:
鼠标: event0 mouse0 ts0 tsraw0
触摸屏:event1 mouse1 ts1 tsraw1
【问题】: 当设置 export QWS_MOUSE_PROTO=QVFbMouse:/dev/input/ts0 时:
按下触摸屏后弹出窗口: Calibrate: Calibration can only be performed on a touch screen
=====================================================================================
(7)
【问题】: 出现”Tap anywhere to continue”,不能进行:qpe5点校准,进入qpe
/dev/input 下面有:
鼠标: event0 mouse0 ts0 tsraw0
触摸屏:event1 mouse1 ts1 tsraw1
【问题】: 当设置 export QWS_MOUSE_PROTO=QVFbMouse:/dev/input/ts0 时:
按下触摸屏后弹出窗口: Calibrate: Calibration can only be performed on a touch screen
=====================================================================================
【解决方法】:板子的触摸屏设备驱动和QT/E的readMouseData()函数不匹配,需要修改QT/E源代码。利用vi工具打开管理触摸屏的QT/E源代码qte/src/kernel/qwsmouse_qws.cpp,并参考ARMLinux系统的触摸屏ADS7843驱动代码(/driver/char/ads7843_ts.c)中的读函数来适当地修改参数值。
(i)将 qte/src/kernel/qwsmouse_qws.cpp 中的 “#define QWS_CUSTOMTOUCHPANEL”前的注释去掉
(i)将 qte/src/kernel/qwsmouse_qws.cpp 中的 “#define QWS_CUSTOMTOUCHPANEL”前的注释去掉
(ii)下面带有//wpb add 注释的语句是要添加的部分
class QCustomTPanelHandlerPrivate : public QWSMouseHandler
{
Q_OBJECT
public:
QCustomTPanelHandlerPrivate(MouseProtocol, QString dev);
~QCustomTPanelHandlerPrivate();
private:
int mouseFD;
unsigned char prevstate; //wpb add
private slots:
void readMouseData();
};
class QCustomTPanelHandlerPrivate : public QWSMouseHandler
{
Q_OBJECT
public:
QCustomTPanelHandlerPrivate(MouseProtocol, QString dev);
~QCustomTPanelHandlerPrivate();
private:
int mouseFD;
unsigned char prevstate; //wpb add
private slots:
void readMouseData();
};
(iii)下面带有//wpb add 注释的语句是要添加的部分
QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate(
MouseProtocol, QString )
{
#ifdef QWS_CUSTOMTOUCHPANEL
if ((mouseFD = open( "/dev/ts", O_RDONLY))
qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
return;
} else {
sleep(1);
}
prevstate = 0; //wpb add
QSocketNotifier *mouseNotifier;
mouseNotifier = new QSocketNotifier( mouseFD, SocketNotifier::Read, this );
connect(mouseNotifier,SIGNAL(activated(int)),this, SLOT(readMouseData()));
#endif
}
QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate(
MouseProtocol, QString )
{
#ifdef QWS_CUSTOMTOUCHPANEL
if ((mouseFD = open( "/dev/ts", O_RDONLY))
qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
return;
} else {
sleep(1);
}
prevstate = 0; //wpb add
QSocketNotifier *mouseNotifier;
mouseNotifier = new QSocketNotifier( mouseFD, SocketNotifier::Read, this );
connect(mouseNotifier,SIGNAL(activated(int)),this, SLOT(readMouseData()));
#endif
}
(iv)//把readMouseData()改成下面所示
void QCustomTPanelHandlerPrivate::readMouseData()
{
#ifdef QWS_CUSTOMTOUCHPANEL
if(!qt_screen)
return;
CustomTPdata data ;
short data2[4]={0};
int ret;
ret=read(mouseFD,data2,sizeof(data2));
if(ret)
{
data.status=data2[0];
data.xpos=data2[1];
data.ypos=data2[2];
ret=read(mouseFD,data2,sizeof(data2));
if(ret)
{
data.status=data2[0];
data.xpos=data2[1];
data.ypos=data2[2];
QPoint q;
q.setX(data.xpos);
q.setY(data.ypos);
mousePos=q;
if(data.status && !prevstate)
{
emit mouseChanged(mousePos,Qt::LeftButton);
}
else if(!data.status&&prevstate)
{
emit mouseChanged(mousePos,0);
}
prevstate=data.status;
}
if(ret<0){
qDebug("Error %s",strerror(errno));
}
#endif
}
q.setX(data.xpos);
q.setY(data.ypos);
mousePos=q;
if(data.status && !prevstate)
{
emit mouseChanged(mousePos,Qt::LeftButton);
}
else if(!data.status&&prevstate)
{
emit mouseChanged(mousePos,0);
}
prevstate=data.status;
}
if(ret<0){
qDebug("Error %s",strerror(errno));
}
#endif
}
(v) QWSMouseHandler* QWSServer::newMouseHandler(const
QString& spec)
…
QWSMouseHandler *handler = 0;
mouseProtocol = TPanel; // add this line
switch ( mouseProtocol ) {
…
QString& spec)
…
QWSMouseHandler *handler = 0;
mouseProtocol = TPanel; // add this line
switch ( mouseProtocol ) {
…
(iii)配置qte:
./configure -qconfig qpe -no-xft -qvfb -depths 4,8,12,16 -xplatform linux-arm-g++ -system-jpeg -gif
//去掉-tslib
(iv) # make
(8)
vi qtopia/src/settings/calibrate/calibrate.h
添加:#define QWS_NEED_CALIBRATION
添加:#define QWS_NEED_CALIBRATION
//
POINTERCAL_FILE(由于其他目录不可写,我把校准文件的存放位置改到了/mnt/yaffs/tmp/目录下)
vi qtopia/src/settings/calibrate/calibrate.cpp
将第99行的/etc/pointercal改为/tmp/pointercal
5.POINTERCAL_FILE
vi qtopia/src/server/pda/firstuse.cpp
将第345行的/etc/pointercal改为/tmp/pointercal
6.POINTERCAL_FILE
vi qte/src/kernel/qwsmouse_qws.cpp
将所有/etc/pointercal修改为/tmp/pointercal
==========================================================
(1)语言和时区设置完成之后,出现光标(忙状态),然后有如下报错信息,又重新回到初始界面:
warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
[9;15] [?33h [?25h [?0c?25h [?0c [9;15] [?33h [?25h [?0c33h [?25h [?0c [9;15] [?33h [?25h [?0c33h [?25h [?0c [9;15] [?33h [?25h [?0c15] [?33h [?25h [?0c [9;0] [?33l [?25ll [?25lproblem renaming file using qdir::rename /tmp/Settings/locale_new.conf to /tmp/Settings/locale.conf
::rename problem renaming file /tmp/Settings/locale_new.conf to /tmp/Settings/locale.conf errno 2
[9;0] [?33l [?25l [9;0] [?33l [?25l[?25l [9;15] [?33h [?25h [?0c[?33h [?25h [?0c [9;0] [?33l [?25ll [?25l [9;0] [?33l [?25l25lWarning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
You touch the screen
(1)语言和时区设置完成之后,出现光标(忙状态),然后有如下报错信息,又重新回到初始界面:
warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf
Warning: ::rename problem renaming file /tmp/Settings/qpe_new.conf to /tmp/Settings/qpe.conf errno 2
[9;15] [?33h [?25h [?0c?25h [?0c [9;15] [?33h [?25h [?0c33h [?25h [?0c [9;15] [?33h [?25h [?0c33h [?25h [?0c [9;15] [?33h [?25h [?0c15] [?33h [?25h [?0c [9;0] [?33l [?25ll [?25lproblem renaming file using qdir::rename /tmp/Settings/locale_new.conf to /tmp/Settings/locale.conf
::rename problem renaming file /tmp/Settings/locale_new.conf to /tmp/Settings/locale.conf errno 2
[9;0] [?33l [?25l [9;0] [?33l [?25l[?25l [9;15] [?33h [?25h [?0c[?33h [?25h [?0c [9;0] [?33l [?25ll [?25l [9;0] [?33l [?25l25lWarning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: problem renaming file using qdir::rename /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf
Warning: ::rename problem renaming file /tmp/Settings/PluginLoader_new.conf to /tmp/Settings/PluginLoader.conf errno 2
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
Warning: language message - en_US
Warning: and its not null
Warning: loading /tmp/i18n/en_US/qt.qm
Warning: loading /tmp/i18n/en_US/qpe.qm
Warning: loading /tmp/i18n/en_US/libqpe.qm
Warning: loading /tmp/i18n/en_US/libqtopia.qm
Warning: loading /tmp/i18n/en_US/language.qm
Warning: loading /tmp/i18n/en_US/timezone.qm
Warning: loading /tmp/i18n/en_US/systemtime.qm
You touch the screen
You touch the screen
【处理】:将一个校验文件pointercal 拷贝到/etc目录下,//设置 export POINTERCAL_FILE=/tmp/pointercal
【处理】:将一个校验文件pointercal 拷贝到/etc目录下,//设置 export POINTERCAL_FILE=/tmp/pointercal
(2)出现界面后报错:
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
/tmp # Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
【解决方案】: 在运行 /tmp下面的 ./bin/qpe时,后面不要添加 -qws&,因为:qpe本身就是把自己设置为server的
Warning: Failed to bind to port 4243
Warning: QServerSocket: failed to bind or listen to the socket
Warning: Failed to bind to port 4242
【解决方案】: 在运行 /tmp下面的 ./bin/qpe时,后面不要添加 -qws&,因为:qpe本身就是把自己设置为server的
(3)校准完成后,位置不对,点中间位置,控制了右下角的按钮。
校准后的pointercal不能写入到目录下?????????
校准后的pointercal不能写入到目录下?????????
转载于:https://blog.51cto.com/xiaobai/107728