3. 配置VxWorks内核组件
任务目标
在Workbench中基于VxWorks 7创建一个最小内核工程,通过组件配置添加POSIX接口(INCLUDE_POSIX)与网络协议栈(INCLUDE_NETWORK),最终生成可启动的定制内核镜像(vxWorks.bin)。
环境与前置条件
- 已安装VxWorks 7 + Workbench(本文以VxWorks 7 SR0660为例)
- 已创建BSP工程(如
qemu_virt_arm或目标板对应BSP) - 目标板串口/网络已连接,具备下载通道
操作步骤与关键配置
- 创建VIP工程:Workbench中
File > New > VxWorks Image Project,选择目标BSP,命名如custom_kernel。 - 打开组件配置:双击工程下的
kernel配置文件(*.cdf),进入Components视图。 - 添加POSIX组件:搜索
POSIX,勾选INCLUDE_POSIX(含pthread、信号量、消息队列等基础POSIX接口)。 - 添加网络组件:搜索
NETWORK,勾选INCLUDE_NETWORK(IPv4协议栈),并确认INCLUDE_NETWORK_STACK已自动选中。 - 验证依赖:在
Dependencies标签页确认无红色缺失项;若提示缺少INCLUDE_END(网络设备驱动),按提示添加对应BSP网卡驱动组件。 - 生成镜像:右键工程
Build Project,编译成功后镜像位于default/vxWorks.bin。
验证方法
- 启动内核:通过串口或网络下载
vxWorks.bin到目标板,观察启动日志出现NFS client support或Network stack initialized字样。 - POSIX接口验证:在shell中执行
pthreadCreate测试任务创建,若返回OK(0)则POSIX组件生效。 - 网络接口验证:执行
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,则说明内核已包含所需组件。实际产品中应删除此测试代码。