Linux下是否可以使用uboot setenv命令为以太网端口设置静态IP地址?

问题描述 投票:0回答:2

我可以使用下面的行来设置以太网端口的MAC地址

setenv ethaddr E4:1E:0A:10:12:33

是否可以使用相同的命令(setenv)来设置IP和nesmask?

我知道我可以使用ifconfig,但在重新启动或重新启动电源后,配置会丢失。

谢谢

我到处寻找但找不到答案

更新: 如果我一开始没有解释我的问题背后的原因,我深表歉意。我正在开发一个运行 Linux 的定制板,大多数文件系统和配置都是写保护的,一旦设备通电就不容易修改。诸如以太网 MAC 地址之类的一些东西可以从 UBOOT 环境中设置。我只是出于好奇才问这个问题。 我可以在 systemd 网络管理器中完全配置以太网并重建整个固件。

linux yocto u-boot
2个回答
0
投票

请说明为什么要在引导加载程序中设置 ip/netmask/mac?

Linux启动后,您可以通过命令行设置所有这些或将其写入文件。以太网 IP/网络掩码/MAC 地址/硬件地址

此外,在引导加载程序中设置任何变量后,您是否保存了环境?

setenv variable-name value

saveenv


0
投票

我可以使用下面的行来设置以太网端口的MAC地址

setenv ethaddr E4:1E:0A:10:12:33

U-Boot 命令 setenv 只是将一个值(实际上是一个以 null 结尾的文本字符串)分配给环境变量。

但是 U-Boot 以特殊方式处理 ethaddr 环境变量。分配给该环境变量的 MAC 地址也会写入以太网 PHY。
因此,即使在 U-Boot 跳转到 Linux 内核之后,该 MAC 地址在该以太网接口上也是持久
当 MAC 地址已通过 U-Boot 写入 PHY 时,Linux 内核无需执行任何 MAC 地址初始化。

U-Boot 具有 ipaddr 环境变量,用于为其(活动)以太网接口分配 IPV4 地址。这个 ipaddr 环境变量仅在使用 U-Boot 执行网络操作时对 U-Boot 的网络堆栈有用。这个 ipaddr 环境变量,像所有 U-Boot 的(非特殊)环境变量一样,仅在 U-Boot 执行时才有意义,并且在 Linux 内核启动时丢失。

是否可以使用相同的命令(setenv)来设置IP和nesmask?

U-Boot 将控制权转移到 Linux 内核后,U-Boot 中的网络堆栈配置不会保留。 Linux 内核需要执行自己的以太网接口和网络堆栈设置。如果您想将网络配置信息从 U-Boot 传递到 Linux 内核,那么您可以使用 bootargs 环境变量。

将信息从 U-Boot 传递到 Linux 内核的传统方法是通过 bootargs 环境变量,它(可以)用于组成内核命令行。 bootargs 可以在构建时在源代码中硬编码,或者可以使用 setenv 命令在启动时构建此环境变量。

请注意,当用作内核命令行时,bootargs的内容适用于内核,而不是用户空间。用户空间程序可以访问/读取此命令行(例如在 /proc/cmdline 文件中),但这不是命令行的目的。

您可以使用命令行中的

ip=
启动参数(和 bootargs 变量)指示内核初始化网络接口,而不是简单地尝试传递网络配置信息。请参阅如何在 Linux 中启动时启动网络

© www.soinside.com 2019 - 2024. All rights reserved.