Linux
在嵌入式 Linux 系統上,如何確保物理網路介面在重新啟動時始終獲得相同的介面名稱?
對於嵌入式 Linux 系統,如果我有兩個或多個網路介面,我如何確保它們每次啟動時始終獲得相同的介面名稱
換句話說,例如,我希望 eth0 始終映射到一個物理乙太網埠,eth1 映射到下一個,等等。
我的 Linux “發行版”是本土開發的,我使用 devtmpfs 來填充 /dev。我使用busybox 進行初始化(以及大多數其他內容),以及用於系統啟動和關閉的自定義初始化腳本。
我不需要 mdev 或 udev 的熱插拔功能——我指的是“固定”乙太網埠。
這適用於 x86_64 架構上的 Linux 3.9.0。
#!/bin/sh # This assumes the interfaces come up with default names of eth*. # The interface names may not be correct at this point, however. # This is just a way to get the PCI addresses of all the active # interfaces. PCIADDRLIST= for dir in /sys/class/net/eth* ; do [ -e $dir/device ] && { PCIADDRLIST="`readlink -f $dir/device` ${PCIADDRLIST}" } done # Now assign the interface names from an ordered list that maps # to the PCI addresses of each interface. # IFNAMES could come from some config file. "dummy" is needed because of # my limited tr- and awk-fu. IFNAMES="eth0 eth1 eth2 dummy" for dir in `echo ${PCIADDRLIST} | tr " " "\n" | sort` ; do [ -e $dir/net/*/address ] && { MACADDR=`cat $dir/net/*/address` IFNAME=`echo $IFNAMES | awk '{print $1}'` IFNAMES=`echo $IFNAMES | awk '{ for (i=2; i<=NF; i++) printf "%s ", $i; }'` echo -n "$IFNAME " nameif $IFNAME mac=$MACADDR } done