通过Ubuntu和i.MX 6ULL开发板实现网络共享

目录

第一部分:在Ubuntu主机上进行永久配置

步骤1:配置网络接口 (netplan)

步骤2:开启IP转发功能 (sysctl)

步骤3:设置防火墙转发规则 (iptables)

步骤4:永久保存防火墙规则

[第二部分:在i.MX 6ULL开发板上进行永久配置](#第二部分:在i.MX 6ULL开发板上进行永久配置)

第三部分:最终验证

第四部分:常见问题与排错指南 (Troubleshooting)

问题一:在Ubuntu上应用netplan配置后,PC自己无法上网了

[问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0](#问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0)

问题三:在开发板上执行网络重启命令(如ifdown/ifup)卡住或报错

第五部分:实现开机自动配置网络(终极方案)

步骤1:创建启动脚本

步骤2:编写脚本内容

步骤3:赋予脚本执行权限

步骤4:设置开机自启动 (通用方法)

步骤5:重启并验证


本文档提供一套完整、可靠的命令行方案,用于将您Ubuntu虚拟机的网络永久共享给i.MX 6ULL开发板。此方法将绕开图形界面中可能存在的BUG。

第一部分:在Ubuntu主机上进行永久配置

步骤1:配置网络接口 (netplan)

这是最关键的一步,它将为您的两个网卡分配正确的角色。

  1. 打开配置文件

    复制代码
    sudo nano /etc/netplan/01-network-manager-all.yaml
  2. 替换为以下内容: 请删除文件里的所有旧内容,然后完整地复制并粘贴以下配置。这个配置明确区分了两个网卡的功能。

    复制代码
    network:
      version: 2
      renderer: NetworkManager
      ethernets:
        ens33: # 这是连接开发板的网卡
          dhcp4: no
          addresses: [192.168.10.1/24]
        ens37: # 这是您上网用的网卡
          dhcp4: true
  3. 保存并应用

    • 按下 Ctrl + X -> 按 Y -> 按 Enter 保存并退出。

    • 执行 sudo netplan apply 使配置生效。

    • 验证 :执行 ping www.baidu.com,确保您的Ubuntu电脑现在可以正常上网。

步骤2:开启IP转发功能 (sysctl)

这允许您的电脑像路由器一样转发数据包。

  1. 编辑配置文件

    复制代码
    sudo nano /etc/sysctl.conf
  2. 取消注释 :在文件中找到 #net.ipv4.ip_forward=1 这一行,删掉它前面的 # 号。

  3. 保存并生效 :保存文件后,执行 sudo sysctl -p 使其立即生效。

步骤3:设置防火墙转发规则 (iptables)

这会告诉防火墙,允许来自开发板的数据包通过您的电脑访问互联网。

  1. 一次性执行以下三条命令

    复制代码
    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:永久保存防火墙规则
  1. 安装保存工具

    复制代码
    sudo apt-get install iptables-persistent
  2. 保存规则 :在安装过程中,系统会弹出窗口询问是否保存当前的IPv4和IPv6规则,请两次都选择 <是 Yes>

第二部分:在i.MX 6ULL开发板上进行永久配置

现在,通过串口登录到您的开发板,进行以下设置。

  1. 编辑网络配置文件

    复制代码
    vi /etc/network/interfaces
  2. 修改为静态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
  3. 重启开发板 : 修改并保存文件后,执行 reboot 命令重启开发板。

第三部分:最终验证

重启完成后,您的所有网络配置都已永久生效。

  1. 在Ubuntu电脑上,通过SSH连接到开发板:

    复制代码
    ssh root@192.168.10.101
  2. 成功登录后,在开发板终端中测试网络:

    复制代码
    ping www.baidu.com

第四部分:常见问题与排错指南 (Troubleshooting)

在配置过程中,我们可能会遇到各种问题。本章节记录了常见问题的现象、原因及最终解决方案。

问题一:在Ubuntu上应用netplan配置后,PC自己无法上网了
  • 现象 : ping www.baidu.com 提示"暂时不能解析域名"。

  • 原因 : netplan的新配置没有为上网网卡(ens37)指定DNS服务器,导致系统不知道去哪里查询域名。

  • 解决方案 : 在 netplan 配置文件中,为 ens37 添加 nameservers 配置。不过,本教程最终版的 netplan 配置已通过 renderer: NetworkManagerdhcp4: true 解决了此问题,这是更稳定可靠的方式。

问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0
  • 现象: 开发板无法ping通任何外部地址,路由表里没有默认网关。

  • 原因 : 开发板的操作系统在启动时,没有自动执行网络配置脚本来读取 /etc/network/interfaces 文件中的设置。这在一些精简的嵌入式系统中很常见。

  • 解决方案: 手动应用所有网络设置。这也是我们最终成功的关键。

    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
问题三:在开发板上执行网络重启命令(如ifdown/ifup)卡住或报错
  • 现象 : 执行 ifdown eth0 命令后终端卡住,或执行 /etc/init.d/networking restart 提示文件不存在。

  • 原因: 您的嵌入式Linux系统非常精简,可能没有安装完整的网络管理工具套件,或者脚本在等待一个不存在的网络事件,从而导致卡死。

  • 解决方案 : 放弃使用这些高层级的管理脚本,直接使用问题二中提到的 ifconfigroute 等底层命令进行手动配置。

第五部分:实现开机自动配置网络(终极方案)

本章节为"问题二"提供一个一劳永逸的自动化解决方案。我们将创建一个脚本,让开发板在每次开机时自动执行网络配置命令。

步骤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.drc.d 目录在您的系统上都不可用,我们将使用一个更通用、更可靠的方法:修改全局配置文件

  1. 打开全局配置文件 : 在您的开发板终端 中,执行以下命令打开 profile 文件。这个文件在每次用户登录时都会被执行。

    复制代码
    vi /etc/profile
  2. 在文件末尾添加脚本路径 : 使用 vi 编辑器,移动到文件的最末尾,添加新的一行,内容如下:

    复制代码
    /etc/init.d/autonet.sh
    • 说明 : 这样,每次系统启动并自动登录到控制台时,都会执行这个 profile 文件,从而运行我们的网络配置脚本。
  3. 保存并退出 : 按 Esc -> 输入 :wq -> 按 Enter

步骤5:重启并验证

现在,执行 reboot 命令重启您的开发板。重启完成后,您应该可以直接 通过网络 ssh root@192.168.10.101 连接,而无需再通过串口进行任何手动配置。

相关推荐
编程充电站pro2 小时前
SQL 性能优化:为什么少用函数在 WHERE 条件中?
数据库·sql
TDengine (老段)2 小时前
TDengine 时序函数 DERIVATIVE 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)2 小时前
TDengine 时序函数 STATEDURATION 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
凯子坚持 c3 小时前
2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
大数据·数据库·人工智能
长安城没有风3 小时前
从入门到精通【Redis】理解Redis事务
数据库·redis·缓存
小园子的小菜3 小时前
MySQL 查询与更新语句执行过程深度解析:从原理到实践
数据库·mysql
利刃大大3 小时前
【高并发服务器:前置知识】一、项目介绍 && 模块划分
运维·服务器·高并发·项目·cpp
老华带你飞3 小时前
学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生信息管理系统
*长铗归来*4 小时前
MySQL新学知识(一)
数据库·mysql