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就移植可以用了,喜欢我的博客,麻烦关注下,一起学习进步。我会把用到的资料发布出来。

 

 

     

 

 

 

 

 

 

 

 

 

已标记关键词 清除标记
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: linux-aarch64-gnu-g++ (arm64, CPU features: neon) Target compiler: gcc 6.3.1 Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon precompile_header shared rpath release c++11 c++14 concurrent dbus reduce_exports stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. yes Using C standard ....................... C11 Using C++ standard ..................... C++14 Using ccache ........................... no Using gold linker ...................... yes Using new DTAGS ........................ yes Using precompiled headers .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. yes Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... no Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... yes udev ................................... no Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... no iconv .................................. yes ICU .................................... no Tracing backend ........................ Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页