4. 添加网络协议栈

任务目标

在VxWorks7 BSP工程中集成网络协议栈(INCLUDE_END),使目标机启动后具备以太网接口,并通过命令行配置静态IP地址,最终实现主机与目标机之间的ping连通。

环境与依赖

  • VxWorks 7(本文以SR0640及以上版本为例)
  • 已创建的VxWorks Image工程(VIP)及对应的BSP工程
  • 目标机以太网物理接口(如Intel e1000、Freescale TSEC等,需BSP已支持对应驱动)
  • 主机与目标机处于同一网段,使用网线直连或经交换机连接

实现步骤

在VIP的配置文件(vxWorks.cdf或通过Wind River Workbench的组件配置界面)中启用以下网络组件,然后重新编译生成VxWorks镜像:

INCLUDE_END          // 网络协议栈基础(含TCP/IP)
INCLUDE_E1000        // 以太网驱动(以e1000为例,按实际BSP替换)
INCLUDE_IP            // IPv4协议
INCLUDE_ICMP          // ICMP协议(ping依赖)
INCLUDE_NETWORK       // 网络初始化
INCLUDE_ARP           // ARP协议
INCLUDE_IP_IFCONFIG   // ifconfig命令支持
INCLUDE_PING          // ping命令支持

若使用命令行构建,可在VIP目录下执行:

vxprj vip build -add INCLUDE_END -add INCLUDE_E1000 -add INCLUDE_IP -add INCLUDE_ICMP -add INCLUDE_NETWORK -add INCLUDE_ARP -add INCLUDE_IP_IFCONFIG -add INCLUDE_PING

关键完整代码

网络协议栈的集成主要通过VIP配置完成,无需编写C代码。以下为启动后配置IP并验证连通性的完整命令序列(在VxWorks shell中执行):

// 1. 查看网络接口状态(确认驱动已加载)
ifconfig

// 2. 配置静态IP地址(以192.168.1.100/24为例,按实际网络修改)
ifconfig e1000_0 inet 192.168.1.100 netmask 255.255.255.0 up

// 3. 验证接口配置
ifconfig e1000_0

// 4. 测试回环接口(验证协议栈自身正常)
ping 127.0.0.1

// 5. 从目标机ping主机(主机IP需在同一网段,如192.168.1.10)
ping 192.168.1.10

若需在启动时自动配置IP,可在VIP的configNet.h或启动脚本(bootApp.c)中添加以下初始化代码:

#include <vxWorks.h>
#include <hostLib.h>
#include <inetLib.h>
#include <ifLib.h>

void netInit(void) {
    char ifname[] = "e1000_0";
    struct in_addr inetAddr, netMask;
    inet_aton("192.168.1.100", &inetAddr);
    inet_aton("255.255.255.0", &netMask);
    ifAddrSet(ifname, &inetAddr, &netMask);
    ifUp(ifname);
}

在启动任务中调用netInit()即可实现开机自动配置。

运行与验证

  1. 编译VIP生成VxWorks镜像,通过FTP或串口下载到目标机启动。
  2. 在shell中执行ifconfig,确认出现e1000_0接口且状态为UP。
  3. 执行ping 127.0.0.1,预期输出类似:icmp_seq=0. time=0.1 ms,表示协议栈工作正常。
  4. 在主机命令行执行ping 192.168.1.100,若收到回复(Reply from 192.168.1.100: bytes=32 time<1ms TTL=64),则目标机网络配置成功。
  5. 若ping不通,依次检查:网线连接、目标机与主机IP是否同网段、防火墙是否拦截ICMP、驱动是否加载(ifconfig无接口时检查BSP驱动配置)。

通过条件:主机能够持续ping通目标机IP(丢包率0%),且目标机也能ping通主机IP,即视为本案例验证通过。

主机 192.168.1.10 VxWorks目标机 192.168.1.100 TCP/IP + ICMP + ARP ping 192.168.1.100 ping 192.168.1.10 e1000_0 e1000_0 接口UP 接口UP

常见问题

  • ifconfig无接口显示:确认BSP中已包含对应网卡驱动(如INCLUDE_E1000),且驱动与物理芯片匹配。
  • ping不通但接口UP:检查IP/掩码配置是否正确、网线是否完好、主机防火墙是否允许ICMP回显。
  • 启动时自动配置失败:确认netInit()在网络协议栈初始化完成后调用(可在usrNetInit之后挂接)。