Eudev

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Eudev and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎日本語 • ‎polski • ‎русский • ‎中文(中国大陆)‎

Warning: Display title "eudev/ja" overrides earlier display title "Eudev".

Resources

eudevsystemd を使わない構成向けの、 Gentoo の Linux カーネル用デバイスファイルマネージャーです。[1] /dev のデバイスノードを管理し、デバイスが追加されたり取り外されたりした時のユーザースペースでのすべての活動を処理します。eudevは systemdudev のフォークであり、OpenRCUpstart、古いカーネル、さまざまなツールチェーン、その他 udev が必要とする[2] (しかしあまりサポートされていない)ソフトウェアといった既存のソフトウェアとのよりよい互換性を得ることを目的としています。

/dev ディレクトリ

多くの Linux ユーザは、/dev/sda1 はカーネルが認識した最初のディスクの最初のパーティションを指す最短の手段だということを知っています。これはとても平易でしょう。

しかし、USB や IEEE1394、ホットスワップ可能な PCI などのホットプラグ対応デバイスを考えてみてください。最初のデバイスというのはこれらのうちどれのことでしょう? そして、いつまで最初のデバイスといえるのでしょう? 最初のデバイスが消えたとき、他のデバイスは何と名付けられるのでしょうか? それは進行中の処理に影響するでしょうか? 母親が(たまたま最初のプリンターになっていた)レーザープリンターのプラグを引っこ抜いたというだけの理由で印刷ジョブが高性能なレーザープリンターからほとんど壊れかけのマトリックスプリンターに突然移ってしまったとしたら、笑ってしまいませんか?

デバイスマネージャに入ってみましょう。( udeveudev のような)今どきのデバイスマネージャならば必ず:

  • ユーザスペースで動作する;
  • 動的にデバイスファイルが生成されたり削除されたりする;
  • 一貫したデバイス命名を行う;
  • ユーザスペースのアプリケーション・プログラム・インターフェイス(API)を提供する

デバイスの構造に変化が生じるたびにカーネルは uevent を発行し、デバイスマネージャがそれを受け取ります。それから、デバイスマネージャは /etc/udev/rules.d/run/udev/rules.d および /lib/udev/rules.d ディレクトリで定義されたルールに従います。uevent 内に含まれている情報を元に実行する必要があるルール(群)を探し必要なアクションを行います。これらのアクションにはデバイスファイルの作成・削除も含まれており、また特定のファームウェアファイルのカーネルメモリへの読み込みも実行します。

インストール

USE フラグ

いくつかのパッケージは virtual/udev との統合を有効化する udev USEフラグに対応しています。

USE flags for sys-fs/eudev Linux dynamic and persistent device naming support (aka userspace devfs)

hwdb read vendor/device string database and add it to udev database local
introspection Add support for GObject based introspection global
kmod enable module loading through libkmod local
rule-generator install legacy rule generator rules and support scripts - note that the functionality within was dropped from sys-fs/udev as it is not stable in all cases; use at your own risk local
static-libs Build static versions of dynamic libraries as well global

Emerge

world セット へ登録されるのを防ぐため、 oneshot オプションを使用してください。

root #emerge --ask --oneshot sys-fs/eudev

設定

RC サービス

RC での名前は eudev ではなく udev です。これを sysinit ランレベルに登録する必要があります。

root #rc-update add udev sysinit
 * rc-update: udev already installed in runlevel `sysinit'; skipping

sys-fs/udev-init-scripts バージョン 29 以降では、 udev-triggersysinit ランレベルに追加してください

udev から eudev への移行

udev 216 から eudev 1.10-r2 (2015年3月) への移行は簡単です:

root #emerge --ask --oneshot sys-fs/eudev

システムが multilib を使っており、例えば abi_x86_32 USE フラグを以前の udev パッケージに対して有効化している場合には、それも変更することを忘れないようにしてください:

FILE /etc/portage/package.usepackage.use の udev を eudev に変更する
# sys-fs/udev abi_x86_32
sys-fs/eudev abi_x86_32

伝統的な 'eth0' 命名を維持する

起動時にカーネルが作成する eth0eth1 のようなネットワークデバイス名(dmesg 参照)は、/lib/udev/rules.d/80-net-name-slot.rules での udev ルールを用いて変更可能です。

旧来の命名ルールを維持するには、/etc/udev/rules.d ディレクトリ内に、同じ名称のファイルを空で作成することで上書きします:

root #touch /etc/udev/rules.d/80-net-name-slot.rules

上述の手順の代わりに、net.ifnames=0 をカーネルコマンドラインに追加したり、デフォルトのポリシーを変更したり、新しいポリシーを作成することもできます。

ネットワークの命名についての興味深い資料が Freedesktop wiki の I don't like this, how do I disable this にあります。

新しい '予測可能な' 命名を使用する

新しいネットワークインターフェイスへの命名規約が変更されているので、インターフェイスを再度リンクする必要があります。追加する必要があるインターフェイスの名前が何であれ、/etc/init.d/net.lo をリンク先として使用してください。以下のコマンドでは、<interface_name> を システムで提供されるイーサネットインターフェイスの名前に必ず置き換えてください。ifconfig コマンドを実行することでどのようなインターフェイスが存在するか知ることができます:

user $ifconfig

存在するインターフェイスについて、/etc/init.d//etc/conf.d/ の中にシンボリックリンクを作成します:

root #ln -s /etc/init.d/net.lo /etc/init.d/net.<interface_name>
root #ln -s /etc/conf.d/net.lo /etc/conf.d/net.<interface_name>

インターフェイスを自動的に開始するには、スクリプトを default ランレベルに追加します:

root #rc-update add net.<interface_name> default

トラブルシューティング

udevadm の使用

udevadm monitor 実行してみましょう:

user $udevadm monitor

udevadm info に続いてデバイスパスを指定すると、デバイスの情報を取得できます:

user $udevadm info -p /devices/pci0000:00/0000:00:1d.7

デバイスの名前を使用してパスを取得します:

user $udevadm info -q path -n input/mouse1
/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.4/1-3.4:1.0/0003:046D:C404.0006/input/input24/mouse1

udevadm test に続いてイベントをテストするデバイスのパスを使用すると、イベントの実行をテストすることができます:

user $udevadm test /devices/pci0000:00/0000:00:1d.7

すべての udevadm におけるコマンドのリストを得るには:

user $udevadm -h

古いリリースから移行する

udev 171-r10 から eudev 1.2-r1

Gentoo forums のこの投稿を参照してください。

udev から eudev への移行中に壊れたシステム

Gentoo forums の この投稿を参照してください。

参考

外部の情報

参照

  1. Bug 575718 - Request for council decision RE virtual/udev default provider, Gentoo's Bugzilla Main Page, (Last modified) February 27th, 2016. Retrieved on March 1st, 2016.
  2. Project:Eudev, Gentoo Wiki, (Last modified) November 12th, 2015. Retrieved on March 11th, 2016.