跳过正文

VxWorks 6.8 安装配置 Qt 4.8.3 详细教程

·617 字·3 分钟
VxWorks Qt 嵌入式开发 VxWorks 6.8 Qt 4.8.3 Vxsim WindML 交叉编译 嵌入式GUI
目录

VxWorks 6.8 下安装与配置 Qt 4.8.3 详细指南

1. 前言
#

本文详细描述了在 VxWorks 6.8 操作系统下安装和设置 Qt 的方法,给出了完整的操作过程,并包含在 vxsim 虚拟机和实际目标板上编译、运行 Qt demo 程序的详细步骤。

2. 开发环境及工具
#

安装前请准备以下工具:

序号 名称 备注
1 Qt-vxworks-commercial-src-4.8.3.zip 需从相关渠道获取
2 MinGW 5.1.6 可从官网下载
3 Strawberry Perl 可从官网下载
4 VxWorks 6.8 (Workbench 3.2) 需从相关渠道获取
5 Windows 7 64bit 开发机操作系统

说明:

  • Strawberry Perl 下载地址:http://strawberryperl.com
  • MinGW 下载地址:http://sourceforge.net/projects/mingw/files
  • Qt for VxWorks 版本和 VxWorks 6.8 需从相关渠道购买。

3. 开发环境安装配置
#

3.1 安装 Workbench 3.2
#

请参考 VxWorks 6.8 安装手册,按说明书一步一步安装即可,本文不再赘述。

3.2 安装 MinGW
#

解压 MinGW,双击 MinGW-5.1.6.exe,按默认设置安装,建议安装在 C 盘。

3.3 安装 Strawberry Perl
#

双击 strawberry-perl-5.18.1.1-32bit.exe,按默认设置安装,建议安装在 C 盘。

安装完成后需要设置环境变量,在 Path 中添加:

C:\MinGW\bin;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin

VxWorks 6.8 QT

3.4 安装 Qt 4.8.3
#

  1. Qt-vxworks-commercial-src-4.8.3.zip 解压。
  2. 复制到 Wind River Workbench 的 workspace 目录中。
  3. 根据使用场景重命名:
    • 在 vxsim 虚拟机上测试:改为 qtsimdkm
    • 在目标机上使用:改为 qtp4dkm

这样做可以避免不同开发环境在交叉编译时引入错误配置。

VxWorks 6.8 QT

设置环境变量
#

  • vxsim 虚拟机开发:在 Path 中添加
    D:\WindRiver\workspace\qtsimdkm\bin

VxWorks 6.8 QT

  • 目标机开发:在 Path 中添加
    D:\WindRiver\workspace\qtp4dkm\bin

注意:上述两个路径不要同时添加,以免出错。

4. 在 vxsim 虚拟机上开发 Qt 应用程序
#

4.1 编译 windML 库
#

参考官方手册 Wind River Media Library SDK Programmer’s Guide 5.3,按标准步骤配置并编译。注意此时 CPU 选择 SIMPC

4.2 新建 VxWorks 镜像
#

以 vxsim 虚拟机为例:

  1. 在 Workbench 3.2 中选择 File → New → VxWorks Image Project
  2. 建立一个名为 zvipsim 的虚拟机镜像工程。

VxWorks 6.8 QT

VxWorks 6.8 QT

VxWorks 6.8 QT

VxWorks 6.8 QT

VxWorks 6.8 QT

VxWorks 6.8 QT

工程建立完成后,双击 Kernel Configuration,添加以下组件包:

INCLUDE_WINDML
INCLUDE_POSIX_ADVISORY_FILE_LOCKING
INCLUDE_POSIX_FTRUNC
INCLUDE_POSIX_MQ
INCLUDE_POSIX_MEM
INCLUDE_POSIX_SCHED
INCLUDE_POSIX_SEM
INCLUDE_POSIX_PTHREADS
INCLUDE_POSIX_PTHREAD_SCHEDULER
NUM_FILES=200
RTP_FD_NUM_MAX=200
INCLUDE_MMAP                  # 注:VxWorks 6.8 中无此包
INCLUDE_POSIX_MAPPED_FILES
INCLUDE_HRFS
INCLUDE_HRFS_FORMAT
HRFS_DEFAULT_MAX_BUFFER=1024
HRFS_DEFAULT_MAX_FILES=200
INCLUDE_XBD_RAMDRV
INCLUDE_XBD_PART_LIB

然后在 usrAppInit.c 中添加以下代码,用于在系统启动时创建 RAM disk:

/* for QT */
#include "stdio.h"
#include "hrFsLib.h"
#include "xbdPartition.h"
#include "xbdRamDisk.h"

#define DEVNAME "/tmpram"           /* name of the RAM disk */
#define BLOCKSIZE 512
#define DISKSIZE (BLOCKSIZE * 10000)
/* end of QT */

void usrAppInit (void)
{
#ifdef USER_APPL_INIT
    USER_APPL_INIT;                 /* for backwards compatibility */
#endif

    /* add application specific code here */

    /* for QT ----------------- */
    STATUS error;
    device_t xbd;

    xbd = xbdRamDiskDevCreate(BLOCKSIZE, DISKSIZE, 0, DEVNAME);
    if (xbd == NULLDEV)
    {
        printf("**Failed to create RAM disk\n");
        return;
    }
    printf("RAM disk created OK\n");

    error = hrfsFormat(DEVNAME, DISKSIZE, BLOCKSIZE, 1000);
    if (error != OK)
    {
        printf("**failed to format RAM disk, errno=0x%0x\n", error);
        return;
    }
    printf("RAM create and format OK\n");
    /* end of QT --------------------- */
}

