Ubuntu 16.04でカーネルデバイスノード(プラグインされたポートに基づく固定USBインタフェース名)を変更する

Ubuntu 16.04でカーネルデバイスノード(プラグインされたポートに基づく固定USBインタフェース名)を変更する

私は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

明確にすべきいくつかのことがあります。

  1. デバイスにはツリー階層があります。 USB イーサネットアダプタが次のように表示されます。多くの種類異なるサブシステムの「デバイス」は、異なる階層を表す。

    • subsystem usb、devtype usb_device- ポートに接続されたUSBデバイス。
    • subsystem usb、 devtype usb_interface– USBデバイスが提供する特定の機能(「インターフェース」という用語はネットワーキングとは異なる意味を持ちます!)
    • サブシステムnet- 実際のネットワークインターフェイス(今回は一般的なネットワーク意味)です。

    (ネットワークデバイスはusb_interfaceの子であり、それ自体はusb_deviceの子です。)

  2. すべてのデバイスにネットワークインターフェイスなどの「デバイスノード」があるわけではありません。欲しくない表示されます/dev(残念ですが、そうではありません。)

  3. ネットワークインターフェイスのみを名前変更できます。他のデバイスは不可能です。このポリシーは、Linuxがデバイスノードを作成するudevからデバイスノードを作成するカーネル自体に切り替えたときにさらに制限されています。 (はい、技術的にはmv /dev/foo /dev/barまだ有効ですが、ポリシーudevはカーネルがエクスポートした内容を台無しにしません。 )

したがって、ポイント1が重要です。記事全体はネットワークインターフェイス(サブシステムに属するnet)について話していますが、udevルールはサブシステムと一致するusbため、/sysでいくつかの抽象USBデバイスの名前を変更しようとしています。

ルールには具体的にする必要がありますSUBSYSTEM=="net"。親デバイスをさらに一致させるには、次のものを使用できます(「S」を参照)。SUBSYSTEMS=="usb"

関連情報