最近成功的移植了Qt4.5。非常感谢天嵌的指导。
一. 内核的移植
保证在内核中添加鼠标驱动。
具体路径如下:
Device Driver->HID Devices->
选上/dev/hiddev raw HID device support.
这里的HID是human input device的意思。
二.Qt的鼠标配置
1.首先要编译Qt,其配置如下:
echo yes | ../../qt-embedded-linux-opensource-src-4.5.0/configure -prefix /opt/EmbedSky/qt-4.5/__install/arm/ -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -armfpa &&
这里说明一下,配置与天嵌的相比,只是删除了触摸屏部分。
其实直接用天嵌配置也是可以的,但这样的话,lib等会大一点。
2.修改开发板/bin/qt4,修改如下:
export set QWS_MOUSE_PROTO=" Intellimouse:/dev/mouse0" --只支持鼠标
export set QWS_MOUSE_PROTO="TSLIB:/dev/event0 Intellimouse:/dev/mouse0"
这样就完成了鼠标的移植了。
下面做一些解释。
我用的是双飞燕的鼠标,能用的driver为intellimouse或者MouseMan
这里解释一下为什么driver option为:/dev/mouse0。看一下源码,会看到我们做的USB mouse的设备驱动名为“USB mouse”,那么为什么我们最后的设备名会变成mouse0呢?
这是因为有更上层驱动对USB mouse进行封装。就等同于我们用串口的时候,最后用终端的设备名为TTY.
编译Qt会用到gmake,这个gmake是属于Linux自带的编译工具。使用命令“which gmake”可以看到gmake的位置。
关于交叉编译环境。我们要使用交叉编译环境进行编译,主要体现在配置中 –xplatform qws/linux-arm-g++ 这句话。为什么有qws呢。这里指的是它会在qt中的mkspecs/qws/linux-arm-g++/qmake.conf 中有相应的编译器配置。在qmake.conf中,定义了默认的编译器为linux-arm-g++。
上面的配置可以从以下的代码去理解。
QWSMouseHandler *QMouseDriverFactory::create(const QString& key, const QString &device)
{
QString driver = key.toLower();
#ifndef QT_NO_QWS_MOUSE_LINUXTP
if (driver == QLatin1String("linuxtp") || driver.isEmpty())
return new QWSLinuxTPMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_YOPY
if (driver == QLatin1String("yopy") || driver.isEmpty())
return new QWSYopyMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_VR41XX
if (driver == QLatin1String("vr41xx") || driver.isEmpty())
return new QWSVr41xxMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_PC
if (driver == QLatin1String("auto")
|| driver == QLatin1String("intellimouse")
|| driver == QLatin1String("microsoft")
|| driver == QLatin1String("mousesystems")
|| driver == QLatin1String("mouseman")
|| driver.isEmpty()) {
return new QWSPcMouseHandler(key, device);
}
#endif
#ifndef QT_NO_QWS_MOUSE_BUS
if (driver == QLatin1String("bus"))
return new QWSBusMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_TSLIB
if (driver == QLatin1String("tslib") || driver.isEmpty())
return new QWSTslibMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_QVFB
if (driver == QLatin1String("qvfbmouse") || driver == QLatin1String("qvfb"))
return new QVFbMouseHandler(key, device);
#endif
上面的代码中driver即是“Intellimouse”
至于更上层的代码,大家有空可以详细看看,这里就不展开说了。