完成以上配置后编译镜像。编译成功后,在 VxWorks 6.8 Development Shell 中进入 zvipsim/default 目录,执行:

vxsim --size 800M

启动虚拟机。

VxWorks 6.8 QT

VxWorks 6.8 QT

4.3 配置 Qt
#

在 VxWorks 6.8 Development Shell 中进入 qtsimdkm 目录,执行 configure:

configure -confirm-license -embedded -platform win32-g++ \
  -xplatform qws/vxworks-simdkm-g++ \
  -exceptions -qt-freetype -qt-zlib -qt-libpng -qt-libtiff \
  -qt-libjpeg -qt-libmng -no-qt3support -no-openssl \
  -nomake examples -nomake docs -nomake translations \
  -no-script -no-webkit \
  -prefix /tmp/qtsimdkm -static -release \
  -D QT_QWS_TEMP_DIR=\\\"/tmpram\\\" -make make

说明:加粗或需要修改的部分要根据实际开发环境调整。以上是 vxsim 虚拟机的配置。如果是 x86 目标机,需要改为:

  • -xplatform qws/vxworks-Pentium4dkm-g++
  • -prefix /ata0a/tmp/qtp4dkm

VxWorks 6.8 QT

VxWorks 6.8 QT

configure 执行完成后,会在 qtsimdkm 目录下生成 Makefile。随后进入该目录执行 make 进行编译(大约需要 10~20 分钟)。

编译成功后,将 workspace\qtsimdkm\lib 下的所有内容复制到 C:\tmp\qtsimdkm\lib。如果是目标环境,则复制到目标机硬盘 /ata0a/tmp/qtp4dkm/lib 下。

4.4 编译并运行 Qt 程序
#

  1. 在 VxWorks Development Shell 中进入 qtsimdkm\demos\affine 目录,执行 make,编译生成可执行文件 affine

VxWorks 6.8 QT

VxWorks 6.8 QT

  1. 将编译出的 affine 文件复制到虚拟机镜像所在目录 workspace\zvipsim\default
  2. 启动虚拟机:
vxsim --size 800M

VxWorks 6.8 QT

VxWorks 6.8 QT

  1. 在 vxsim0 中执行以下命令:
ld < affine
taskSpawn("main", 200, 0x01000000, 0x100000, main, 0, 0, 0, 0, 0)

即可看到 Qt demo 程序运行界面。

VxWorks 6.8 QT

VxWorks 6.8 QT

至此,VxWorks vxsim 虚拟机上运行 Qt 成功。

5. 在目标机上开发 Qt 应用程序
#

5.1 编译 windML 库
#

同样参考 Wind River Media Library SDK Programmer’s Guide 5.3 进行配置和编译。根据目标板选择对应的 CPU(本文测试目标板 CPU 为 Intel ATOM,选择 Pentium4)。

5.2 新建 VxWorks 镜像
#

按照 4.2 节步骤建立 VxWorks Image Project,注意在选择 CPU 和 BSP 时使用目标板实际的 BSP。建好后同样在 usrAppInit.c 中添加创建 RAM disk 的代码,并添加以下组件包:

INCLUDE_WINDML
INCLUDE_POSIX_ADVISORY_FILE_LOCKING
INCLUDE_POSIX_FTRUNC
INCLUDE_POSIX_MQ
INCLUDE_POSIX_MEM
INCLUDE_POSIX_SCHED
INCLUDE_POSIX_SEM
INCLUDE_POSIX_PTHREADS
INCLUDE_POSIX_PTHREAD_SCHEDULER
NUM_FILES=200
RTP_FD_NUM_MAX=200
INCLUDE_MMAP                  # 注:VxWorks 6.8 中无此包
INCLUDE_POSIX_MAPPED_FILES
INCLUDE_HRFS
INCLUDE_HRFS_FORMAT
HRFS_DEFAULT_MAX_BUFFER=1024
HRFS_DEFAULT_MAX_FILES=200
INCLUDE_XBD_RAMDRV
INCLUDE_XBD_PART_LIB

编译完成后通过网络下载到目标板测试,确认运行正常。

5.3 配置 Qt
#

在 VxWorks 6.8 Development Shell 中进入 qtp4dkm 目录,执行:

configure -confirm-license -embedded -platform win32-g++ \
  -xplatform qws/vxworks-Pentium4dkm-g++ \
  -exceptions -qt-freetype -qt-zlib -qt-libpng -qt-libtiff \
  -qt-libjpeg -qt-libmng -no-qt3support -no-openssl \
  -nomake examples -nomake docs -nomake translations \
  -no-script -no-webkit \
  -prefix /ata0a/tmp/qtp4dkm -static -release \
  -D QT_QWS_TEMP_DIR=\\\"/tmpram\\\" -make make

VxWorks 6.8 QT

VxWorks 6.8 QT

配置成功后会在 qtp4dkm 目录下生成 Makefile。打开命令行进入该目录执行 make 进行编译(大约 10~20 分钟)。

VxWorks 6.8 QT

编译完成后,将生成的 lib 库文件复制到目标机硬盘 /ata0a/tmp/qtp4dkm/lib 下。

VxWorks 6.8 QT

通过网络启动目标机,在 Workbench 上建立远程连接,将应用程序 D:\WindRiver\workspace\qtp4dkm\demos\affine\affine 下载到目标机。

下载完成后,在调试机 Shell 或目标机上执行:

taskSpawn("main", 200, 0x01000000, 0x100000, main, 0, 0, 0, 0, 0)

即可启动 Qt 程序。

VxWorks 6.8 QT

VxWorks 6.8 QT