3. 配置VxWorks内核组件

任务目标

在Workbench中基于VxWorks 7创建一个最小内核工程,通过组件配置添加POSIX接口(INCLUDE_POSIX)与网络协议栈(INCLUDE_NETWORK),最终生成可启动的定制内核镜像(vxWorks.bin)。

环境与前置条件

  • 已安装VxWorks 7 + Workbench(本文以VxWorks 7 SR0660为例)
  • 已创建BSP工程(如qemu_virt_arm或目标板对应BSP)
  • 目标板串口/网络已连接,具备下载通道

操作步骤与关键配置

  1. 创建VIP工程:Workbench中 File > New > VxWorks Image Project,选择目标BSP,命名如custom_kernel。
  2. 打开组件配置:双击工程下的kernel配置文件(*.cdf),进入Components视图。
  3. 添加POSIX组件:搜索POSIX,勾选INCLUDE_POSIX(含pthread、信号量、消息队列等基础POSIX接口)。
  4. 添加网络组件:搜索NETWORK,勾选INCLUDE_NETWORK(IPv4协议栈),并确认INCLUDE_NETWORK_STACK已自动选中。
  5. 验证依赖:在Dependencies标签页确认无红色缺失项;若提示缺少INCLUDE_END(网络设备驱动),按提示添加对应BSP网卡驱动组件。
  6. 生成镜像:右键工程 Build Project,编译成功后镜像位于default/vxWorks.bin。

验证方法

  1. 启动内核:通过串口或网络下载vxWorks.bin到目标板,观察启动日志出现NFS client support或Network stack initialized字样。
  2. POSIX接口验证:在shell中执行pthreadCreate测试任务创建,若返回OK(0)则POSIX组件生效。
  3. 网络接口验证:执行ifconfig,若显示eth0或对应网卡接口且状态为UP,则网络组件配置成功。

常见问题

  • 编译报错缺少组件:在Components搜索报错符号名,勾选对应组件后重新编译。
  • 网络不通:确认BSP的网卡驱动组件(如INCLUDE_DRV_GEI82562)已添加,且目标板IP与主机在同一网段。
  • 镜像过大:若超出目标板存储限制,在Build Options中启用strip或裁剪未用组件。

关键代码说明

本案例核心操作在Workbench图形界面完成,无需手写代码。但为验证POSIX与网络功能,可在工程中添加如下测试代码(放置于usrAppInit.c的usrAppInit函数内):

#include <pthread.h>
#include <string.h>
#include <net/if.h>
#include <sys/socket.h>
#include <unistd.h>

static void* task_entry(void* arg) {
    while (1) {
        sleep(1);
    }
    return NULL;
}

void usrAppInit(void) {
    pthread_t tid;
    int ret = pthreadCreate(&tid, NULL, task_entry, NULL);
    if (ret == 0) {
        printf("POSIX pthread create OK\n");
    } else {
        printf("pthread create failed: %d\n", ret);
    }

    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock >= 0) {
        printf("Network socket create OK\n");
        close(sock);
    } else {
        printf("socket create failed\n");
    }
}

该代码仅用于验证组件是否生效:若编译通过且运行输出POSIX pthread create OK与Network socket create OK,则说明内核已包含所需组件。实际产品中应删除此测试代码。

VxWorks内核组件配置流程 1. 创建VIP工程 选择BSP,命名custom_kernel 2. 打开组件配置 编辑*.cdf文件 3. 添加POSIX组件 勾选INCLUDE_POSIX 4. 添加网络组件 勾选INCLUDE_NETWORK 5. 验证依赖 检查Dependencies无缺失 6. 生成镜像 Build Project → vxWorks.bin 验证方法 • 启动日志含Network stack • pthreadCreate返回OK • ifconfig显示eth0 UP 核心:通过组件勾选而非代码实现功能扩展,编译系统自动处理依赖