3. VxWorks BSP开发环境搭建:Workbench安装、交叉编译工具链配置、BSP项目创建与编译
搭建一个稳定、可复现的开发环境是VxWorks BSP开发的基石。本章将引导你完成从Workbench IDE安装、交叉编译工具链配置到BSP项目创建与编译的全流程。环境搭建的规范性直接影响后续驱动调试的效率与问题定位的准确性。
3.1 开发环境全景概览
一个完整的VxWorks BSP开发环境由以下核心组件构成,它们之间的协作关系如下图所示:
上图展示了从主机开发机到目标机的完整工具链路径:Workbench IDE 管理 BSP项目 和 VIP,VSB 提供编译子系统,交叉编译工具链 将源码编译为x86目标机可执行的二进制镜像。
3.2 Workbench安装与配置
Workbench是Wind River基于Eclipse框架打造的集成开发环境,集成了项目管理、代码编辑、编译调试、性能分析等核心功能。安装过程需注意版本匹配与许可证配置。
3.2.1 安装前置检查
| 检查项 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11 或 RHEL 7/8 | 推荐使用64位系统 |
| 磁盘空间 | ≥ 40 GB | 包含Workbench、工具链、BSP源码 |
| 内存 | ≥ 8 GB | 编译大型项目建议16 GB以上 |
| Java运行环境 | JRE 11+ | Workbench 7/8依赖 |
| 许可证服务器 | Wind River License Server | 确保网络可达 |
3.2.2 安装步骤
- 运行安装程序:以管理员身份执行
setup.exe(Windows)或setup.sh(Linux)。 - 选择安装组件:勾选
Workbench IDE、VxWorks 7、x86 BSP及对应交叉编译工具链。 - 配置许可证:在
Wind River License Configuration界面输入许可证服务器地址(如27000@lic-server)。 - 验证安装:启动Workbench,进入
Help > About Wind River Workbench确认版本号。
C:\WindRiver 或 /opt/windriver 等标准路径,避免编译脚本解析路径时出现异常。
3.3 交叉编译工具链配置
交叉编译工具链是BSP开发的核心,它运行在主机上,但生成的目标代码在x86目标机上执行。VxWorks 7为x86架构提供了预编译的GCC工具链。
3.3.1 工具链路径确认
安装完成后,工具链默认位于Workbench安装目录下的 toolchain 子目录。以VxWorks 7 SR0620为例,x86工具链路径为:
C:\WindRiver\toolchain\gnu\7.0.0\vxworks-7\x86-linux2-gnu\bin
该目录下应包含以下关键可执行文件:
| 文件名 | 用途 |
|---|---|
x86-linux2-gnu-gcc |
C编译器 |
x86-linux2-gnu-g++ |
C++编译器 |
x86-linux2-gnu-ld |
链接器 |
x86-linux2-gnu-ar |
静态库归档工具 |
x86-linux2-gnu-objdump |
目标文件反汇编工具 |
3.3.2 环境变量配置
为了在命令行中直接调用工具链,需要将工具链路径添加到系统环境变量 PATH 中,并设置 WIND_BASE 和 WIND_CC_SYSROOT:
# Windows (系统环境变量)
WIND_BASE=C:\WindRiver\vxworks-7
WIND_CC_SYSROOT=%WIND_BASE%\sysroot\x86-linux2
PATH=%PATH%;C:\WindRiver\toolchain\gnu\7.0.0\vxworks-7\x86-linux2-gnu\bin
# Linux (~/.bashrc)
export WIND_BASE=/opt/windriver/vxworks-7
export WIND_CC_SYSROOT=$WIND_BASE/sysroot/x86-linux2
export PATH=$PATH:/opt/windriver/toolchain/gnu/7.0.0/vxworks-7/x86-linux2-gnu/bin
3.3.3 验证工具链
打开终端,执行以下命令验证工具链是否可用:
x86-linux2-gnu-gcc --version
x86-linux2-gnu-gcc -print-sysroot
正常输出应显示GCC版本信息(如 8.3.0)和系统根目录路径。
cc1: error: sysroot path not found 错误。
3.4 BSP项目创建与编译
BSP项目是VxWorks 7中管理板级支持包源码、配置和编译产物的容器。创建BSP项目后,可以在此基础上开发时钟定时器驱动。
3.4.1 创建BSP项目流程
以下流程图展示了从Workbench创建BSP项目的完整步骤:
3.4.2 详细操作步骤
- 启动Workbench,选择工作空间目录(建议与安装目录分离,如
D:\workspace\vxworks)。 - 创建BSP项目:
File > New > Wind River Workbench Project > BSP Project。 - 选择BSP模板:在
BSP Template下拉列表中选择x86_pc_generic,这是x86平台最通用的BSP起点。 - 配置项目名称:输入
bsp_x86_pc,勾选Use default location。 - 选择工具链:在
Tool Chain中选择x86-linux2-gnu,确保与安装的工具链匹配。 - 完成创建:点击
Finish,Workbench将自动生成BSP项目骨架。
3.4.3 项目结构解析
创建完成后,BSP项目的目录结构如下:
bsp_x86_pc/
├── config.h # BSP全局配置头文件
├── makefile # 顶层Makefile
├── rules.vxWorks # 编译规则文件
├── sysALib.s # 汇编启动代码
├── sysLib.c # 系统库初始化
├── sysSerial.c # 串口驱动
├── sysClk.c # 时钟定时器驱动(核心文件)
├── sysHwInit.c # 硬件初始化
├── sysMem.c # 内存管理
├── target.nr # 目标机配置文件
└── 00lib/ # 编译输出目录
├── libbsp.a # BSP静态库
└── *.o # 各模块目标文件
sysClk.c 是时钟定时器驱动的核心实现文件,后续章节将深入分析其代码结构。编译后生成的 libbsp.a 是BSP的最终产物,会被链接到VxWorks内核镜像中。
3.4.4 编译BSP项目
编译BSP项目有两种方式:
| 方式 | 操作 | 适用场景 |
|---|---|---|
| Workbench图形界面 | 右键项目 > Build Project |
开发调试阶段,直观查看编译输出 |
| 命令行编译 | 进入项目目录,执行 make |
自动化构建、CI集成 |
编译成功后的终端输出示例:
Making directory: 00lib
x86-linux2-gnu-gcc -c -O2 -g -march=i686 -fno-strict-aliasing -I. -IC:/WindRiver/vxworks-7/h -IC:/WindRiver/vxworks-7/config/all -IC:/WindRiver/vxworks-7/config/comps/src -o 00lib/sysClk.o sysClk.c
x86-linux2-gnu-ar -r 00lib/libbsp.a 00lib/sysALib.o 00lib/sysLib.o 00lib/sysSerial.o 00lib/sysClk.o 00lib/sysHwInit.o 00lib/sysMem.o
x86-linux2-gnu-ranlib 00lib/libbsp.a
Build completed successfully.
3.4.5 常见编译错误与解决
cc1: error: sysroot path not found原因: 环境变量
WIND_CC_SYSROOT 未设置或路径错误。解决: 检查并重新设置
WIND_CC_SYSROOT 指向正确的sysroot目录。
make: *** No rule to make target 'config.h'原因: BSP项目配置未正确生成,或工作空间路径包含非法字符。
解决: 删除项目重新创建,确保路径不含空格或中文。
undefined reference to 'sysClkConnect'原因: 时钟定时器驱动函数未实现或未正确链接。
解决: 检查
sysClk.c 中是否实现了所有必需接口,并确认 makefile 中包含了该源文件。
3.5 开发环境验证
完成上述步骤后,通过以下清单验证环境是否就绪:
- Workbench 启动正常,无许可证报错。
- 交叉编译工具链 命令行可执行,版本正确。
- BSP项目 编译通过,生成
libbsp.a。 - 目标机连接 可通过串口或网络与主机通信(后续章节配置)。
至此,VxWorks BSP开发环境搭建完成,你已经具备了开始时钟定时器驱动开发的基础条件。下一阶段将深入分析 sysClk.c 的代码结构与硬件寄存器操作。