QT ARM 移植


1. 安装触摸屏支持库(根据需要,如果需要的话)

tar -xvf tslib1.4.gz

cd tslib  

./autogen.sh                                              //生成configure 文件

echo ac_cv_func_malloc_0_nonnull=yes>arm-linux.cache      //指定缓冲配置的文件

export PATH=/usr/local/arm/4.3.2/bin:$PATH

./configure --host=arm-linux  --prefix=/usr/local/tslib --cache-file=arm-linux.cache --enable-inputapi=no

          参数解析:配置目标机、缓冲、安装路径

             --cache-file=FILE   cache test results in FILE [disabled]

make

make install     //会生成目录/usr/local/tslib

2. 安装ARM QT

针对QT-4.6.3的话

修改qt-everywhere-opensource-src-4.6.3/src/gui/embedded/qscreenlinuxfb_qws.cpp源码:

424行左右的地方:

/*            //EmbedSky_del start 20091208

    canaccel = useOffscreen();

    if(canaccel)

        setupOffScreen();

*/            //EmbedSky_del end 20091208  

    canaccel = false;  

726行左右的地方:

/*                //EmbedSky_del start 20091208

    if (canaccel) {

        *entryp=0;

        *lowest = mapsize;

        insert_entry(*entryp, *lowest, *lowest);  // dummy entry to mark start

    }

*/                //EmbedSky_del end 20091208  

    canaccel = false;  

原因: QT 对图形的支持不好,framebuf 的缓冲区有点问题

3. 配置编译选项

./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm -release -opensource -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  -qt-libmng -make libs -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -qt-mouse-pc  -I/usr/local/tslib/include -L/usr/local/tslib/lib  

参数解析:

         -prefix  #安装路径          

         -release #编译成发布版本

         -opensource   #开源代码

         -shared   #编译成共享库

         -fast  #Configure Qt quickly by generating Makefiles

         -no-largefile  #Enables Qt to access files larger than 4 GB.

         -qt-sql-sqlite  #Enable a SQL sqlite

         -no-qt3support #不支持QT3

         -no-xmlpatterns #不需要XmlPattern模块,如果对网络无需求的话,就不用加了。

         -no-mmx   #不支持多媒体增强指令

         -no-3dnow #不支持3DNOW instructions

         -no-sse  #不支持SSE instructions.

         -no-sse2 #不支持SSE2 instructions.

         -no-svg  #Do not build the SVG module.  

         -no-webkit #WebKit 一种网页浏览器引擎

         -qt-zlib   #使用zlib绑定到qt.  zlib是一套通用目的的压缩库

         -qt-gif    #Compile the plugin for GIF reading support.

         -qt-libtiff #编译tiff支持插件.TIFF(Tagged Information File Format) 是一个不失真的24-bit 彩色图像格式

         -qt-libpng

         -qt-libjpeg

    //      -qt-libmng    #编译MNG图形文件支持插件.

         -make libs  #make的时候,加入组件libs到组件列表中,以便于进行build构建。

//       -nomake examples ??

 //      -nomake docs   ??

   //    -nomake demo   ??

         -no-nis   #NISNetwork Information Service

         -no-cups  #CUPSUnix/Linux用户提供了一种可靠有效的方法来管理打印。

         -no-iconv #iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进行文本内码的转换

         -no-dbus  #QtDBus:进程通信的一个方法

         -no-openssl  #Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认

         -xplatform qws/linux-arm-g++  #交叉编译的目标平台,一般来说根据你所要移植的目标板来确定。

         -embedded arm  #架构

         -little-endian

         -qt-freetype   #自由使用版

         -depths 16,18  #显示的像素位深,也是根据需要来进行。

         -qt-gfx-linuxfb

         -qt-gfx-transformed

         -qt-gfx-multiscreen

         -no-gfx-vnc

         -no-gfx-qvfb

         -qt-kbd-linuxinput

         -no-glib

         -qt-mouse-tslib #选择触摸屏驱动支持

  //       -qt-mouse-pc      #支持鼠标

         -I/usr/local/tslib/include  #新增include路径。

         -L/usr/local/tslib/lib  #新增库文件路径。 

makemake的时候可做三、五、六、七步)

make install

1)(安装完后检查/usr/local/Trolltech/QtEmbedded-4.6.3-arm有没有demos

有的话即成功做第四步,然后source /etc/profile ,最后直接第八步。over)

2)、没有的话,//make clean

