「udev」を使用する代替手段はありますか?


16

私はudevの素晴らしさを理解し、開発者の努力に感謝していますが、それに代わるものがあるのか​​どうか疑問に思っていました。

たとえば、システム(ハードウェアの変更なし)でとにかくほとんど同じであるほとんどのデバイスノードを作成するスタートアップスクリプトを作成する方法があるはずだと思います。

スキップしudevたい利点または理由は、スキップの場合と同じですdbus。つまり、複雑さを軽減し、それによってシステムをより安全にセットアップするための変更を増やします。

回答:


23

そこにはさまざまな選択肢がudevあります。どうやらGentooはと呼ばれるものを使用できるようですmdev。別のオプションは、udev前任者の使用を試みることdevfsdです。最後に、必要なすべてのデバイスファイルをいつでも作成できますmknod

後者では、他のオプションのように一時ファイルシステムではなくディスク上にノードを作成できるため、ブート時にすべてを作成する必要がないことに注意してください。もちろん、新しいハードウェア(USBスティックなど)を接続すると、デバイスファイルを動的に作成する柔軟性が失われます。この時代の標準的なアプローチは、合理的に必要となる可能性のあるすべてのデバイスファイル/dev(つまり、多数のデバイスファイル)を作成することだったと思います。

もちろん、これらのアプローチのいずれかを現代のディストリビューションで機能させるのは難しいでしょう。Gentoo wikiはmdev、デスクトップ環境で作業するのが難しいことについて言及しています(Gentooの外部はもちろんです)。最後のdevfsdリリースは2002年で、最新のカーネルでも動作するかどうかはわかりません。ノードを手動で作成することはおそらく最も実行可能なアプローチですがudev、特にdistosを使用する場合は、無効化することさえ難しい場合がありますsystemdudev現在、の一部でsystemdあり、強い依存関係を示唆しています)。

私のアドバイスは固執しudevます;)


1
ありがとう!質問のすべてではないにしてもほとんどの問題に対処し、情報でいっぱいだった素晴らしい回答!systemdの問題を今すぐ解決する方法を考えてみてください...これを解く方法を見ていきます:)
humanityANDpeace

udevなしで完全に正常に動作するはずですsystemd-両方とも同じコードベース内で開発されただけですが、udevビルド+独立して実行できます。
エリアスプロブスト

もちろん、@ Elias udevsystemdとにかくはるかに長い間使用されてきました。問題は、systemdなしで働くことができるということudevですか?私の推測では、少なくとも何らかの--without-udevオプションで再コンパイルする必要があります。
Graeme 14年

2
@Graeme:いいえ、できません。これは、車輪を取り除いて自動車の複雑さを軽減しようとすることに似ています。systemd(これは多くのことを行います)での起動には問題ありませんが、udevの複雑さ(これはますます少なくなります)を真剣に懸念している場合は、本当に混乱します。
user1686 14年

@grawity公正なポイントですが、initdでsystemdを使用して起動するのはそれほどうまくありません。それを見てみましょう
humanityANDpeace

22

最新のLinuxカーネルは、カーネルがそれらを検出するとすぐにすべてのデバイスノードを動的に作成するdevtmpfsファイルシステム(古代と混同しないでくださいdevfs)をサポートします。(実際、最新のudevリリースでこれが必要です。udevはもはやデバイスノードを作成せず、シンボリックリンクのみを作成することがわかります。)

同様に、ファームウェアのロードもカーネルに移動されたため、udev実行される残りのタスクは、モジュールのロード(モダリアによる)およびデバイスのアクセス許可と他のudevルールの適用のみです。

したがって、理論的には、完全にモノリシックなカーネルは、udevなしで正常に起動するはずです。

ただし、ここでの本当の問題は後で起こることです。

  1. かなりの数のユーザースペースプログラムは、デバイスデータベースを維持するudevに依存していlibudevます。デバイスの列挙と追加/削除されたイベントのリッスンは、カーネルインターフェイス(sysfsとnetlink)を使用して直接行うことができますが、さまざまなudevルールが添付したすべてのメタデータが残ったままになります。

  2. udevのルールはまた、様々な「持続的」シンボリックリンクを維持/dev/disk/by-*/dev/mapper/dev/input/by-path/dev/snd/by-path、などを。たとえば、2つのディスクが接続されている場合、最初のディスクが常にsdaor sdbになるという保証はありませんが、udevは、symlinksが/dev/disk/by-uuid正しいディスクを指すことを保証します。

  3. デバイスノードは、今はもう、あなたの懸念カーネルによって作成されたので、されていませんが、いくつかのデバイスタイプは、あなたが持っているにもかかわらずそう、動的に割り当てられたメジャー/マイナー番号を使用して開始していることを、まだ注意することが重要である/dev/fuse10228として/dev/hpet10229として、今日、彼らは意志再起動のたびに異なる番号になるため、devtmpfsまたは(古いシステムでは)ueventsをリッスンするプログラムが必要です

