【Linux基础】制作qte-4.7.0带tslib的根文件系统 [复制链接]

时间:2022-09-20 09:04:53
平台 gec ARM9系列
arm-linux-gcc 版本 4.5.1
一、下载qt源文件
ftp://ftp.qt.nokia.com/qt/source
source: qt-everywhere-opensource-src-4.7.0.tar.gz
二、交叉编译embedded库
mkdir /root/build_qt
cd /root/build_qt
tar zxvf qt-everywhere-opensource-src-4.7.0.tar.gz
mv qt-everywhere-opensource-src-4.7.0 qte
三、设置安装环境Linux入门培训变量
export QTDIR=/root/build_qt/qte
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/arm/4.5.1/bin:$QTDIR/bin:$PATH
四、编写QTE源码目录中的src/tools/qconfig-local.h文件,添加触摸屏支持。
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
#define QT_NO_QWS_CURSOR
#define QT_NO_QWS_MOUSE_AUTO
五、添加tslib补丁,增加QT4.7.0对tslib的触摸屏校正支持。
将tslib.patch 复制到/root/build_qt目录下,然后进入/root/build_qt/qte目录执行:
patch –p1 < ../tslib.patch
六、在编译QTE之先移植tslib 库。
先交叉编译tslib-1.4 使用交叉工具链4.5.1。
mkdir /root/build_tslib
cd /root/build_tslib
tar zxvf tslib-1.4.gz (解压完在当前目录下生成一个tslib 源码目录,进入该目录编译)
cd tslib
./autogen.sh //用于生产configure
./configure --prefix=/share/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=yes
编译
make && make install
七、修改/share/tslib/etc 目录下的ts.conf 文件,将module_raw input 前面的注释去掉,
使能QT 支持触摸屏。
# vi tslib/etc/ts.conf
# Uncomment if you wish to use the linux input layer event interface
module_raw input (必须顶格)
# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie
# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
# module_raw corgi
# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
# module_raw ucb1x00
# Uncomment if you're using an HP iPaq h3600 or similar
# module_raw h3600
# Uncomment if you're using a HitachiWebpad
# module_raw mk712
# Uncomment if you're using an IBMArctic II
# module_raw arctic2
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
将交叉编译生成的/share/tslib 目录全部文件拷贝到制作的根文件系统的根目录下(如:/root/rootfs/下)
八、修改QTE源码中的src/embedded/qmouselinuxtp_qws.cpp 修改为正确的触摸屏设备名称。
#ifdef QT_QWS_IPAQ_RAW
mouseFD = open( “/dev/input/event0”, O_RDONLY)
九、将QT_NO_IMAGEIO_JPEG 宏注释,以便QTE支持Jpeg图片编译。
修改QTE源码目录中的include/qconfig-large.h include/qfeatures.h 头文件查找到宏 QT_NO_IMAGEIO_JPEG ,将其注释,同时也可以根据需要将NO_IMAGEIO_XXX类似的宏注释,方便支持更多C语言教程的图像文件。
十、配置编译QTE
./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon
注意:make的时候由于对于qt4的交叉编译工具的gcc版本问题而导致提示如下错误:
../include/qstring.h: In member function 'ushort& QChar::unicode()':
../include/qstring.h:199: error: cannot bind packed field
'((QChar*)this)->QChar::ucs' to 'ushort&'
解决办法:
打开QTE源码目录中的src/tools/qglobal.h查看318-326行:
# if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
# define Q_PACKED __attribute__ ((packed))
# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4
# define Q_NO_PACKED_REFERENCE
# endif
# endif
# if !defined(__EXCEPTIONS)
# define Q_NO_EXCEPTIONS
# endif
修改如下:
# if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
# define Q_PACKED __attribute__ ((packed))
# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4
# define Q_NO_PACKED_REFERENCE
# endif
/* 添加如下语句 红色字体部分 */
# if __GNUC__ == 4 && __GNUC_MINOR__ >= 0
# define Q_NO_PACKED_POINTERS
# endif
# endif
# if !defined(__EXCEPTIONS)
# define Q_NO_EXCEPTIONS
# endif
打开 QTE源码目录中的include/qstring.h查看195-199行
ushort unicode() const { return ucs; }
#ifdef Q_NO_PACKED_REFERENCE
ushort &unicode() { return *(&ucs); }
#else
ushort &unicode() { return ucs; }
#endif
修改如下:
ushort unicode() const { return ucs; }
#ifdef Q_NO_PACKED_REFERENCE
ushort &unicode() { return *(&ucs); }
/* 添加如下语句 红色字体部分 */
#elif defined Q_NO_PACKED_POINTERS
ushort &unicode() { ushort& tmp = ucs; return tmp; }
#else
ushort &unicode() { return ucs; }
#endif
如出现下面错误:
lib/libQtGui.so: undefined reference to `ts_read_raw'
/lib/libQtGui.so: undefined reference to `ts_open'
/lib/libQtGui.so: undefined reference to `ts_fd'
/lib/libQtGui.so: undefined reference to `ts_config'
/lib/libQtGui.so: undefined reference to `ts_close'
/lib/libQtGui.so: undefined reference to `ts_read
解决办法:
修改qt-everywhere-opensource-src-4.7.0/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
修改完毕后,进行交叉交叉编译QTE源码库
make && make install
至此,QTE库交叉编译完成,可以用于C语言入门交叉编译QTE应用程序。在/usr/local/Trolltech目录下出现QtEmbedded-4.7.0-arm文件夹,将开发板上需要安装的显示库移植到开发板的根文件系统中。
mkdir /root/rootfs/qte
cp -d /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib /root/rootfs/qte/