2. 开发环境搭建:Workbench IDE配置、BSP选择与编译、SPI驱动工程创建

搭建一个稳定、可复现的开发环境是VxWorks SPI驱动开发的第一步。本章将引导你完成从Workbench IDE配置、BSP(板级支持包)选择与编译,到创建第一个SPI驱动工程的全过程。我们将以典型的ARM Cortex-A系列处理器(如NXP i.MX6)为例,确保步骤具有普适性。

环境概览: 本课程基于 VxWorks 7 + Workbench 4 开发套件。请确保已正确安装并获取了对应平台的License。不同BSP的配置细节可能略有差异,但核心流程一致。

2.1 Workbench IDE 基础配置

Workbench 是基于Eclipse的集成开发环境,首次启动后需进行几项关键配置,以关联VxWorks内核源码与编译工具链。

2.1.1 配置步骤清单

  1. 设置Workspace路径: 选择一个不含中文字符和空格的路径,例如 D:\vxworks_workspace。
  2. 导入VxWorks Source Build (VSB) 工程: VSB是VxWorks 7的源码构建系统。通过 File > Import > VxWorks > VxWorks Source Build Project 导入预先生成的或官方提供的VSB工程。
  3. 配置目标机连接(Target Server): 在 Window > Preferences > Target Management > Target Servers 中,添加一个新的Target Server,指定目标机IP地址(或通过Backplane/仿真器连接)。
  4. 设置内核调试符号: 在Target Server配置中,关联已编译好的VxWorks内核镜像文件(vxWorks)及其符号文件(vxWorks.sym),确保源码级调试可用。
关键检查点: 配置完成后,尝试连接目标机。若Workbench控制台输出 Attached to target ... 且无错误,则IDE与目标机通信正常。

2.1.2 IDE配置关系图

下图展示了Workbench、VSB工程、BSP与目标机之间的逻辑关系:

Workbench IDE 配置逻辑关系 Workbench IDE VSB 工程 BSP 包 目标机 (Target) SPI 驱动工程 说明:VSB 工程负责编译内核与BSP,生成镜像;Workbench 通过 Target Server 与目标机通信,加载并调试驱动。

2.2 BSP选择与编译

BSP是连接VxWorks内核与具体硬件平台的桥梁。选择正确的BSP并成功编译,是驱动开发的前提。

2.2.1 BSP选择原则

考量因素 说明 推荐操作
处理器架构 必须与目标板CPU完全匹配(如ARMv7-A、ARMv8-A、PPC、x86)。 在Workbench的BSP列表中筛选对应架构。
板级外设 BSP需包含目标板上所有关键外设的驱动,特别是SPI控制器。 查阅BSP发布说明,确认SPI驱动支持情况。
VxWorks版本 BSP必须与当前使用的VxWorks 7 SR(Service Release)版本兼容。 使用官方提供的BSP包,避免混用不同版本。
调试支持 优先选择支持JTAG或以太网调试的BSP,便于驱动调试。 选择带有 _debug 后缀的BSP配置。

2.2.2 BSP编译流程

在VSB工程中完成BSP的编译,主要步骤如下:

  1. 创建或选择VSB工程: 在Workbench中,通过 File > New > VxWorks Source Build Project 创建新工程,或导入已有的VSB工程。
  2. 配置BSP: 在VSB工程属性中,选择目标BSP(例如 bsp: armv7-a / imx6q_sabrelite)。
  3. 配置内核组件: 通过 VxWorks Image Configuration 界面,添加必要的组件:
    • INCLUDE_SPI — SPI核心框架
    • INCLUDE_SPI_MASTER — SPI主控制器支持
    • INCLUDE_END — 以太网支持(用于调试)
  4. 执行编译: 右键点击VSB工程,选择 Build Project。编译成功后,会在 default/vxWorks 路径下生成内核镜像。
常见编译错误: 若编译过程中出现 undefined reference to 'xxx',通常是因为缺少必要的内核组件。请返回步骤3,检查并添加缺失的组件后重新编译。

2.2.3 BSP编译流程SVG

BSP 编译流程 选择BSP 配置组件 执行编译 生成镜像 编译失败,返回配置组件

2.3 SPI驱动工程创建

在VSB编译成功后,我们将在Workbench中创建一个独立的SPI驱动工程,用于编写和调试驱动代码。

2.3.1 创建工程步骤

  1. 新建工程: 选择 File > New > VxWorks > VxWorks Kernel Module Project。
  2. 命名与位置: 输入工程名称,例如 spi_driver_demo,并选择存放路径。
  3. 关联VSB: 在工程属性中,选择 Build Settings > VxWorks Source Build Project,关联之前编译好的VSB工程。这是关键步骤,确保驱动工程能正确引用内核头文件和库。
  4. 选择编译工具链: 根据目标机架构,选择对应的GNU工具链(如 arm-wrs-vxworks7-gcc)。
  5. 添加源文件: 在工程中创建 spiDrv.c 和 spiDrv.h 文件,开始编写驱动代码。

2.3.2 工程结构示例

一个典型的SPI驱动工程包含以下文件:

文件/目录 用途
spiDrv.c 驱动核心实现,包括初始化、数据传输、中断处理等函数。
spiDrv.h 驱动头文件,定义数据结构、寄存器映射、API声明。
spiConfig.c 板级配置,定义SPI控制器基地址、时钟频率、中断号等硬件参数。
Makefile 编译规则文件,由Workbench自动生成,通常无需手动修改。

2.3.3 工程创建与依赖关系图

SPI 驱动工程创建与依赖 SPI 驱动工程 VSB 工程 BSP 头文件 GNU 工具链 说明:驱动工程通过关联VSB工程,自动获得BSP头文件路径和工具链配置,无需手动设置编译参数。

2.4 环境验证与常见问题

完成上述步骤后,建议进行快速验证,确保环境可用。

2.4.1 验证清单

  • 编译测试: 在SPI驱动工程中,右键选择 Build Project,观察控制台输出,确认无编译错误。
  • 下载测试: 将编译生成的 .out 文件通过Target Server下载到目标机,使用 ld < spi_driver_demo.out 命令加载。
  • 符号查看: 在Workbench的 VxWorks Shell 中,输入 lkup "spi",查看驱动相关符号是否已加载。
快速诊断: 如果 lkup 命令无法找到驱动符号,请检查驱动工程是否成功编译,以及Target Server是否正确关联了符号文件。

2.4.2 常见问题与对策

问题现象 可能原因 解决方案
编译时报错 fatal error: vxWorks.h: No such file or directory 驱动工程未正确关联VSB工程。 检查工程属性中的VSB关联路径是否正确。
下载驱动后目标机崩溃 驱动中访问了无效内存地址或未正确初始化硬件。 检查SPI控制器基地址和寄存器偏移量是否与BSP定义一致。
Target Server连接超时 网络配置错误或目标机未启动WDB agent。 确认目标机IP地址、子网掩码,并确保WDB组件已包含在VxWorks镜像中。