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 配置步骤清单
- 设置Workspace路径: 选择一个不含中文字符和空格的路径,例如
D:\vxworks_workspace。 - 导入VxWorks Source Build (VSB) 工程: VSB是VxWorks 7的源码构建系统。通过
File > Import > VxWorks > VxWorks Source Build Project导入预先生成的或官方提供的VSB工程。 - 配置目标机连接(Target Server): 在
Window > Preferences > Target Management > Target Servers中,添加一个新的Target Server,指定目标机IP地址(或通过Backplane/仿真器连接)。 - 设置内核调试符号: 在Target Server配置中,关联已编译好的VxWorks内核镜像文件(
vxWorks)及其符号文件(vxWorks.sym),确保源码级调试可用。
关键检查点: 配置完成后,尝试连接目标机。若Workbench控制台输出
Attached to target ... 且无错误,则IDE与目标机通信正常。
2.1.2 IDE配置关系图
下图展示了Workbench、VSB工程、BSP与目标机之间的逻辑关系:
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的编译,主要步骤如下:
- 创建或选择VSB工程: 在Workbench中,通过
File > New > VxWorks Source Build Project创建新工程,或导入已有的VSB工程。 - 配置BSP: 在VSB工程属性中,选择目标BSP(例如
bsp: armv7-a / imx6q_sabrelite)。 - 配置内核组件: 通过
VxWorks Image Configuration界面,添加必要的组件:INCLUDE_SPI— SPI核心框架INCLUDE_SPI_MASTER— SPI主控制器支持INCLUDE_END— 以太网支持(用于调试)
- 执行编译: 右键点击VSB工程,选择
Build Project。编译成功后,会在default/vxWorks路径下生成内核镜像。
常见编译错误: 若编译过程中出现
undefined reference to 'xxx',通常是因为缺少必要的内核组件。请返回步骤3,检查并添加缺失的组件后重新编译。
2.2.3 BSP编译流程SVG
2.3 SPI驱动工程创建
在VSB编译成功后,我们将在Workbench中创建一个独立的SPI驱动工程,用于编写和调试驱动代码。
2.3.1 创建工程步骤
- 新建工程: 选择
File > New > VxWorks > VxWorks Kernel Module Project。 - 命名与位置: 输入工程名称,例如
spi_driver_demo,并选择存放路径。 - 关联VSB: 在工程属性中,选择
Build Settings > VxWorks Source Build Project,关联之前编译好的VSB工程。这是关键步骤,确保驱动工程能正确引用内核头文件和库。 - 选择编译工具链: 根据目标机架构,选择对应的GNU工具链(如
arm-wrs-vxworks7-gcc)。 - 添加源文件: 在工程中创建
spiDrv.c和spiDrv.h文件,开始编写驱动代码。
2.3.2 工程结构示例
一个典型的SPI驱动工程包含以下文件:
| 文件/目录 | 用途 |
|---|---|
spiDrv.c |
驱动核心实现,包括初始化、数据传输、中断处理等函数。 |
spiDrv.h |
驱动头文件,定义数据结构、寄存器映射、API声明。 |
spiConfig.c |
板级配置,定义SPI控制器基地址、时钟频率、中断号等硬件参数。 |
Makefile |
编译规则文件,由Workbench自动生成,通常无需手动修改。 |
2.3.3 工程创建与依赖关系图
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镜像中。 |