如何在 Linux 启动时启动网络

如何在 Linux 启动时启动网络

我正在开发嵌入式 Linux 系统,我的目标是在启动时激活以太网接口。我使用 u-boot 作为引导加载程序。我将 ip= 和 eth= u-boot 环境变量作为 bootargs 传递给 Linux 内核,并将 Linux 内核配置为 IP:内核级自动配置,启用。但是,这并没有像“ifconfig eth0 up”那样启动网络接口。

所以,我想知道是否有可能指示 Linux 内核激活 eth0 接口,而无需借助用户空间脚本(ifup 和 ifconfig)?

答案1

是的,Linux 内核可以激活 eth0 接口,而无需借助用户空间脚本。
您可以使用ip=内核启动参数用静态 IP 地址初始化网络接口,例如:

    ip=192.168.1.100:::255.255.255.0:myboard:eth0:on

当然,eth0驱动程序初始化/安装完成(由__init内存部分释放指示)后,才能启用接口。
以下是网络接口激活时显示的系统日志:

eth0: link down
IP-Config: Complete:
      device=eth0, addr=192.168.1.100, mask=255.255.255.0, gw=255.255.255.255,
    host=myboard, domain=, nis-domain=(none),
    bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=
Freeing init memory: 564K
remounting / read-write... done.
mounting /proc... done.
mounting /sys... done.
Creating device nodes manually, running /sbin/makenodes-2.6
eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Done.
mounting /home... MTDSB: dev_name "/dev/mtdblock3"

有关启动参数语法的完整详细信息,ip=请参阅文档/文件系统/nfs/nfsroot.txt. 忽略这一事实:此功能最初的目的是为了促进网络根文件系统。

我将 ip= 和 eth= u-boot 环境变量作为 bootargs 传递给 linux 内核

eth=不是有效的启动参数,可能被内核忽略。
顺便说一句,如果您使用的是 Atmel 的macb.c驱动程序,请确保 U-Boot 安装了 PHY 的 MAC 地址,以便此功能正常工作。

相关内容