Làm thế nào để bạn đảm bảo các giao diện mạng vật lý luôn có cùng tên giao diện trên các lần khởi động lại trên một hệ thống Linux nhúng?


13

Đối với hệ thống nhúng Linux, nếu tôi có hai giao diện mạng trở lên, làm cách nào để đảm bảo rằng chúng luôn có cùng tên giao diện mỗi khi khởi động

Nói cách khác, tôi muốn, ví dụ, eth0 luôn ánh xạ tới một cổng Ethernet vật lý, eth1 sang tiếp theo, v.v.

"Phân phối" Linux của tôi được trồng tại nhà và tôi sử dụng devtmpfs để điền / dev. Tôi sử dụng busybox cho init (và hầu hết mọi thứ khác), cùng với các tập lệnh init tùy chỉnh để khởi động và tắt hệ thống.

Tôi không cần các thiết bị cắm nóng của mdev hoặc udev - Tôi đang đề cập đến các cổng Ethernet "cố định".


Tôi giả sử sẽ có một số cách để xác định điều này trong tệp devicetree, nhưng tôi không thể tìm ra cách.

Câu trả lời:


7

Điều này hoạt động với tôi với Linux 3.9.0 trên kiến ​​trúc x86_64.

#!/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

2
Từ man nameif: "Chương trình này đã lỗi thời. Để kiểm tra thay thế ip link." Cũng lưu ý rằng nếu hệ thống bạn đang ở trên không sử dụng udev, chiến lược của bạn sẽ dễ bị thất bại như /sys/class/net/eth[whatever]thể không tồn tại.

2

Bạn đã đề cập rằng bạn không cần udev nhưng nếu bạn không phản đối việc cài đặt nó thì bạn có thể muốn xem xét sử dụng biosdevname . Có một trang wiki tuyệt vời trên freedesktop.org thảo luận về vấn đề này. Như đã lưu ý trên trang đó, nếu bạn đang sử dụng udev phiên bản 197 trở lên thì bạn thậm chí không cần tên sinh học vì udev sẽ làm những gì bạn cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.