虚拟机环境: ubuntu12.04 32bit /64bit
目标平台: i.MX6 开发板
交叉编译工具链: gcc gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12
文件系统: 飞凌嵌入式 提供的 rootfs
注意:
1 飞凌嵌入式 iMX6开发平台 发布资料里面提供编译好的 Qt 库和开发工具 qt4.8.5-sdk.tar.bz2, tslib-sdk.tar.bz2 ,如果您进行 Qt 应用程序的开发可以不 用编译 Qt ,直接跳到 1.4 节,进行应用程序的开发。
2 发布的 Linux 文件系统中默认含有 Qt 库,可以直接运行 Qt 应用程序, Qt 版本: Qt4.8.5 。
1.1.1 安装交叉编译器
拷贝 tools 目录下的 gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
到 //work/imx6 目录下面
root@forlinx:/work/imx6/qt4.8.5# tar xvf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz -C /usr/local/arm
注意:本操作是在 32bit ubuntu12.04 运行。如果在 64bit ubuntu12.04 下运行 32bit 可执行程序,必须执行 sudo apt-get install ia32-libs libc6-i386 , 安装在 64bit ubuntu12.04 下 32bit 程序的运行库。
root@forlinx:/work/imx6/qt4.8.5#/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-linux-gcc -v
1.1.2 设置交叉编译器环境变量
# gedit /etc/profile
在文件的末尾添加如下环境变量 :
export PATH= root@forlinx:/work/imx6/qt4.8.5#/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH
export TOOLCHAIN= /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain
export TB_CC_PREFIX=arm-none-linux-gnueabiexport
PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
如下图所示 :
1.1.3 导入环境变量
# source /etc/profile
# arm-linux-gcc -v
如下图所示则说明添加编译器成功:
1.2 移植 tslib
tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供
诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因
此这里先编译安装 tslib ,这样在后面编译 Qt 的时候才能打包编译进去
1.2.1 安装 autoconf 、 automake 、 libtool 包
# sudo apt-get install autoconf #tslib 依赖
# sudo apt-get install automake #tslib 依赖
# sudo apt-get install libtool #tslib 依赖
# sudo apt-get install g++ #tslib 依赖
# sudo apt-get install libc6-dev:i386 #qt4.8.5 依赖
#sudo apt-get install build-essential #qt4.8.5 依赖
#sudo apt-get install gcc-multilib #qt4.8.5 依赖
1.2.2 拷贝压缩文件
拷贝 src 目录下 tslib-1.4-src.tar.bz2 的到 /work/imx6 (推荐)目录下面
# tar -xvf tslib-1.4-src.git.tar.bz2
# cd tslib
# ./tslib.sh # 飞凌提供的编译脚本,执行完会将 tslib 默认安装到 /usr/local/arm/tslib
1.2.3 移植 tslib 到 i.MX6 目标板
假设用户的根文件系统路径为: /work/imx6/rootfs
执行以下命令:
# cd /usr/local/arm/tslib
# cp -ar lib/* /work/imx6/rootfs /usr/lib
# cp -ar bin/*/work/imx6/rootfs/usr/bin
# vi etc/ts.conf # 去掉 module_raw input 前注释符 #, 一定要注意中间的空格也去掉, module 顶格
# cp -ar etc/* /work/imx6/rootfs /etc
1.2.4 导出 tslib 环境变量
# cd /work/imx6/rootfs
# vi etc/rc.d/qt_env.sh
添加以下环境变量
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
< tslib 环境变量说明:
TSLIB_CONFFILE // 配置文件名
TSLIB_PLUGINDIR // 插件目录
POINTERCAL_FILE : // 指定包含用于校准指针设备的数据的文件
TSLIB_TSDEVICE // 触摸屏设备文件名
TSLIB_CALIBFILE // 校准的数据文件,由 ts_calibrate 校准程序生成
TSLIB_CONSOLEDEVICE // 控制台设备文件名
TSLIB_FBDEVICE // 设备名
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的
开发板上的 /dev 目录下的设备节点相对应。
1.2.5 在 i.MX6q 目标板下测试 tslib
用新文件系统启动 i.MX6q 板子,进入 shell 后执行如下命令:
#source /etc/rc.d/qt_env.sh
# ts_calibrate 对电阻屏进行触摸较验
# ts_test 对电阻屏进行触摸测试
1.3 移植QT 4.8.5
1.3.1 拷贝压缩文件
拷贝 src 目录下的 qt-everywhere-opensource-src-4.8.5.tar.gz 到 /work/imx6 目录下面 , 请注意,
我们对 Qt 源码进行了必要的配置,默认配置路径就是 /work/imx6 , 如果您的 Ubuntu 里面没有该路
径请执行如下命令创建 ”/work/imx6” 路径:
#mkdir /work/imx6
执行以下命令解压 Qt 源码文件夹 :
# tar xvfj qt-everywhere-opensource-src-4.8.5.tar.gz
#tar xvfj linux-imx6-g++.tar.bz2
#cp –fr linux-imx6-g++ qt-everywhere-opensource-src-4.8.5/mkspecs/qws/ linux-imx6-g++
#cp qteverywhere.sh qt-everywhere-opensource-src-4.8.5/
# cd qt-everywhere-opensource-src-4.8.5
#export PATH=$PATH: /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/
修改 qt-everywhere-opensource-src-4.8.5/ mkspecs/common/linux.conf,pthread 后面添加 -lts
#make confclean
#make clean
# ./qteverywhere.sh ## 飞凌提供的编译脚本,执行完会将 qt 默认安装到 /usr/local/arm/qt4.8.5
#make
#mkdir –p /usr/local/freescale/qt4.8.5
#make install
#/usr/local/freescale/qt4.8.5/bin/qmake –v # 查看是否按照成功
如下图所示则说明添加qt库编译器成功
1.3.3 移植 qt4.8.5 到 i.MX6 目标板
# cd /usr/local/freescale/qt4.8.5/
# cp -ar lib/libQt* lib/fonts/ /work/imx6/rootfs/opt/forlinx_qt4.8/lib
# cp -ar demos/embeddeddialogs/embeddeddialogs /work/imx6/rootfs/opt/forlinx_qt4.8/bin
注:若 opt/forlinx_qt4.8 {lib,bin} 目录不存在可以自己创建,也可以是其他目录
1.3.4 导出 qt 环境变量
# cd /work/imx6/rootfs
# vi etc/rc.d/qt_env.sh# 添加以下环境变量
export QTDIR=/opt/qt4.8.5
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export QWS_DISPLAY="linuxfb:mmWidth50:mmHeight130:0"
export QWS_SIZE=800x480
Qt 环境变量说明:
LD_LIBRARY_PATH :指定 qt 的共享库具体路径
QT_QWS_FONTDIR :指定 qt 的 font 具体路径
QWS_SIZE :设定在屏幕尺寸
QWS_DISPLAY :指定的显示类型和帧缓冲区
QWS_MOUSE_PROTO :指定触摸设备
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发
板上的 /dev 目录下的设备节点相对应。
开机自动启动程序放在 /etc/rc.d/apps.sh
内容如下:
#!/bin/sh
#apps
cd /opt/qt4.8.5/demos/embedded/fluidlauncher
./fluidlauncher -qws &
#apps
手动运行程序
#source /etc/rc.d/qt_env.sh
cd /opt/qt4.8.5/demos/embedded/fluidlauncher
./fluidlauncher -qws &
1.3.5 i.MX6 目标板下测试 QT4.8.5
用新移植的文件系统启动开发板,进入 shell 后执行如下命令:
# cd / opt/forlinx_qt4.8/bin/
# ./embeddeddialogs -qws&
注意:如果想让界面竖屏显示,只需添加 -display "Transformed:Rot90" 参数即可。
如下图所示:
1.4 Qt Creator 开发环境搭建及编程
1.4.1 安装 Qt Creator2.4.1
在 Ubuntu 图形gui安装
在 Ubuntu 命令行执行如下命令:
#apt-get install qtcreator
安装完成后在终端输入以下命令,开启 Qt Creator
#qtcreator&
1.4.2 设置 Qt Creator 使其支持交叉编译
点击 Qt Creator 的 Tools 菜单下的 Options ,点击左列 Build & Run ,然后点击界面右侧的 Tools Chains
标签页, 然后点击 Add 添加 GCCE, 单击 Compiler path Browse 添加交叉编译器
(/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-linux-g++) 的路径,如下图所示:
Qt Creator Versions 的设置
点击 Add 添加 /usr/local/freescale/qt4.8.5/bin/qmake 文件 ( 我们提供的 qt4.8.5-sdk.tar.bz 含有 qmake 文件,把
qt4.8.5-sdk.tar.bz 压缩包释放到 /usr/local/ freescale 目录即可 ) ,添加进去,之后,点击 Apply 即配置完成。
1.4.3 新建 hello Qt 程序进行测试
创建一个 Qt Widget Project 项目,如下图:
输入项目名称和项目路径,如下图:
选择 Manually 版本(就是我们刚才添加的那个交叉编译器版本,一定要选对)
剩下的步骤默认就好,然后就可以通过 Build->Build All 进行编译,如下图:
1.4.4 在开发板上测试 qt 应用程序
注:由于 qt 字体库里已包含一个中文字体,故直接可以在程序中使用中文,无需额外操作
原文链接:https://www.forlinx.com/article_view_154.html