环境以及软件版本
虚拟机环境:ubuntu16.04 64位
虚拟机环境中gcc的版本:gcc version 5.4.0 20160609
Qt版本:qt-everywhere-opensource-src-4.8.6.tar.gz
下载路径:http://download.qt.io/archive/qt/4.8/4.8.6/
QtCreator版本:qt-creator-linux-x86_64-opensource-2.5.2.bin
下载路径:http://download.qt.io/archive/qtcreator/2.5/
嵌入式交叉编译工具:arm-none-linux-gnueabi-gcc 4.3.3
下载路径: http://pan.baidu.com/s/1kULkXnh
中间使用到的gcc版本:gcc-4.4.3.tar.gz
下载路径:https://ftp.gnu.org/gnu/gcc/gcc-4.4.3/
Qt环境配置:
交叉编译环境配置:
1.1解压
tar -xvf arm-2009q1.tgz -C /usr/local/
1.2环境变量配置:
由于上一步是将交叉编译工具arm-none-linux-gnueabi-gcc 4.3.3解压到了/usr/local/目录下,交叉编译所需要使用的arm-none-linux-gnueabi-等命令是在/usr/local/arm-2009q1/bin目录中,运行
sudo vim vim environment 将/usr/local/arm-2009q1/bin追加到环境变量
2. Qt环境安装
2.1 Qt Creator安装
切换到对应目录,直接./qt-creator-linux-x86_64-opensource-2.5.2.bin运行按照界面提示操作即可
2.2 Qt安装
2.2.1 解压
将qt-everywhere-opensource-src-4.8.6.tar.gz解压三份,分别命名为qt_pc qt_x86 qt_arm
tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_pc
tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_x86
tar qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt/qt_arm
安装qt_pc
切换到qt_pc所在目录:cd /usr/local/qt/qt_pc
分别运行 即可完成安装
./configure
make
make install
安装qt_x86
1. 安装
切换到qt_x86所在目录:cd /usr/local/qt/qt_x86
分别执行以下命令进行安装
./configure -opensource -confirm-license -prefix /usr/local/Trolltech/Qt-qvfb-4.8.6 -embedded x86 -xplatform qws/linux-x86_64-g++ -qvfb
make
sudo make install
-xplatform qws/linux-x86_64-g++ :因为Ubuntu系统是64位的,所以将平台参数配置成linux-x86_64的。如果使用的是32位系统可直接使用qws/linux-x86-g++
2. qvfb模拟中文显示乱码
解决办法,重新下载了支持中文的wenquanyi字体,重新导入到Qt_x86的安装目录下的/lib/fonts下,然后在qtcreator的运行参数那里追加参数:
-qws -qws -font wenquanyi对于不同字号的支持,需要复制不同字号大小的wenquanyi字体到/lib/fonts目录下。之后再次点击即可运行中文即可解决。
详细:
http://blog.csdn.net/bobbat/article/details/51494226
http://blog.csdn.net/zybasjj/article/details/7660432
Qt4.8.6 ARM版安装
安装过程中需要的工具:
apt-get install lsb-core
apt install libtool-bin
gcc-4.4.3源码(gcc版本高于4.3.3即可,需要用到其中的linux-atomic.c文件)
1:交叉编译环境配置:
1.1解压
tar -xvf arm-2009q1.tgz -C /usr/local/
1.2环境变量配置:
由于上一步是将交叉编译工具arm-none-linux-gnueabi-gcc 4.3.3解压到了/usr/local/目录下,交叉编译所需要使用的arm-none-linux-gnueabi-等命令是在/usr/local/arm-2009q1/bin目录中,运行
sudo vim vim environment 将/usr/local/arm-2009q1/bin追加到环境变量
2. Qt ARM版配置
1-解压:
tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz -C /usr/local/qt_arm
2-configure
./configure -little-endian -opensource -confirm-license -prefix /hisome/qt/qt_4_8_6_arm -embedded arm -xplatform qws/linux-arm-gnueabi-g++
3-make
make -j4
出错:交叉编译环境配置没错
apt-get install lsb-core
可见是在编译/usr/local/qt_arm/qt-everywhere-opensource-src-4.8.6/src/corelib下面的文件时找不到lrt库了没,修改方法切换到此目录,修改其Makefile,在LIBS变量后追加-lrt
将下载的gcc-4.4.3.tar.gz的源码解压,然后在gcc-4.4.3/gcc/config/arm/目录下找到一个linux-atomic.c;
运行如下两条命令使用libtool制作链接库:
安装libtool -- apt install libtool-bin
libtool --tag=CC --mode=compile /usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
libtool --tag=CC --mode=link /usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
之后会在当前目录生成一个隐藏目录:.libs。进入到.libs这个目录,将其中的liblinux-atomic.a这个静态链接库复制到 /opt目录下。此处并非指定opt,只需复制到一个简短的目录,便于后续修改qt-everywhere-opensource-src-4.8.6.tar.gz中出错的Makfile。
就上图而言出错的目录是/usr/local/qt/qt_arm/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebKit/qt
到达这个目录,打开其Makfile,在LIBS这个变量后追加 -L/opt -llinux-atomic,保存退出即可,另外在接下来的编译中还会报一个同类型的错误,此时打开此目录下的Makefile.WebKit.QtWebKit在其LIBS后追加同样内容后继续make.
对于undefined reference to `__sync_add_and_fetch_4'类型的错误,只需在错误的地方注意下出错的目录,在对应目录中的Makefile中添加这个链接库即可。
没有任何错误后直接make install就好了
4. 字库设置,由于使用所下载的qt-everywhere-opensource-src-4.8.6自身不带中文字库,所以对于中文需求还需要另外下载pfb格式的字库。此次交叉编译过程中所使用的字库是wenquanyi字体。另外也可以将宋体等字体进行pfb格式转换详细过程见:
http://blog.csdn.net/zybasjj/article/details/7660432
开发板配置:
1. 将Qt应用程序所需要的库复制出来在qt_arm的安装目录下的lib目录下,应用程序需要哪个库就复制出来哪个库;另外还需要将所需要的字库复制到对应的文件夹(qt安装目录/lib/fonts)。所有这些文件的存放路径要与PC上的安装路径一致,字库设置完后在代码中要将中文转码为utf -8。
设置开发板的Qt环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/qt4_8_6/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/qt4_8_6/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=/home/qt4_8_6/fonts-------设置字库
详细介绍如下表
driver specific option |
使用对象 |
描述 |
tty= |
LinuxFb |
将设备文件描述符传递到Qt应用程序所在的终端 |
nographicsmodeswitch |
LinuxFb |
确保应用程序不运行在graphics模式 |
littleendian |
LinuxFb |
告知驱动程序处理framebuffer的时候使用小端模式 |
MmWidth= |
LinuxFb QVFb |
屏幕的物理宽度,用于计算DPI |
MmHeight= |
LinuxFb QVFb |
屏幕的物理高度用于计算DPI |
|
LinuxFb |
|
|
VNC Transformed,Multi |
指定子驱动 |
|
Transformed |
指定屏幕旋转,X的可用值是90 180 270 |
Offset= |
Multi |
指定子屏幕左上角的坐标(默认是0,0) |
QWS_DISPLAY环境变量还可以直接跟在可运行程序下面使用-display 来运行
嵌入式linux Qt的环境变量表
环境变量 |
描述 |
POINTERCAL_FILE |
指定包含用于校准指针设备的数据文件 详见:QWSCalibratedMouseHandler Qt for Embedded Linux Pointer Handling. |
QT_ONSCREEN_PAINT |
如果定义了此环境变量,Qt应用程序将直接在屏幕上显示部件。屏幕驱动程序不会修改屏幕的受影响区域,除非另外一个窗口在同一区域具有更高的焦点请求。设置了此环境变量等同于在Qt应用程序中设置了Qt::WA_PaintOnScreen属性,此属性应用于所有的部件, 可参考: Qt for Embedded Linux graphics rendering documentation |
QWS_SW_CURSOR |
定义此环境变量后软件鼠标光标会总是使用(即使使用了一个支持硬件光标加速的驱动程序) |
QWS_DISPLAY |
指定显示器类型和framebuffer可见上表 |
QWS_SIZE |
指定嵌入式linux中的Qt应用程序的窗口大小,此窗口以屏幕为中心, Export QWS_SIZE= |
QWS_MOUSE_PROTO |
指定软件鼠标光标的驱动程序。 Export QWS_MOUSE_PROTO=” driver可用参数:MouseMan; IntelliMouse; Microsoft ;LinuxTP ;Tslib 以及用户自定义的驱动标识。 另可一次性指定多个鼠标驱动: Export QWS_MOUSE_PROTO=” 参考:Qt for Embedded Linux Pointer Handling. |
QWS_KEYBOARD |
指定字符输入设备的驱动: Export QWS_KETBOARD=” driver可用参数:TTY ;LinuxInput以及用户自定义的驱动标识。 同QWS_MOUSE_PROTO设备,也可同时指定多个设备,使用方式同QWS_MOUSE_PROTO 参考:Qt for Embedded Linux Character Input. |
对于高版本的Qt的安装需要和高版本的arm-none-linux-gnueabi-交叉编译工具相配合,否则在编译源码过程中会有各种奇怪问题。之前使用4.3.3版本的交叉编译工具编译Qt5.8.0的源码的时候就出现了各种奇葩问题,由于交叉编译工具版本无法更换,故使用了Qt4.8.6进行编译安装。
在windows环境下使用高版本的Qt进行开发的时候要转而进行嵌入式开发的时候,建议先在windows下使用4.8.6版本的Qt将高版本的代码调试通过后即可对整个工程进行交叉编译。当前工程目录下使用交叉编译之需3步:(可以这样使用qmake的前提是交叉编译版的qmake已经做好了环境变量,否则需要填入完整路径)
1. qmake -project
2. qmake
3. make
嵌入式程序在板子上运行:
./appname -qws -font wenquanyi &
tslib解压安装:
tslib版本:tslib-1.4.tar.gz
下载路径:http://pan.baidu.com/s/1cLJ3qe
需要用到触摸屏的时候需要使用tslib,具体tslib安装过程中所需要的工具已经记不清楚了,不过配置过程是没问题的,到时候出哪个错了百度一下直接按照相关教程来安装对应的工具即可。
tar -xvf tslib-1.4.tar.gz
cd tslib
./autogen.sh
echo "ac_cv_func_malloc_0 _nonnull=yes">arm-linux.cache
./configure --host=arm-none-linux-guneabi --cache-file=arm-linux.cache --enable-inputapi=no -prefix=/usr/local/tslib
--host:指定交叉编译工具
-prefix:制定安装目录