本文档描述了U-Boot加载VxWorks内核的相关信息。

U-Boot 支持通过 bootvx 和 bootm 命令来加载 VxWorks 的内核。 要在 PowerPC 和 ARM 上引导加载旧的内核 (6.9.x) 以及其他体系结构上的所有内核版本,应使用 bootvx 。要在 PowerPC/ARM/RISC-V 上启动 VxWorks 7 的内核,应使用 bootm 。

使用 CONFIG_EFI_LOADER 选项,可以通过用于 bootefi 命令加载的 VxWorks 的 UEFI 引导加载程序来链式加载 VxWorks x86 内核。

PowerPC/ARM/RISC-V 上的 VxWorks 7

从VxWorks 7开始,VxWorks开始采用设备树作为其硬件描述机制(针对PowerPC和ARM),因此需要更改引导接口。 本节将介绍新的接口。

自VxWorks 7 SR0640发布以来,VxWorks开始在某些板卡上使用Linux兼容的标准DTB。 这样,就可以使用与 Linux 所使用的完全相同的 bootm 流程,其中包括特定于板的 DTB 的调整。 为了保持向后兼容性,只有当 bootargs 中标志的最低有效位被设置时,才会使用标准 DTB。 否则它会退回到传统的 bootm 流程。

对于传统的旧的 bootm 流程,请确保清除 bootargs 中标志的最低有效位。调用约定描述如下:

对于PowerPC,新的VxWorks入口点的调用约定符合ePAPR标准,如下所示(更多详细信息请参见ePAPR):


void (*kernel_entry)(fdt_addr, 0, 0, EPAPR_MAGIC, boot_IMA, 0, 0)

对于ARM,调用约定如下所示:


void (*kernel_entry)(void *fdt_addr)

当使用Linux兼容的标准DTB时,VxWorks入口点的调用约定与Linux内核完全相同。

对于 RISC-V,没有传统的 bootm 流程,因为 VxWorks 始终使用与 Linux 内核相同的启动接口,调用约定如下:


void (*kernel_entry)(unsigned long hartid, void *fdt_addr)

当启动VxWorks 7内核(uImage格式)时,传递给bootm的参数如下:


bootm "kernel image address" - "device tree address"
VxWorks 引导命令行

使用 bootvx 时,在加载 VxWorks 之前,U-Boot 必须在板特定地址处准备好内核引导命令行参数。 U-Boot 通过 bootaddr 环境变量来提供其地址。 要检查特定板的引导命令行应位于何处,请转至该板的 VxWorks BSP目录下,并查找名为 BOOT_LINE_ADRS 的参数。 将其值分配给 bootaddr 。 x86 板上 bootaddr 的典型值为 0x101200。

如果定义了 bootargs 变量,则其内容将被复制到 bootaddr 指向的内存位置作为内核的引导行。 如果 bootargs 不存在,命令 bootvx 可以使用以下环境变量构建有效的引导行:bootdev、bootfile、ipaddr、netmask、serverip、gatewayip、hostname、othbootargs。

使用 bootm 时,只需在环境中定义 bootargs,U-Boot 将自动处理内核 dtb 的引导命令行的设置。

当使用 bootefi 链接加载 x86 内核时,VxWorks 的 UEFI 引导加载程序将负责内核引导行的准备工作。

串口控制台

VxWorks BSP 为串行控制台配置与 U-Boot 使用的波特率不同的波特率是很常见的。 例如,VxWorks 倾向于使用 9600 作为所有 x86 BSP 上的默认波特率,而 U-Boot 使用 115200。请配置 U-Boot 和 VxWorks 以使用相同的串口波特率,否则 VxWorks 可能会在某处挂起,因为在串口控制台上看不到任何输出。

x86的特定信息

在通过 bootvx 直接加载 x86 内核之前,需要提供一个额外的环境变量。这就是 vx_phys_mem_base,它代表了VxWorks的物理内存基地址。

检查 VxWorks 内核配置以查找 LOCAL_MEM_LOCAL_ADRS。 对于VxWorks 7,这通常是一个虚拟地址,您需要找到其对应的物理地址并将其值赋给 vx_phys_mem_base 。

对于 U-Boot 尚不支持 ACPI 的主板,必须将 VxWorks 内核配置为使用 MP 表和虚拟线中断的模式。 这需要将 INCLUDE_MPTABLE_BOOT_OP 和 INCLUDE_VIRTUAL_WIRE_MODE 包含在 VxWorks 内核配置中。

32 位 x86 和 64 位 x64 内核都可以加载。

VxWorks 中有两种类型的图形控制台驱动程序。一种是 80x25 VGA 文本模式驱动程序。 另一种是 EFI 控制台位图图形模式驱动程序。为了使这些驱动程序发挥作用,U-Boot 需要首先加载并运行显卡的 VGA BIOS。

如果 VxWorks 内核配置了 80x25 VGA 文本模式驱动程序,则必须在 U-Boot 中取消设置 CONFIG_FRAMEBUFFER_SET_VESA_MODE。

如果 VxWorks 内核配置了位图图形模式驱动程序,则 CONFIG_FRAMEBUFFER_SET_VESA_MODE 需要保持设置,但必须注意设置哪个 VESA 模式。 支持的像素格式为 32 位 RGBA,因此可用的 VESA 模式只能是以下之一:

  • FRAMEBUFFER_VESA_MODE_10F
  • FRAMEBUFFER_VESA_MODE_112
  • FRAMEBUFFER_VESA_MODE_115
  • FRAMEBUFFER_VESA_MODE_118
  • FRAMEBUFFER_VESA_MODE_11B