Win10+VMware+Ubuntu16.04:嵌入式开发网络环境全攻略
刚接触嵌入式Linux开发时,最让人头疼的莫过于搭建开发环境。特别是当需要在虚拟机里编译代码、同时又要连接开发板调试时,网络配置往往成为拦路虎。本文将带你一步步配置一个"内外兼修"的开发环境——既能通过内网直连开发板调试,又能通过外网随时查阅资料。
1. 环境准备与基础概念
在开始配置之前,我们需要先了解几个关键概念和准备必要的硬件设备。嵌入式开发环境的网络配置之所以复杂,主要是因为它涉及三个独立系统之间的通信:Windows主机、Ubuntu虚拟机和嵌入式开发板。
必备硬件清单:
- Windows 10笔记本电脑(需具备无线网卡和有线网卡)
- JZ2440或其他ARM开发板(带以太网接口)
- 网线一根(用于连接电脑和开发板)
- 已安装VMware Workstation Pro软件
- Ubuntu 16.04虚拟机镜像
网络模式选择:
- NAT模式:让虚拟机共享主机的IP地址访问外网
- 桥接模式:使虚拟机获得独立的局域网IP,与开发板直接通信
关键点:我们需要为虚拟机配置双网卡,一个用于外网访问(NAT),一个用于内网调试(桥接)。这种配置既能保证开发效率,又能维持网络稳定性。
2. VMware网络配置详解
2.1 重置网络环境
首先我们需要确保VMware的网络环境是干净的:
- 关闭Ubuntu虚拟机
- 打开VMware的"虚拟网络编辑器"(需管理员权限)
- 点击"还原默认设置"按钮
- 确认VMnet0(桥接)和VMnet8(NAT)都存在
2.2 添加NAT网络适配器
NAT模式是虚拟机访问外网的关键:
# 在Ubuntu中检查NAT网卡是否正常工作 ifconfig ens33 ping -c 4 www.baidu.com如果发现网络不通,可以尝试以下命令:
sudo dhclient ens33 # 重新获取IP sudo systemctl restart networking # 重启网络服务常见问题排查表:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| ping不通外网 | 网关设置错误 | 检查/etc/network/interfaces文件 |
| 无法获取IP | DHCP服务未启动 | 执行sudo dhclient |
| 间歇性断连 | 防火墙阻挡 | 关闭Windows防火墙或添加例外 |
2.3 配置桥接网络适配器
桥接模式是实现三机互联的核心:
- 关闭虚拟机,添加新网络适配器
- 选择"桥接模式",并指定桥接到有线网卡
- 启动虚拟机,确认新网卡(通常为ens38)已被识别
注意:桥接网卡必须连接到开发板使用的那个物理网卡。如果你使用USB转以太网适配器,务必在VMware提示时选择"连接到主机"。
3. 三端静态IP配置
为了实现稳定通信,我们需要为Windows、Ubuntu和开发板配置同一网段的静态IP。这里我们使用192.168.5.x网段。
3.1 Windows主机配置
- 打开"网络连接"设置
- 右键点击有线网卡 → 属性 → IPv4设置
- 输入以下信息:
- IP地址:192.168.5.10
- 子网掩码:255.255.255.0
- 网关:192.168.5.1
提示:配置完成后网卡图标可能显示断开状态,这是正常的,因为开发板尚未通电。
3.2 Ubuntu虚拟机配置
Ubuntu 16.04使用NetworkManager管理网络,我们可以通过命令行配置:
# 临时设置IP(重启失效) sudo ifconfig ens38 192.168.5.11 netmask 255.255.255.0 # 永久配置 sudo nano /etc/network/interfaces在文件中添加以下内容:
auto ens38 iface ens38 inet static address 192.168.5.11 netmask 255.255.255.0 gateway 192.168.5.13.3 开发板配置
通过串口终端登录开发板,执行:
ifconfig eth0 192.168.5.9 route add default gw 192.168.5.1为了使配置永久生效,可以创建网络配置文件:
mkdir -p /etc/systemd/network nano /etc/systemd/network/50-static.network文件内容:
[Match] Name=eth0 [Network] Address=192.168.5.9/24 Gateway=192.168.5.14. 网络联通性测试与故障排除
配置完成后,我们需要验证三机之间的网络是否畅通。
4.1 基础测试步骤
开发板端测试:
ping 192.168.5.10 # Windows主机 ping 192.168.5.11 # Ubuntu虚拟机Ubuntu端测试:
ping 192.168.5.10 # Windows主机 ping 192.168.5.9 # 开发板 ping www.baidu.com # 外网测试Windows端测试:
ping 192.168.5.11 ping 192.168.5.9
4.2 常见问题解决方案
问题一:Windows能ping通Ubuntu但ping不通开发板
- 检查开发板是否已正确配置IP
- 确认网线连接正常
- 关闭Windows防火墙测试
问题二:Ubuntu能上外网但无法连接开发板
- 确认桥接网卡已正确选择物理接口
- 检查Ubuntu中ens38网卡是否启用
- 验证IP是否在同一网段
问题三:开发板无法保持IP设置
- 检查/etc/systemd/network目录权限
- 确认network服务已启用:
systemctl enable systemd-networkd
4.3 高级网络调试技巧
如果需要更深入的网络诊断,可以使用以下工具:
# 查看路由表 route -n # 检查ARP缓存 arp -a # 网络追踪 traceroute 192.168.5.1 # 详细网卡信息 ethtool ens385. 开发环境优化建议
配置好基础网络后,我们可以进一步优化开发体验。
5.1 SSH远程登录配置
避免频繁切换界面,可以配置SSH访问开发板:
# 开发板端安装SSH服务 opkg update opkg install openssh-server # Windows端使用PuTTY连接 ssh root@192.168.5.95.2 NFS共享文件夹设置
通过NFS可以在主机和开发板之间共享文件:
Ubuntu端配置:
sudo apt install nfs-kernel-server sudo nano /etc/exports添加:
/home/developer/nfs 192.168.5.0/24(rw,sync,no_subtree_check)开发板端挂载:
mkdir /mnt/nfs mount -t nfs 192.168.5.11:/home/developer/nfs /mnt/nfs
5.3 自动化脚本示例
创建网络检查脚本network_check.sh:
#!/bin/bash # 检查内网连接 ping -c 1 192.168.5.10 > /dev/null && echo "Windows: OK" || echo "Windows: Fail" ping -c 1 192.168.5.9 > /dev/null && echo "DevBoard: OK" || echo "DevBoard: Fail" # 检查外网连接 ping -c 1 www.baidu.com > /dev/null && echo "Internet: OK" || echo "Internet: Fail" # 检查服务状态 service nfs-kernel-server status | grep active6. 实际开发中的网络应用
6.1 交叉编译环境配置
利用稳定的网络环境,我们可以方便地搭建交叉编译工具链:
# 在Ubuntu中安装工具链 sudo apt install gcc-arm-linux-gnueabihf # 编译测试程序 arm-linux-gnueabihf-gcc -o test test.c # 通过NFS传输到开发板 cp test /home/developer/nfs/6.2 内核调试技巧
网络畅通后,可以方便地进行内核调试:
# 开发板端开启调试端口 echo 8 > /proc/sys/kernel/printk # Ubuntu端使用netconsole实时查看日志 nc -u 192.168.5.9 66666.3 性能优化建议
- 为虚拟机分配固定内存大小,避免频繁交换
- 关闭不必要的图形界面,节省资源
- 定期清理虚拟机快照,保持系统轻量
- 使用
rsync替代频繁的文件复制操作
在实际项目中,这套环境配置已经帮助我高效完成了多个嵌入式产品的开发。特别是在调试阶段,能够同时访问开发板和互联网大大提高了问题排查效率。记得第一次成功ping通所有设备时的成就感,现在想来,这些基础配置的熟练掌握确实是嵌入式开发的必备技能。