凭借Ubuntu和i.MX 6ULL开发板构建网络共享

news/2025/10/27 0:06:42/文章来源:https://www.cnblogs.com/yangykaifa/p/19167637

目录

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

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

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

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

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

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

第三部分:最终验证

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

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

问题二:重启开发板后,网络不通,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: 2renderer: NetworkManagerethernets:ens33: # 这是连接开发板的网卡dhcp4: noaddresses: [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 staticaddress 192.168.10.101netmask 255.255.255.0gateway 192.168.10.1dns-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 连接,而无需再通过串口进行任何手动配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/947153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WampServer下载安装教程(附安装包,图文并茂) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【CI130x 离在线】FreeRTOS的流缓冲(StreamBuffer)

FreeRTOS StreamBuffer 详解 概述 StreamBuffer(流缓冲区)是 FreeRTOS 提供的一种轻量级数据流传输机制,用于在任务间或中断与任务间高效传输字节流数据。 基本特性 1. 数据结构字节流存储: 以 FIFO 方式存储字节数…

RT-Thread Nano源码浅析

了解RT-Thread Nano源码构成。一、了解源码 从官方下载到RT-Thread Nano源码目录如下图所示1、bsp文件夹 bsp文件夹里面存放的是板级支持包(board support package),用于存放RT-Thread为各种半导体厂商的评估板写好…

《从 “被动听” 到 “主动学”:课堂听讲助力大学生思维成长》

阅读完三篇文章,我首先想到的就是大一到大二的学习状态变化,突然发现上学期的我可能是刚高考完的原因,脑海中还深深印刻着高中生上课必须要认真听讲的烙印。虽然上课给带手机,但是一看到老师走进教室,总是下意识地…

用AI批量生成产品视频!Python+Google Veo 3.1 API让电商转化率飙升

今天跟大家分享一个超实用的电商运营技巧:如何用Python和Google Veo 3.1 AI,把枯燥的产品图片批量变成生动的营销视频。用户原创内容(UGC)现在特别火,对销售的拉动效果非常明显,有了这个工具,你也能轻松制作大量…

关于SQLite - 世界上装机量最多的数据库

关于SQLite - 世界上装机量最多的数据库? 使用C语言开发,使得它小巧精致而高效,直接采用偏底层的语言,使用文件的逻辑,实现SQL数据库的逻辑; 使用方:包括但不限于 Python、Java、C# 等; 无服务器的,…

模拟IIC与硬件IIIC哪个更常用?

在实际项目中,两种方式都被广泛使用,但模拟IIC(软件IIC)的应用场景更多、更普遍。 下面我们来详细解释一下两者的区别、优缺点和适用场景。 硬件IIC 硬件IIC是指由微控制器内部的专用IIC外设电路来实现的。你只需要…

251019 NOIP 模拟赛 T2 | dp 及其优化、调整法最优解性质、数形结合

OJ 传送门 原题: QOJ 5500 题意 有 \(n\) 个屋子排成一列,每个屋子里一个人,每个屋子可以开酒吧。 每个人会去自己左右两侧最近的(分别)酒吧消费。 一个方案的价值为 \(\sum _ {酒吧} 来这个酒吧的人数 \times p_i…

常见问题解决 --- 未识别函数

常见问题解决 --- 未识别函数

小作业 14(2018 北京高考文科)

已知椭圆 \(M:\dfrac{x^2}{3}+y^2=1\),斜率为 \(k\) 的直线 \(l\) 与椭圆 \(M\) 有两个不同的交点 \(A\),\(B\)。设 \(P(-2,0)\),直线 \(PA\) 与椭圆 \(M\) 的另一个交点为 \(C\),直线 \(PB\) 与椭圆 \(M\) 的另一…

第六章习题

下面的机器数都以16进制表示w func1(w) func2(w)机器数 ; 值 机器数 ; 值 机器数 ; 值0000007F;127 0000007F;127 0000007F;12700000080;128 00000080;128 FFFFFF80;-128000000FF;255 000000FF;255 FFFFFFFF;-10000010…

速通 花卉鉴赏 短文

真鲜花灵感来自 P&KU3(上) 第二日《时空花园》一题。 顺带一提,我在查阅资料的时候并没有找到百度百科花钟对应 list 的一个 reference,最后在 wikipedia 里有 reference 的里面选了一些写,如果有知道的朋友可…

Agent常见模式 - 智慧园区

我希望用最直白的方式,让大家理解这四种常见的模式,并且真实商业落地和你想的可能完全相反。 模式讲解 第一种,工作流LLM 这种方式最直观,就是在你原有的工作流上插入Agent,替换掉原来代码做不了,必须人做的事请…

react-router7.9.4使用

安装 新版路由简化了安装,只需要以下命令即可 npm i react-router创建路由文件 在项目根目录下创建路由文件 src\router\index.ts import { lazy } from react import Root from ../components/root import { createH…

AI元人文:从战略能力到价值对话的实现框架

AI元人文:从战略能力到价值对话的实现框架 核心洞见:无需从零创造,“价值对话AI”可通过重构已验证的战略型AI技术基石实现。关键在于对其能力进行目标升华与伦理重塑。 一、四项核心重构架构重构:从利益博弈到价值…

Loneliness

Spending years with a group of people who are fundamentally dissimilar is loneliness. Feeling the passage of time is also so lonely. Memories and regrets can even be so lonely. The speed of time never …

Java流程控制——用户交互Scanner

Java流程控制——用户交互Scanner用户交互Scanner 使用Scanner类实现获取用户输入 Scanner s = new Scanner(System.in);可通过Scanner类的next()与nextLinevitable()方法获取输入的字符串, 在读取前一般用hasNext()与…

概率论测试

后续会上传批改版本

2025.10.26总结

今天做了23年5月份上半场的75道选择,怎么说,没及格,无论是知识点的广度上还是深度上都差的很远,以目前的水平考试,能不能通过完全靠运气。 下午题看了几眼,一共五六道比较固定的答题,熟悉题型和做题方法后应该就…