私はRaspberry PiでUSBネットワークインターフェース(USB経由のイーサネット)を使用しています。目的は、基本的にRaspberry Piが提供する4つのUSBポートを使用して、TFTP U-bootを介して複数のLinuxシステムを同時にフラッシュすることです。
これで、それぞれIPアドレスを持つ4つのUSBインタフェースが定義されました。すでにtftp
サーバーを設定しています。うまく動作しますが、複数のLinuxシステムを同時に接続しようとすると、DHCPがインターフェイスを混在しているようです(たとえば、古いものがusb0
新しいものになりusb1
、古いものがusb1
新しいものになりますusb0
)。これはレンタルに混乱を引き起こすと思います。 TFTP Exchangeがソフトロックアップにかかったようです。
まあ、そんなことは起こりません。したがって、私は接続されたUSBポートに基づいてデバイスに固定名を付けるために4つのudevルールを設定しました。次のように:
SUBSYSTEM=="usb", ACTION=="add", DEVPATH=="*.2", NAME="usb0"
(私はこれをudevadm info
使ってこの値を得ました:
当然、ネットワークインターフェイスの名前になるので、デバイスの名前を変更する必要があります。したがって、この場合、シンボリックリンクは役に立ちません(私が知らない限り)。
ただし、systemd-udevd
デバイス名を変更することはできません。
Feb 28 17:25:01 pi systemd-udevd[3749]: NAME="usb2" は無視されます。カーネルデバイスノードの名前を変更できません。 /lib/udev/rules.d/99-systemd.rules:49で修正してください。
バージョン15.04以前でもこれが可能であったことをオンラインで読んだので、この以前の動作を復元する方法がなければならないと思います。
どんなアドバイスも本当にありがとうございます。
答え1
明確にすべきいくつかのことがあります。
デバイスにはツリー階層があります。 USB イーサネットアダプタが次のように表示されます。多くの種類異なるサブシステムの「デバイス」は、異なる階層を表す。
- subsystem
usb
、devtypeusb_device
- ポートに接続されたUSBデバイス。 - subsystem
usb
、 devtypeusb_interface
– USBデバイスが提供する特定の機能(「インターフェース」という用語はネットワーキングとは異なる意味を持ちます!) - サブシステム
net
- 実際のネットワークインターフェイス(今回は一般的なネットワーク意味)です。
(ネットワークデバイスはusb_interfaceの子であり、それ自体はusb_deviceの子です。)
- subsystem
すべてのデバイスにネットワークインターフェイスなどの「デバイスノード」があるわけではありません。欲しくない表示されます
/dev
。(残念ですが、そうではありません。)ネットワークインターフェイスのみを名前変更できます。他のデバイスは不可能です。このポリシーは、Linuxがデバイスノードを作成するudevからデバイスノードを作成するカーネル自体に切り替えたときにさらに制限されています。 (はい、技術的には
mv /dev/foo /dev/bar
まだ有効ですが、ポリシーudevはカーネルがエクスポートした内容を台無しにしません。 )
したがって、ポイント1が重要です。記事全体はネットワークインターフェイス(サブシステムに属するnet
)について話していますが、udevルールはサブシステムと一致するusb
ため、/sysでいくつかの抽象USBデバイスの名前を変更しようとしています。
ルールには具体的にする必要がありますSUBSYSTEM=="net"
。親デバイスをさらに一致させるには、次のものを使用できます(「S」を参照)。SUBSYSTEMS=="usb"