./configure -opensource -embedded arm -xplatform qws/linux-arm-g++  -no-webkit -qt-libtiff -qt-libmng  -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -I /usr/local/tslib/include -L /usr/local/tslib/lib

 参数解析:

         -opensource   #开源代码

         -embedded arm   #嵌入式平台架构选择,可以选择armmipsx86generic

         -xplatform qws/linux-arm-g++  #交叉编译的目标平台,一般来说根据你所要移植的目标板来确定。

         -no-webkit    #WebKit 一种网页浏览器引擎

         -qt-libtiff   #编译tiff支持插件.TIFF(Tagged Information File Format) 是一个不失真的24-bit 彩色图像格式

         -qt-libmng    #编译MNG图形文件支持插件.

         -qt-mouse-tslib   #选择触摸屏驱动支持

         -qt-mouse-pc      #支持鼠标

         -no-mouse-linuxtp   ##不支持linuxtp触摸屏协议

         -I /usr/local/tslib/include   #新增include路径。

         -L /usr/local/tslib/lib   #新增库文件路径。

make

make install     

此时完后检查/usr/local/Trolltech/QtEmbedded-4.6.3-arm有没有demos

有的话即成功做第四步,然后source /etc/profile ,最后直接第八步。over)

配置环境变量

//修改/etc/profile

#for arm /etc/profile

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm

export PATH=$QTDIR/bin:/usr/local/arm/4.3.2/bin:$PATH    

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QMAKESPEC=$QTDIR/mkspecs/qws/linux-arm-g++

拷贝QT

cd   arm-qte-4.6.3

./mktarget               //用来拷贝库的脚本

cp target-qte-4.6.3.tgz  /root/build_rootfs/rootfs/

cd /root/build_rootfs/rootfs/

tar -xvf target-qte-4.6.3.tgz    //会把库解压到目录/root/build_rootfs/rootfs/usr/local/Trolltech/QtEmbedded-4.6.3-arm

注意:安装的在什么路径,这边就拷贝到文件系统的什么路径

usr/local/Trolltech/QtEmbedded-4.6.3-arm整个目录拷贝到/root/build_rootfs/rootfs/usr/local/Trolltech/QtEmbedded-4.6.3-arm

注意:安装的在什么路径,这边就拷贝到文件系统的什么路径

另拷备三个库,后QT可显示,但触摸屏无效

cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libstdc++*   /root/build_rootfs/rootfs/lib/ -a

cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libts*   /root/build_rootfs/rootfs/lib/ -a     

cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/libpng*   /root/build_rootfs/rootfs/lib/ -a

安装触摸屏驱动

cp /usr/local/tslib  /root/build_rootfs/rootfs/usr/local/ -r -a

修改ts.conf文件,应该在$TSLIB_ROOT/etc/ts.conf     module_raw input#去掉

/root/build_rootfs/rootfs/etc/profile文件中添加:

cd /dev/

mkdir input              #核心输入设备目录

chmod 777 input

cd input/

mknod /dev/input/event0 c 13 64   #支持触摸屏,事件处理 1个事件队列--触摸屏设备文件名

mknod /dev/input/mice c 13 63     #支持鼠标,鼠标的节点

chmod 660 /dev/input/*

cd /

#为了实现Tslib 的正确运行,需要对如下的Tslib 的环境变量进行配置:

#/root/build_rootfs/rootfs/etc/profile文件中添加

export TSLIB_ROOT=/usr/local/tslib

export TSLIB_TSDEVICE=/dev/input/event0    #触摸屏设备文件名

export TSLIB_CALIBFILE=/etc/pointercal     #校准的数据文件,由ts_calibrate 校准程序生成

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf   #配置文件名

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts       #插件目录

export TSLIB_CONSOLEDEVICE=none                  #控制台设备文件名

export TSLIB_FBDEVICE=/dev/fb0                     #FB设备名

export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QTDIR/bin:$PATH

export QWS_MOUSE_PROTO=tslib:/dev/input/event0    #触摸屏设备文件名

执行触摸屏校正

/usr/local/tslib/bin/ts_calibrate   

(如果出现触摸屏触点不对准时,可在平台的/etc目录下添加文件pointercal,内容如下:)

71 -19602 17782628 25901 357 -2661832 65536

./age -qws -fn unifont

-qws 嵌入式的QT 都需要有个服务器,把它当做服务器使用

-fn unifont 指定字体的格式

QT编译:

qmake -project//创建工程

qmake//产生makefile

make clean//

make//当前目录下会生成与文件名同名的可执行文件,如果报QTest之类的错误,就在pro文件上加上

//QT += network//网络

//QT += testlib//QTest

如果Ubuntu 内存空间不够,需要扩展硬盘,参考如下

https://blog.csdn.net/weixin_39510813/article/details/78387334