我可以使用下面的行来设置以太网端口的MAC地址
setenv ethaddr E4:1E:0A:10:12:33
是否可以使用相同的命令(setenv)来设置IP和nesmask?
我知道我可以使用ifconfig,但在重新启动或重新启动电源后,配置会丢失。
谢谢
我到处寻找但找不到答案
更新: 如果我一开始没有解释我的问题背后的原因,我深表歉意。我正在开发一个运行 Linux 的定制板,大多数文件系统和配置都是写保护的,一旦设备通电就不容易修改。诸如以太网 MAC 地址之类的一些东西可以从 UBOOT 环境中设置。我只是出于好奇才问这个问题。 我可以在 systemd 网络管理器中完全配置以太网并重建整个固件。
请说明为什么要在引导加载程序中设置 ip/netmask/mac?
Linux启动后,您可以通过命令行设置所有这些或将其写入文件。以太网 IP/网络掩码/MAC 地址/硬件地址
此外,在引导加载程序中设置任何变量后,您是否保存了环境?
setenv variable-name value
saveenv
我可以使用下面的行来设置以太网端口的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 中启动时启动网络