これらのことの多くはmdev、もちろん、他のプログラムによって簡単に実行できます。私のポイントは、静的/etc/MAKEDEVスクリプトはもう機能しないということです...


したがって、基本的に、ブートの複雑さに関しては、udevが最も懸念されることはほとんどありません。


興味深いことに、ノードの動的作成を導入するカーネルバージョンを知っていますか?
Graeme 14年

2
@Graeme:約2.6.32
user1686 14年

12

いくつかの選択肢があります。

  • 単に適切なセットを持ってchmodchownln、およびブートストラップの一部として実行されるスクリプトではそのようなもののコマンド。
  • systemd-udevsystemdプロジェクトの一部であるプラグアンドプレイマネージャーを使用します。
  • 使用Gentooのeudevのフォークで、systemd-udevそこからsystemdには今大幅に発散しています。
  • Devuanをvdev使用します。これは、Devuanの一部であるJude Nelsonによって開発されたプラグアンドプレイマネージャーです。
  • を使用しますmdev。これは、別の答えに反してGentooのものではありません。BusyBoxに組み込まれているプラ​​グアンドプレイマネージャーです。
  • 使用SucklessmdevディミトリスPapastamosによって開発されたプラグアンドプレイマネージャです。
  • Laurent Bercotをmdevd使用します。これはBusyBoxと互換性のある構成ですmdevが、独自のソケット処理を行い、LISTENプロトコルを理解しません。

これらのすべては、最初のものを除いて、デバイスに関するカーネル通知イベントに反応する方法を説明する一連のルールを必要とします。明らかに。

また/proc/sys/kernel/hotplug、2 mdevのような向けに設計されたプログラムを使用し、netlinkソケットをリッスンしてからそれらのプログラムを生成することにより、それらを適応およびシリアル化するツールもあります。


6

udev?最善の選択肢は、使用しないことです。そして、それを使わない方法を学ぶことにより、Linuxと* NIXの世界はより論理的な意味を持ち始めます。

最良の長期的な代替手段は、静的デバイスを使用することです(注を参照)。ドライバーがあれば、Linuxカーネルがホットプラグを管理します。私は、udevdを実行させないことを好みます。

dbusは別の問題です。システムの速度は低下しますが、絶えず変化するスクリプトの世界ではそれが大好きです。そのため、Webブラウザやスクリプトバックエンドを備えたアプリケーションなど、慣れ親しんだ多くのことを修正する必要があります(そのようなものなしで起動または再構築するか、別のアプリケーション用にダンプします)。

注:フラッシュドライブまたはDVDデバイスを接続するだけの場合は、を使用dmesg|tailして、マウントするデバイスの名前を確認します。デバイスがキャラクターまたはブロックデバイスである場合の学習は、コンピューターハードウェアの世界における基本的なシステム知識です。Linuxでは、オープンソースです。これは、組み込みだけでなく、Linuxについてもよく確認してください。Linux(Solaris、HPUX、AIXなど)のようなすべての* NIXの単純なロジック(哲学ではない)をより深く理解するのに最適です。

Udev、dbus、gconf / dconf、systemd、gnome-shell、Gnome、Glib、mono、およびFedoraは、RTFMを使用できない、または自動的に更新される本当に滑らかな(見た目)が遅い、時間がかかるユーザー向けです。糖蜜、バギー、中途半端なLinuxよりも。(本当にひどい場所です。同様の体験をウェブで探しましょう)。

システムが起動し、udevdを実行します。しかし、will change再起動時のデバイスのマイナー番号のため、udevが必要であると主張されています。Udevの存在理由は、あらゆる場面で矛盾しているようです。また、ファイルの場所は、誰に相談しても常に間違っているようです。freedesktop.orgを信頼しないでください。

systemdとして知られるその恐怖にudevが吸収されていることに加えて、/ etc / udevのジャンクを使って何をするのかわかりません。そして、udevルールを書くことは何よりも優れていると言うのは非常に残念です。gentooの人たちはsystemdをする必要はなく、それに固執したいようですので、eudevにフォークしました。

途方もなく高速で厄介なサプライズシステムが必要な場合は、Linuxの基本を使用してください。


6
これは...もっと暴言の答えよりです
jasonwryan

2
@jasonwryanはややそうですが、udev機能で通常カバーされているタスクを手動で処理するいくつかの方法がアドバイスされているため、まだ価値があります。この代替アプローチの長所を指摘しても大丈夫です。
humanityANDpeace 14

1
これを支持しました。理論的根拠は、スタイルが一部の人にとって不適切であると見なされる可能性があり、メリットがあることを完全に同意していることです。カーネル4.xでは、udevはイーサネットインターフェースの名前をランダムに変更しています。
ビクター

デバイスの永続的な命名のためにカーネルに依存することはできません。少なくともudevで制御できます。
エマニュエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.