目录
[第二部分:在i.MX 6ULL开发板上进行永久配置](#第二部分:在i.MX 6ULL开发板上进行永久配置)
第四部分:常见问题与排错指南 (Troubleshooting)
问题一:在Ubuntu上应用netplan配置后,PC自己无法上网了
[问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0](#问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0)
问题三:在开发板上执行网络重启命令(如ifdown/ifup)卡住或报错
本文档提供一套完整、可靠的命令行方案,用于将您Ubuntu虚拟机的网络永久共享给i.MX 6ULL开发板。此方法将绕开图形界面中可能存在的BUG。
第一部分:在Ubuntu主机上进行永久配置
步骤1:配置网络接口 (netplan)
这是最关键的一步,它将为您的两个网卡分配正确的角色。
-
打开配置文件:
sudo nano /etc/netplan/01-network-manager-all.yaml
-
替换为以下内容: 请删除文件里的所有旧内容,然后完整地复制并粘贴以下配置。这个配置明确区分了两个网卡的功能。
network: version: 2 renderer: NetworkManager ethernets: ens33: # 这是连接开发板的网卡 dhcp4: no addresses: [192.168.10.1/24] ens37: # 这是您上网用的网卡 dhcp4: true
-
保存并应用:
-
按下
Ctrl + X
-> 按Y
-> 按Enter
保存并退出。 -
执行
sudo netplan apply
使配置生效。 -
验证 :执行
ping www.baidu.com
,确保您的Ubuntu电脑现在可以正常上网。
-
步骤2:开启IP转发功能 (sysctl)
这允许您的电脑像路由器一样转发数据包。
-
编辑配置文件:
sudo nano /etc/sysctl.conf
-
取消注释 :在文件中找到
#net.ipv4.ip_forward=1
这一行,删掉它前面的#
号。 -
保存并生效 :保存文件后,执行
sudo sysctl -p
使其立即生效。
步骤3:设置防火墙转发规则 (iptables)
这会告诉防火墙,允许来自开发板的数据包通过您的电脑访问互联网。
-
一次性执行以下三条命令:
sudo iptables -t nat -A POSTROUTING -o ens37 -j MASQUERADE sudo iptables -A FORWARD -i ens33 -o ens37 -j ACCEPT sudo iptables -A FORWARD -i ens37 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
步骤4:永久保存防火墙规则
-
安装保存工具:
sudo apt-get install iptables-persistent
-
保存规则 :在安装过程中,系统会弹出窗口询问是否保存当前的IPv4和IPv6规则,请两次都选择
<是 Yes>
。
第二部分:在i.MX 6ULL开发板上进行永久配置
现在,通过串口登录到您的开发板,进行以下设置。
-
编辑网络配置文件:
vi /etc/network/interfaces
-
修改为静态IP配置 : 使用
vi
编辑器,将文件内容修改为如下所示:auto eth0 iface eth0 inet static address 192.168.10.101 netmask 255.255.255.0 gateway 192.168.10.1 dns-nameservers 8.8.8.8
-
重启开发板 : 修改并保存文件后,执行
reboot
命令重启开发板。
第三部分:最终验证
重启完成后,您的所有网络配置都已永久生效。
-
在Ubuntu电脑上,通过SSH连接到开发板:
ssh root@192.168.10.101
-
成功登录后,在开发板终端中测试网络:
ping www.baidu.com
第四部分:常见问题与排错指南 (Troubleshooting)
在配置过程中,我们可能会遇到各种问题。本章节记录了常见问题的现象、原因及最终解决方案。
问题一:在Ubuntu上应用netplan
配置后,PC自己无法上网了
-
现象 :
ping www.baidu.com
提示"暂时不能解析域名"。 -
原因 :
netplan
的新配置没有为上网网卡(ens37
)指定DNS服务器,导致系统不知道去哪里查询域名。 -
解决方案 : 在
netplan
配置文件中,为ens37
添加nameservers
配置。不过,本教程最终版的netplan
配置已通过renderer: NetworkManager
和dhcp4: true
解决了此问题,这是更稳定可靠的方式。
问题二:重启开发板后,网络不通,route -n
显示的网关是0.0.0.0
-
现象: 开发板无法ping通任何外部地址,路由表里没有默认网关。
-
原因 : 开发板的操作系统在启动时,没有自动执行网络配置脚本来读取
/etc/network/interfaces
文件中的设置。这在一些精简的嵌入式系统中很常见。 -
解决方案: 手动应用所有网络设置。这也是我们最终成功的关键。
-
手动配置IP地址:
ifconfig eth0 192.168.10.101 netmask 255.255.255.0
-
手动添加网关 (最关键的一步):
route add default gw 192.168.10.1
-
手动配置DNS:
echo "nameserver 8.8.8.8" > /etc/resolv.conf
-
问题三:在开发板上执行网络重启命令(如ifdown
/ifup
)卡住或报错
-
现象 : 执行
ifdown eth0
命令后终端卡住,或执行/etc/init.d/networking restart
提示文件不存在。 -
原因: 您的嵌入式Linux系统非常精简,可能没有安装完整的网络管理工具套件,或者脚本在等待一个不存在的网络事件,从而导致卡死。
-
解决方案 : 放弃使用这些高层级的管理脚本,直接使用问题二中提到的
ifconfig
和route
等底层命令进行手动配置。
第五部分:实现开机自动配置网络(终极方案)
本章节为"问题二"提供一个一劳永逸的自动化解决方案。我们将创建一个脚本,让开发板在每次开机时自动执行网络配置命令。
步骤1:创建启动脚本
在您的开发板终端(通过串口连接)中,创建一个新的脚本文件。
vi /etc/init.d/autonet.sh
步骤2:编写脚本内容
使用 vi
编辑器,将以下内容完整地写入到新创建的文件中。
#!/bin/sh
### BEGIN INIT INFO
# Provides: autonet
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Manually configures network at boot
# Description: Ensures eth0 is configured with a static IP, gateway, and DNS.
### END INIT INFO
echo "Starting manual network configuration for eth0..."
# 1. 设置IP地址
ifconfig eth0 192.168.10.101 netmask 255.255.255.0
# 2. 设置网关
route add default gw 192.168.10.1
# 3. 设置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "Manual network configuration applied."
exit 0
步骤3:赋予脚本执行权限
让这个新创建的脚本变得可以执行。
chmod +x /etc/init.d/autonet.sh
步骤4:设置开机自启动 (通用方法)
由于 update-rc.d
和 rc.d
目录在您的系统上都不可用,我们将使用一个更通用、更可靠的方法:修改全局配置文件。
-
打开全局配置文件 : 在您的开发板终端 中,执行以下命令打开
profile
文件。这个文件在每次用户登录时都会被执行。vi /etc/profile
-
在文件末尾添加脚本路径 : 使用
vi
编辑器,移动到文件的最末尾,添加新的一行,内容如下:/etc/init.d/autonet.sh
- 说明 : 这样,每次系统启动并自动登录到控制台时,都会执行这个
profile
文件,从而运行我们的网络配置脚本。
- 说明 : 这样,每次系统启动并自动登录到控制台时,都会执行这个
-
保存并退出 : 按
Esc
-> 输入:wq
-> 按Enter
。
步骤5:重启并验证
现在,执行 reboot
命令重启您的开发板。重启完成后,您应该可以直接 通过网络 ssh root@192.168.10.101
连接,而无需再通过串口进行任何手动配置。