qt 移植(arm-linux)

学习嵌入式Linux也有一段时间了,最近在弄qt的移植,一个下午搞定(电脑编译太慢了  》==《  ),我来大概介绍下移植步骤:

一.  环境

linux主机:ubutun 16

开发板:mini2440

内核    : linux 3.4.2

busybox :1.20

qt版本:4.8.5

二.  移植步骤

移植QT的前提,首先你的开发板带有lcd驱动,触摸屏驱动并把这两个驱动编译进内核,这两个驱动可以参考韦老师去自己写,然后移植tslib,最后移植qt系统。总结下:a.写lcd驱动(当然如果板子已经有就不用写了)  b. .写触摸屏驱动(当然如果板子已经有就不用写了)  c.移植tslib   d.移植QT

1.写lcd驱动,这个可以参考韦老师的驱动,但是有一点注意要注意

比如:lcd_regs->lcdcon3=(37<<19) | (239<<8) | (10<<0);     我刚开始设置不对,然后发现屏幕显示左移了。所以驱动要根据自己的显示屏去设置,看看手册,要调。

2.触摸屏驱动,这一部分完全可以参考韦老师的驱动,了解输入子系统,以及ADC误差消除。

3.tslib移植

如果你的linux服务器是比较高的版本(我的是ubutun16)就得安装几个库,这样才能配置编译tslib

# apt-get install autoconf(或autoconf2.13)
# apt-get install automake
# apt-get install libtool

网上下载 tslib-1.4.tar.gz,拷贝到linux服务器,

然后解压缩     tar xzf tslib-1.4.tar.gz   ,   进入解压后的目录 cd tslib   ,执行其内部脚本./autogen.sh  ,创建一个目录mkdir tmp,待会我们安装到这个目录tmp,  执行echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache 再执行./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp  。

如果你用的编译版本和我一样,编译器要修改一点东西:把   /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h  里的   #define EV_VERSION       0x010000改为   #define EV_VERSION     0x010001。不然编译后的tslib不能用。

现在make编译   然后make install  .安装结束后进入tmp目录  执行 cp * -rf   /开发板文件系统根目录(我的是/work/nfsroot/min_fs)。

在开发板串口控制台,修改/etc/ts.conf  (去掉#和空格): 

# module_raw input
改为:
module_raw input

修改/etc/profile文件添加下面几句话:

export TSLIB_ROOT=/                                  #刚刚我是把tmp的目录拷贝到开发板文件根目录 /
export TSLIB_TSDEVICE=/dev/event0         #  这个是我触摸屏上报事件对于的设备文件节点,根据实际情况填您自己的。
export QWS_MOUSE_PROTO=tslib:/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal   
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf    
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts  
export TSLIB_FBDEVICE=/dev/fb0      #这个是我lcd驱动对应的设备文件节点,根据实际情况填您自己的
export TSLIB_CONSOLEDEVICE=none   
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

输入ts_calibrate  ,就会进入校准界面,此时tslib就移植完成。

4.QT移植

下载QT4.8.5源码  qt-everywhere-opensource-src-5.6.0.tar 

把它放到linux服务器解压tar zxvf qt-everywhere-opensource-src-5.6.0.tar

进入刚解压的qt-everywhere-opensource-src-5.6.0目录 ,vi mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf  修改编译参数,不然可能编译报错

我的qmake.conf被修改为:

include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)


QMAKE_INCDIR=/work/tools/tslib/tmp/include
QMAKE_LIBDIR=/work/tools/tslib/tmp/lib

# modifications to g++.conf
QMAKE_CC                = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX               = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK              = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = /work/tools/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-strip
QMAKE_CFLAGS           += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4 -mtune=arm920t
QMAKE_CXXFLAGS         += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4 -mtune=arm920t

然后配置./configure -prefix /usr/local/QT4.8.5-ARM-mini2440/ -force-pkg-config -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -depths 16,18,24 -fast -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -qt-mouse-tslib -little-endian -host-little-endian -no-qt3support -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -I/opt/tslib/tmp/include -L/opt/tslib/tmp/lib

其中/usr/local/QT4.8.5-ARM-mini2440/来表达编译linux服务器哪个目录下,

其中-I/opt/tslib/tmp/include,您刚刚不是在linux服务器编译了tslib  ,并且生成tmp目录吗,这里就是用这个tmp目录的子目录include来头文件。

其中-I/opt/tslib/tmp/lib,您刚刚不是在linux服务器编译了tslib  ,并且生成tmp目录吗,这里就是用这个tmp目录的子目录lib来编译。

然后编译sudo  make -j3     开3个线程 ,我话了2个小时,是个人电脑配置而定

安装  make install ,默认是按安装到  /usr/local/Trolltech/  ,进入目录  ,你会发现有以下文件:

bin/    demos/     examples/     imports/      include/      lib/          mkspecs/      plugins/      translations/

把plugins,imports,lib,mkspecs复制到开发板某个目录下,我是把它们拷贝到 /opt/qte目录,还要拷贝 demos目录到开发板根目录,这个目录有些QT例子,我们待会就用来测试

在开发板串口控制台,修改/etc/ profile 文件,我最后的内容如下:

#tslib

export TSLIB_ROOT=/
export TSLIB_TSDEVICE=/dev/event0
export QWS_MOUSE_PROTO=tslib:/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal   
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf    
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts  
export TSLIB_FBDEVICE=/dev/fb0   
export TSLIB_CONSOLEDEVICE=none   
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

#QT

export QTDIR=/opt/qte                              #刚才我把plugins,imports,lib,mkspecs拷贝到这的
export QPEDIR=/opt/qte                          
export PATH=$QTDIR/bin:$PATH
export QWS_DISPLAY=LinuxFb:/dev/fb0        #我显示屏对应的设备文件节点
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH

最后我们就看看我们的成果了:

进入demo目录,里面有很多测试程序  我就拿mainwindow程序来测试吧

进入mainwindows   ,执行  ./mainwindow -qws

就会看到结果了。

sss

  

QT就移植可以用了,喜欢我的博客,麻烦关注下,一起学习进步。我会把用到的资料发布出来。

 

     

猜你喜欢

转载自blog.csdn.net/xbfct/article/details/81460426