我正在开发嵌入式 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 地址,以便此功能正常工作。