VxWorks 6.9 BSP 移植:正点原子领航者7020关键硬件适配实战
1. 开发环境与BSP基础配置
在开始VxWorks 6.9 BSP移植前,需要确保开发环境正确搭建。正点原子领航者7020开发板基于Xilinx Zynq-7020 SoC,其双核ARM Cortex-A9处理器与VxWorks 6.9有良好的兼容性。以下是环境准备要点:
工具链版本:
- Wind River Workbench 3.3
- Xilinx Vivado 2018.3(匹配领航者7020的硬件设计)
- VxWorks 6.9 BSP开发包
硬件连接检查:
- 确保开发板通过USB转串口连接至主机
- 网线连接至开发板ENET0接口
- SD卡已格式化为FAT32文件系统
创建基础BSP包的步骤如下:
# 进入VxWorks安装目录 cd /path/to/vxworks-6.9/target/config # 复制参考BSP模板 cp -r xlnx_zynq7k xlnx_zynq70202. 串口配置修改
领航者7020开发板的默认调试串口为UART0,而Xilinx官方BSP默认使用UART1。需要修改以下文件中的相关定义:
hwconf.c关键修改点:
// 中断向量定义修改 { INT_VEC_UART1, 120 } → { INT_VEC_UART0, 120 } // 设备资源表修改 { "zynqSioDev", 0, VXB_BUSID_PLB, 0, zynqSioDev1Num, zynqSioDev1Resources } → { "zynqSioDev", 0, VXB_BUSID_PLB, 0, zynqSioDev0Num, zynqSioDev0Resources }时钟配置同步更新(在xlnx_zynq7k.h中):
#define ZYNQ7K_UART_CLK (100000000) /* 匹配领航者7020的UART时钟频率 */注意:修改后需重新编译BSP和bootloader,通过串口终端验证输出是否正常。
3. 网络PHY地址配置
领航者7020开发板使用的PHY芯片地址为1,与Xilinx官方开发板不同。这是导致网络不通的常见原因,需重点修改:
hwconf.c中的Gem控制器配置:
LOCAL struct hcfResource zynqGemDevResources[] = { { "regBase", HCF_RES_INT, {(void *)ZYNQ7K_GEM0_BASE} }, { "phyAddr", HCF_RES_INT, {(void *)1} }, // 原值通常为0 ... };bootline参数同步调整(config.h中):
#define DEFAULT_BOOT_LINE \ "gem(0,0)host:vxWorks h=192.168.1.119 e=192.168.1.142:fffffe00 \ g=192.168.155.1 u=z7 pw=z7 f=0x0 tn=xlnx_zynq7k"参数说明表:
| 参数 | 说明 | 示例值 |
|---|---|---|
| h | TFTP服务器IP | 192.168.1.119 |
| e | 开发板IP及MAC | 192.168.1.142:fffffe00 |
| g | 网关IP | 192.168.155.1 |
| u/pw | FTP登录凭证 | z7/z7 |
4. 外设时钟系统适配
领航者7020开发板的时钟树配置需要通过Vivado工程确认。在xlnx_zynq7k.h中更新以下时钟定义:
/* 时钟配置对照表 */ #define ZYNQ7K_OSCCLK0 (25000000) /* 系统基准时钟25MHz */ #define ZYNQ7K_ETHERNET_CLK (125000000) /* 以太网时钟125MHz */ #define ZYNQ7K_UART_CLK (100000000) /* UART时钟100MHz */ #define ZYNQ7K_SDHC_CLK (100000000) /* SD卡控制器时钟 */关键验证步骤:
- 在Vivado Block Design中确认时钟配置
- 导出硬件描述文件至SDK
- 比对时钟生成模块的输出频率
- 更新BSP中的宏定义
5. 存储设备启动选项
根据启动介质的不同,需要配置对应的宏定义:
SD卡启动配置(config.h中):
#define INCLUDE_BOOT_FILESYSTEMS #define DRV_STORAGE_SDHC #define INCLUDE_DOSFS // 启用FAT文件系统支持 #define INCLUDE_DOSFS_FAT // FAT32支持QSPI Flash启动配置:
#define INCLUDE_FLASH // 启用Flash驱动 #define INCLUDE_SST25VF016B // 匹配领航者板载Flash型号存储设备性能对比:
| 存储类型 | 读取速度 | 写入速度 | 典型用途 |
|---|---|---|---|
| SDHC | 20MB/s | 15MB/s | 内核映像 |
| QSPI | 5MB/s | 0.5MB/s | Bootloader |
| NAND | 30MB/s | 25MB/s | 数据存储 |
6. 中断控制器配置优化
Zynq-7020的GIC中断控制器需要针对VxWorks进行特定优化:
// hwconf.c中的中断优先级配置 LOCAL const struct intrCtlrPriority gicPriority[] = { { INT_VEC_UART0, 120 }, // 串口中断优先级 { INT_VEC_GEM0, 110 }, // 以太网中断优先级 { INT_VEC_SDIO, 100 } // SD卡中断优先级 }; // 中断触发类型配置 LOCAL const struct intrCtlrTrigger gicTrigger[] = { { INT_VEC_UART0, VXB_INTR_TRIG_LEVEL }, { INT_VEC_GEM0, VXB_INTR_TRIG_EDGE } };提示:中断优先级数值越小优先级越高,建议将关键外设(如网络)设置为较高优先级
7. 编译与调试技巧
完成BSP修改后,通过Workbench进行编译时需要特别注意:
bootloader编译选项:
CFLAGS += -DCPU=CORTEX_A9 -DTOOL_FAMILY=gnu -DTOOL=gnu内核映像生成命令:
vxprj build -project xlnx_zynq7020 -bootrom常见问题排查:
- 若串口无输出:检查UART0引脚复用配置
- 网络不通:使用示波器检测PHY芯片的MDIO信号
- 启动失败:确认BOOT.bin文件结构正确
调试工具推荐组合:
- J-Link调试器(用于底层调试)
- Wind River System Viewer(实时系统状态监控)
- Tera Term(串口终端日志捕获)