1. 创建VxWorks交叉编译环境

任务目标

在x86架构的Linux主机上,为PowerPC目标机构建VxWorks交叉编译环境。完成工具链安装、环境变量配置,并通过编译一个最小C程序验证交叉编译器可用。

环境依赖

  • 主机:x86_64 Linux(Ubuntu 20.04+ / CentOS 7+)
  • 工具链:Wind River VxWorks 7 或 VxWorks 6.9 对应的PowerPC交叉编译器(如 powerpc-wrs-vxworks-gcc)
  • 目标机架构:PowerPC(e500/e6000系列)

实现步骤

本案例使用Wind River Workbench自带的交叉编译器。假设工具链已安装于默认路径,通过配置环境变量使编译器可直接调用,并编写最小测试程序验证编译链路完整。

关键完整代码

#!/bin/bash
# setup_cross_env.sh - VxWorks PowerPC交叉编译环境配置脚本

# ========== 1. 工具链路径配置(根据实际安装路径修改) ==========
export WIND_BASE="/opt/windriver/vxworks-7"
export WIND_HOST_TYPE="x86-linux2"
export PATH="$WIND_BASE/host/$WIND_HOST_TYPE/bin:$PATH"
export CC="powerpc-wrs-vxworks-gcc"
export AR="powerpc-wrs-vxworks-ar"
export LD="powerpc-wrs-vxworks-ld"

# ========== 2. 验证工具链存在 ==========
if ! command -v $CC > /dev/null; then
    echo "错误: 未找到 $CC,请检查 WIND_BASE 路径"
    exit 1
fi

# ========== 3. 创建并编译最小测试程序 ==========
cat > hello_ppc.c << 'EOF'
#include <stdio.h>

int main(void) {
    printf("VxWorks PPC cross-compile OK\n");
    return 0;
}
EOF

# ========== 4. 编译(生成VxWorks可加载模块格式) ==========
$CC -c hello_ppc.c -o hello_ppc.o
if [ $? -ne 0 ]; then
    echo "编译失败"
    exit 1
fi

# ========== 5. 验证生成的目标文件架构 ==========
file hello_ppc.o
echo "交叉编译环境配置成功"

运行与验证

  1. 赋予脚本执行权限并运行:chmod +x setup_cross_env.sh && ./setup_cross_env.sh
  2. 预期输出(确定性结果):hello_ppc.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV),表明生成的是PowerPC大端格式目标文件。
  3. 通过条件:file命令输出包含 PowerPC 字样,且脚本退出码为0。

常见问题

  • 找不到编译器:确认 WIND_BASE 路径正确,且工具链已安装。
  • 架构不匹配:若输出为x86格式,说明PATH中混入了主机gcc,检查 which $CC 指向是否正确。
  • 头文件缺失:VxWorks内核模块编译需额外指定 -I$(WIND_BASE)/target/h,本案例仅验证工具链,未涉及内核头文件。