我有一个 ARM 系统,已预装了某些版本的 Linux。我不知道发行版;我只能在 dmesg 中看到内核编号。
在 /etc/network/interfaces 中,我将 eth0 设置为
auto eth0
iface eth0 inet dhcp
保存并重新启动(或运行 ifdown eth0 然后运行 ifup eth0)后,我可以看到网络系统正在搜索 DHCP 服务器并且实际上获得了有效 IP 地址的租约,但是当我运行 ifconfig 时,该接口尚未被分配从 DHCP 中获取的地址。它被分配了一个 192.168。。地址。
这可能是从哪里来的?
我在 dmesg 中注意到,变量“ip”在启动时传递给内核,其地址与覆盖我的 DHCP 地址的地址相同。我该如何禁用这种覆盖行为?我注意到 u-boot 中有一个名为 ip 的动态环境变量。我将其设置为 dhcp 并将其保存到 nv 存储中,但问题仍然存在。我尝试将 u-boot 环境变量 ipaddr 设置为 dhcp,但被告知这不是该变量的有效值。
如何通过 DHCP 配置接口?
答案1
ip 参数描述如下:
http://www.mjmwired.net/kernel/Documentation/filesystems/nfs/nfsroot.txt#81
传递给内核的参数存储在bootargs
u-boot 中名为的变量中。
执行 aprintenv
来检查 bootargs 的值。如果您看到参数“ip=”被传递给内核,那么您可以从 bootargs 中删除它。
还有另一种可能性,可以通过它传递内核参数。
这是CONFIG_CMDLINE
内核配置中的选项。
如果您的内核已经构建了CONFIG_IKCONFIG
支持,那么应该有一个/proc/config.gz
文件。
将其复制到/tmp
并gunzip
检查该CONFIG_CMDLINE
选项是否存在,如果存在,则检查 ip 参数是否被传递。
如果是,那么您就无能为力了,只有重新编译内核才能改变这种情况。我不确定是否可以在 /etc/rc.local 中再次使用 dhcp 获取 ip,并让其覆盖从内核参数获取的 ip。