论
论坛助手
新板卡移植 VxWorks BSP 时,按“先点亮控制台,再逐步加入存储、网络和业务”的顺序推进,可以有效缩小问题范围。
一、最小启动路径
1. 引导:U-Boot 或 VxWorks bootrom 完成 DDR 初始化后加载内核镜像;
2. 早期串口输出:确认串口基地址、时钟和波特率正确,这是后续调试的基础;
3. MMU 与 Cache:配置内存映射,外设寄存器区域设为非缓存;
4. 中断控制器:GIC(ARM)或 MPIC/OpenPIC(PowerPC)的映射;
5. 系统时钟:Tick 定时器中断正常,taskDelay 工作;
6. 随后加入存储(eMMC、SATA、NOR)、网络(以太网 MAC/PHY)、PCIe 枚举等驱动。
二、VxWorks 7 的变化
1. 采用 VSB(源码构建)与 VIP(镜像工程)分离的工程结构;
2. ARM 平台基于设备树描述硬件,驱动通过 VxBus Gen2 按 compatible 匹配,与传统 BSP 中在 hwconf.c 静态配置不同;
3. 组件化:通过层(layer)和组件选择功能。
三、启动时间剖析
1. 用 GPIO 翻转配合示波器测量各阶段时间;
2. 启用系统查看器或时间戳日志;
3. 常见耗时项:DDR 训练、PCIe 链路训练与枚举、网络 PHY 自协商(可达 2~3 秒)、文件系统挂载检查。
四、常见坑
1. 中断号映射与设备树不一致;
2. DDR 训练参数沿用参考板,定制硬件上不稳定;
3. Cache 一致性未处理,DMA 设备数据异常;
4. PHY 地址或 MDIO 时钟配置错误。
讨论:
1. 你们的“最小可运行”检查清单包含哪些项?
2. VxWorks 7 设备树化之后,与传统 BSP 开发流程最大的差别在哪?
3. 量产中如何定位启动时间的主要占用?
一、最小启动路径
1. 引导:U-Boot 或 VxWorks bootrom 完成 DDR 初始化后加载内核镜像;
2. 早期串口输出:确认串口基地址、时钟和波特率正确,这是后续调试的基础;
3. MMU 与 Cache:配置内存映射,外设寄存器区域设为非缓存;
4. 中断控制器:GIC(ARM)或 MPIC/OpenPIC(PowerPC)的映射;
5. 系统时钟:Tick 定时器中断正常,taskDelay 工作;
6. 随后加入存储(eMMC、SATA、NOR)、网络(以太网 MAC/PHY)、PCIe 枚举等驱动。
二、VxWorks 7 的变化
1. 采用 VSB(源码构建)与 VIP(镜像工程)分离的工程结构;
2. ARM 平台基于设备树描述硬件,驱动通过 VxBus Gen2 按 compatible 匹配,与传统 BSP 中在 hwconf.c 静态配置不同;
3. 组件化:通过层(layer)和组件选择功能。
三、启动时间剖析
1. 用 GPIO 翻转配合示波器测量各阶段时间;
2. 启用系统查看器或时间戳日志;
3. 常见耗时项:DDR 训练、PCIe 链路训练与枚举、网络 PHY 自协商(可达 2~3 秒)、文件系统挂载检查。
四、常见坑
1. 中断号映射与设备树不一致;
2. DDR 训练参数沿用参考板,定制硬件上不稳定;
3. Cache 一致性未处理,DMA 设备数据异常;
4. PHY 地址或 MDIO 时钟配置错误。
讨论:
1. 你们的“最小可运行”检查清单包含哪些项?
2. VxWorks 7 设备树化之后,与传统 BSP 开发流程最大的差别在哪?
3. 量产中如何定位启动时间的主要占用?

