この文書は、DecibelsのUDEV Primerを著者David Babcock(Alias Decibels)の許可を得て、
五十嵐 正尚([email protected])が翻訳し、GentooJPで公開しているものです。

日本語翻訳版 最終更新日 2006-01-30

Linux新人およびベテランユーザのためのコンピュータに関する支援文書

UDEV手引書


2.6カーネル向けUDEV手引書

さらなる進歩により、今では純粋udevシステムを稼動することができます。 一部のデバイスがまだsysfsに対応していないので、該当するデバイスについては回避策をとらなければなりません。 純粋udevシステムを稼動できない場合の対処法として、現在2つの選択肢があります。 udevのみのシステムを稼動した上で回避策を施すか、もしくは/dev以下のデバイスファイルを生成するためにdevices.tar.bz2ファイルを使うデフォルトのGentooセットアップを使用するかのどちらかです。 これら選択肢に関する詳細は、セットアップしながら説明します。 kernel-2.6.13の時点でdevfsの使用はもう選択できません。 でもgentooのtarアーカイブファイル(devices.tar.bz2)はまだ利用可能です。 ブートローダの設定をさわる必要がなく、すなわち意図せずブート時にdevfsをロードして有効にしてしまうことがないので、新しいカーネルは、以前よりとても簡単になっています。

UDEVをインストール済みで既に動作しているなら、この文書の終わりにリンクしてあるDSDのudevルールの書き方ガイドを参照してください。

メールでの回答: まず始めにちょっとした予備情報があります。devfsでの2.6カーネルはどうなっていますか?という質問に対して、直接本人から以下のように返答がありました。

devfsはudev、
http://www.kernel.org/pub/linux/utils/kernel/hotplug/
によって置き換えられたことに注意してください。
devfsは最低限のものだけが残されており、不幸にも通常のLinuxのインストールで使用する名前空間とは異なる命名規則を使用する、
過去のインストール用途のためだけに提供されます。

この手引書の最近の更新内容:
1) 現在sysfsはGPLのコードからしか利用できないので、Nvidia社製ドライバに関する情報を更新しました。 サポート外のカードを使っている場合はデバイスノードを手動で作成しなければなりません。 新しいドライバではNvidia社はその面倒をみているようですが、古いドライバでは面倒をみてくれません。 詳しくはNvidia社製ドライバと問題のあるデバイスセクションを参照してください。
2) 問題があるデバイスを持っている方なら誰でも、明快な調整方法や回避方法を教えてください。喜んでこの手引書に追加します。


目次   x86用udevの最新の安定版は045で、非安定版は056です。

  1. UDEVとはなんですか?
  2. UDEVをセットアップする手順
    a) カーネル設定
          1) Kernel-2.6.13以降の設定
          2) 2.6.13より前のカーネル設定
    b) udevをemergeする
    c) hotplugのセットアップ
    d) sysフォルダ
    e) fstabのマウント
    f)  baselayoutの更新
    g) スクリプトの編集
          1) 新しいbaselayout ( >=1.11.13-r1 ).
          2) baselayout ( >=1.8.6.13-r1 <=1.11.13-r1).
          3) 古いbaselayout ( <1.8.6.13-r1 )
    h) consoleとnullデバイス
    i)  Nvidia社製ドライバ
    j)  ブートローダ
    k)  再起動時の出力
  3. 問題のあるデバイス
  4. udevルールの書き方からの抜粋
  5. miscデバイス: Palm Pilot, フラッシュメモリドライブ (サム, ペン,..)
  6. リンク集


UDEVとはなんですか?

間単に言えばUDEVsysfs/sbin/hotplugを使用するユーザスペースでのDEVFSの置き換えです。 そのときどきのシステム構成を基に動的に/dev以下を生成したり削除したりします。システムで発生する/sbin/hotplugイベントを監視し、sysfs経由でそれらのイベントに関する情報を取得するという仕組みです。

デバイスがカーネルに追加されるかカーネルから削除されるときはいつでも、カーネルが/sbin/hotplugを呼び出すため、udevは完全にユーザスペースで動作します。 全ての名前付け制御とパミッション制御は、ユーザスペースでなされます。

さらに詳しい情報を見るためのリンク。

http://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQ

で、おそらく最初の質問は、次の質問でしょう。udevを使いはじめるには、まずどのようにすればいいの?

全然難しくはありません。ですがカーネルのコンパイルを一度もしたことがない場合を除きます。それはこのチュートリアルの範囲外です。

UDEVをセットアップする手順

  1. 新しいカーネル(>= 2.6.13)

    前述したように2.6カーネルをインストールおよび設定する必要があります。 次の例は2.6.14カーネル用です。古いカーネルには、同じセクションの次の記述を参照してください。

    kernel-2.6.13時点で、devfsの選択はもうオプションにはありません。 オプションとしてdevfsが必要なら、以下を参照し2.6.13より低いバージョンを選択してください。

    #
    # General setup
    #
    CONFIG_HOTPLUG=y
    #
    # File systems
    #
    # Pseudo filesystems
    #
    CONFIG_PROC_FS=y
    CONFIG_PROC_KCORE=y
    CONFIG_SYSFS=y
    CONFIG_TMPFS=y   <--- まず初めにこれが試され、利用できない場合、ramfsが使用されます。
    CONFIG_RAMFS=y        ramfsがデフォルトで有効にされているべきで、オプションでない方がよい
    #                    と確信しています。だって、tmpfsは次のように言われています。仮想メモリファイルシステムサポート(元はshm fs)
  2. 前述したように2.6カーネルをインストールしてセットアップする必要があります。すぐにudevを使用するためのお勧めカーネルは、順に >mm-sources-2.6.1-mm3(私は現在2.6.4-gentoo-r1を使っています)か、 >gentoo-dev-sources-2.6.1 >development-sources-2.6.2です。 できるだけ新しいバージョンをチェックして、より新しいカーネルを取得してください。 udevは少し古いカーネルのいくつかで動作しますが、新しいカーネルでは、よりうまくいくように改良されているでしょう。 カーネルの設定における重要な部分を以下に示します。補足説明: 望むならDEVFSもコンパイルして、起動時にどちらを使用するか選択できます。 ですので、udevを使うことでカーネルにdevfsをコンパイルできないとは思わないでください。 詳しくは、この文書のLILOおよびGRUBセクションを参照してください。 なんらかの理由で、選択したカーネルに以下の必要なカーネルオプションの一部が見つからなくても、読み続けてください。各カーネルには違いがあります。

    initrdでの注意: initrdを使いたいなら、(私は使いませんが、) (訳注:デバイスノードが含まれる)tarアーカイブファイルを使用するか、 devfsサポートを備えたカーネルをコンパイルするか、 'devfs not mounting on /dev(訳注: devfsは/devをマウントできません)'に関するエラーを受け取るかのどれかをしなればならないようです。

    genkernelでの注意: genkernelを使っているなら、udevを使って動作するようになったのはバージョン3.0.2fからのようです。--udevオプションを付加してgenkernelでコンパイルしてください。例: genkernel --save-config --menuconfig --udev all

    補足: LILOまたはGRUBブートローダを設定する場合、gentoo=nodevfsの代わりにudevを使う必要があります。 udevオプションは手動でコンパイルされたカーネル(2.6.13より前)で使われます。 そうしないと、せっかくがんばってもudevを使いません。 例が見たいならブートローダのセクションを参照してください。 (訳注: udevを使用するなら、)カーネルとブートローダのオプションを除いて、この手引書の他の部分には従ってください。

    注意:起動時の自動マウントが機能するようにdevfsを有効にしてはいけません!!。 そんなことは聞いたことがないかもしれませんが、少なくともbaselayout-1.8.6.13-r1の時点ではブートローダの'nomount'オプションを無視します。 /etc/conf.d/rcに何を設定しようともdevfsをロードしようとします。 'checking root filesystem(訳注: ルートファイルシステムをチェックします。)'が失敗し、起動しないでしょう。ファイルシステムが正常であってもです。 (訳注: これをしてしまうと、)どこか別のところからchrootし、起動時にdevfsを自動でマウントするオプションを取り除き、カーネルを再コンパイルする必要があります。 'make menuconfig'を実行する前に、'make mrproper'さえもしなければならないでしょう。 'make mrproper'を実行する前に、どこか影響しないところに
    .configを確実にコピーするか、削除してください。 注意: devfsを有効にしない限りdevfsの'Automatically mount at boot(訳注: 起動時自動マウント)'のオプションは表示されません。 ということは、あえて有効にしない限り有効にされることはありません!

    udevconfig1.png

    udevconfig2.png

    設定の中には直接.config自体を見れば存在するけど、menuconfigでは出現しないオプションがいくつかあります。 よって.config自体を確認しようと思うなら、以下はそうなっているべきものなので参考にしてください。 一部のカーネルではCONFIG_HOTPLUGは、General Setupのところなど以下のものとは別の場所にあるかもしれません。 (ヒント情報).configファイル内で探しているものをgrepをして、その後それを設定するためにmenuconfigに戻ってみてください。

    以下はmm-sources-2.6.3-rc1-mm1の例です。

    # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    #
    CONFIG_HOTPLUG=y
    #
    # File systems
    #
    # Pseudo filesystems
    #
    CONFIG_PROC_FS=y
    CONFIG_PROC_KCORE=y
    CONFIG_SYSFS=y
    # CONFIG_DEVFS_FS is not set   <--- 希望するならYとすることができますが、udevで起動するためにブートローダにgentoo=nodevfsを追加しなければなりません。
    CONFIG_DEVPTS_FS=y                   絶対に起動時に自動的にdevfsをロードするように設定してはいけません!!!
    # CONFIG_DEVPTS_FS_XATTR is not set           補足: 2.6.4カーネルの時点から, DEVPTS_FSオプションは利用できません。カーネルで既に有効になっています。
    CONFIG_TMPFS=y
    # CONFIG_HUGETLBFS is not set
    # CONFIG_HUGETLB_PAGE is not set
    CONFIG_RAMFS=y

    希望するなら、今でもカーネルにDEVFS (CONFING_DEVFS_FS)をコンパイルできますが、その場合は上記の警告を見てください。 もしそうするなら、後で説明するLILOおよびGRUBのためのいくつかのブートオプションがあります。そこでdevfsとudev間での切り替え方法を説明しています。 ですが、devfsは最低限のものしか残されていないことを覚えておいてください。 さらにdevfsに切り替えてリブートすると、udev用に変更したものは保存されないことにも注意してください。 udevでデバイスの状態を保存する唯一の方法は、Gentooのデフォルトのudevインストールに含まれる/lib/udev-state/devices.tar.bz2を使うことです。 純粋udevシステムを運用する(すなわちdevices.tar.bz2を使用しない)なら、変更は全く保存されず、動的なデバイス生成となります。 udevで管理されるデバイスに対して変更を加えたいなら、/etc/udev/rules.d/10-local.rulesファイルに追加してみてください。 10-local.rulesを作成しなければならない場合、同じ場所にある50-udev.rulesを編集しないようにしてください。50-udev.rulesは、デフォルトのルールファイルです。 ユーザが作成する/してもよい10-local.rulesファイルに対し独自ルールを追加してください。 ただ、ほとんどのシステムでは何もしないでもうまく開始するので、独自のルールを追加する必要はないでしょう。それでも必要ならここで説明しているようにしてください。

  3. 次にemerge udevを実行してください。 最低でもバージョン024-r1を取得してください。それよりも古いバージョンでも動作しますが、多くの問題に遭遇するでしょう。 したがって、最新のものを取得するのが一番よいです。 udevはhotplugにも依存しますので、まだemergeしてなかったらそれもしてください。

  4. rc-update add hotplug bootを実行してhotplugをbootランレベルに追加してください注意:defaultランレベルにも追加していないか確認したいでしょう。rc-update -src-update showで確認できます。以下のような感じで表示されるでしょう。(実際のものよりも省略してあります)

    bash-2.05b# rc-update -s
                alsasound | boot
                   hdparm |      default
                 hostname | boot
                  hotplug | boot

    bootランレベルに追加した後、defaultランレベルからhotplugを削除するためにrc-update del hotplug defaultを実行すれば、bootランレベルだけに残ります。

  5. Gentooは、ここでsysfsをマウントするためにルートに/sysフォルダを作成しているようです。 少なくとも新規インストールの時にudevに変更するなら、やはり作成した方がいいようです。 当面の間/sysフォルダの存在を確認し続けるのが一番で、/に作られてないなら、手動で作成してください。 mkdir /sysで作成します。

  6. Gentooは、次にdevptsとsysのマウントを処理します。したがって、/etc/fstabにどちらのエントリも追加する必要はありません。これらは/sbin/rcスクリプトが処理します。結果はdf -aで確認できます。 私はfstabにおいて、それらに関する問題は何も起きていませんが、既に追加してしまっていたら、それらに関するエントリを削除した方が安全です。 マウントしないかコンソールセッションを開始できないという、devptsかsysに関する問題があるなら、おそらくその問題を引き起こす別の原因を探すべきでしょう。

    devfsは、もう/dev/ptsを管理しないことに気をつけてください! UNIX98仮想端末
    を使用しているなら、/dev/ptsファイルシステム(CONFIG_DEVPTS_FS)を
    有効に(そしてマウント)する必要もあるでしょう。


    この時点で、udevとsysfsとhotplugを実際にインストールし終わって、準備が整ったと思うかもしれません。 ごめんなさい、まだです。 sysfsがマウントされ、/devがtmpfsにマウントされて(カーネルでtmpfsを有効にしていない場合はramfs)hotplugが開始されるまで、実際にはまだ何も機能していません。 デバイスの削除か追加をすると/sysに変化があるのがわかるでしょうけど、システムはその情報を使って何も行っていません。

  7. 次に必要な事項は、新しいbaselayoutです。それには開始するのに必要なinitスクリプトの全てが含まれています。emerge baselayoutを実行してください。 halt.shと/sbin/rcを修正する必要がない、ちゃんと動作する一番初期のバージョンは、baselayout-1.8.6.13です。 udevはまだ開発が続いているので、少なくともそのバージョンか可能ならより新しいものを取得してください。 上記のバージョンには、必要なinitスクリプトの全てが含まれていますが... やっぱり私なら最新のバージョンを取得するでしょう!

    含まれるものを見てみると/lib/udev-stateの下にdevices.tar.bz2というファイルがあることに気が付くかもしれません。このファイルは、シャットダウン時にtmpfs(もしくはramfs)からそのときの/devの状態が保存され、起動時にそこから状態を復元します。

    /devの状態を保存する行為は、なんだかUDEVの理想に反している感じじゃないですか? udevは、必要なときにだけ、必要なデバイスをシステムに作成する動的ファイルシステムのはずです。 例えばスキャナが接続されていない場合、そのスキャナのデバイスファイルは必要ないので作成されていません。 接続したらudevはそのスキャナのデバイスファイルを作成します。 でも/devの状態が保存されるなら、次に復元されるときには、接続されていなくても存在することになるでしょう。 これをする理由は、当初は必要とされる基本的なデバイスしかudevによって作成されなかったからです。 ブロック(ハードドライブ)デバイス、端末デバイス、...など、今ではUDEVは大幅に進歩し、必要とする機能のほとんどを備えています。 それゆえに、現在udevのみのシステムを稼動することが可能です。 まだ少し問題がありますが、それらの問題に対する回避策があります。

    将来的には、さらにudevのみでうまくやれるようになったときに、Gentooはおそらくdevices.tar.bz2を削除するでしょう。そうなる日は近いようです。

    etc-updateを実行して更新する必要がある新規設定ファイルを、適切な位置に間違いなく置いてください。そうしないと、/lib/udev-state/devices/devices.tar.bz2にその時点の/devフォルダを保存しないでしょう。 仮にデフォルトのdevices.tar.bz2を使用するつもりはなく、かつudevのみのシステムを稼動したいなら、udevを使用するための適切な位置におく必要なスクリプトはないでしょう。

  8. スクリプトを次のように編集してください。 デフォルトのGentooのセットアップを実行することで事足りるなら、さしあたりこのセクションを読み飛ばしてもかまいません。 遅かれ早かれ将来的にこの選択をする必要はなくなるでしょう。(訳注: 編集作業自体必要なくなるはずという理由から) だけども純粋udevシステムを稼動するには、以下の二つのスクリプトを編集してください。 注意: 純粋udevシステムがうまく稼動しないことが判明したら、いつでもtarアーカイブファイル(訳注: devices.tar.bz2のこと)を使用する方法に戻すことができます。 RC_DEVICE_TARBALLをyesに戻すだけです

    注意: baselayout-1.8.6.13-r1以上のバージョンを使用しているなら、/etc/init.d/halt.shもしくは/sbin/rcを編集する必要はありません。古いbaselayout(1.8.6.13-r1よりも前のバージョン)に対しては、次のセクションを参照してください

    より新しいbaselayout ( >=1.11.13-r1 )

    より新しい(少なくとも)baselayout-1.11.13-r1以降では、それでも/etc/conf.d/rcを編集することだけは必要ですが、オプションがわずかに変更されました。 以下に関連する部分を載せます。(デフォルト設定)(訳注: コメントの日本語訳を併記します。)

    # Use this variable to control the /dev management behavior.
    # auto - let the scripts figure out what's best at boot
    # devfs - use devfs (requires sys-fs/devfsd)
    # udev - use udev (requires sys-fs/udev)
    # static - let the user manage /dev
    # /dev管理方法を制御するためのにこの変数を使用してください。
    # auto - 起動時において、スクリプトに最良なものを判定させます
    # devfs - devfsを使用します(sys-fs/devfsdが必要)
    # udev - udevを使用します(sys-fs/udevが必要)
    # static - ユーザが/devを制御します

    RC_DEVICES="auto"   <--- autoはうまく動作しますが、だめならudev(もしくはその他)に変更してください

    # UDEV OPTION:
    # Set to "yes" if you want to save /dev to a tarball on shutdown
    # and restore it on startup. This is useful if you have a lot of
    # custom device nodes that udev does not handle/know about.
    # シャットダウン中に/devをtarアーカイブに保存して、起動中に復元したいなら
    # "yes"を設定してください。udevが扱わない/関知しない非標準デバイスノードが
    # たくさんある場合に便利です。

    RC_DEVICE_TARBALL="yes"   <--- より新しいbaselayoutではnoに変更されるかもしれません

    新しいbaselayout ( >=1.8.6.13-r1 <1.11.13-r1)

    新しいbaselayout-1.8.6.13-r1では、/etc/conf.d/rcを編集することだけが必要です。 以下に関連する部分を載せます。(デフォルト設定)(訳注: コメントの日本語訳を併記します。)

    # Set to "yes" if you want to save /dev to a tarball on shutdown
    # and restore it on startup. This is useful if you have a lot of
    # custom device nodes that udev do not handle/know about.
    # (ONLY used by UDEV enabled systems!)
    # シャットダウンの時に/devの状態をtarアーカイブに保存し、
    # 起動時にそれを復元したいなら、"yes"としてください。
    # udevが扱わない/関与しないカスタムデバイスノードがたくさんある場合に
    # 役にたちます。(UDEVが有効になっているシステムでだけ使用されます!)

    RC_DEVICE_TARBALL="yes"

    # Set to "yes" if you want devfsd to start upon bootup. This is
    # the default for Gentoo.
    # Set to "no" only if you understand the full implications. A
    # number of files may need to be altered (i.e. /etc/inittab,
    # /etc/fstab, etc.).
    # Also note that it does _NOT_ start for UDEV enabled systems,
    # even if RC_DEVFSD_STARTUP="yes" ...
    # 起動時にdevfsdを起動したいなら、"yes"としてください。
    # Gentooではデフォルトです。
    # 完全にどういうことになるかを理解している場合にだけ"no"としてください。
    # "no"とすると多くのファイルを変更する必要があるでしょう(etc/inittab、
    # /etc/fstab、など)。
    # また、RC_DEVFSD_STARTUP="yes"としても、UDEVが有効なシステムでは起動_しない_
    # ことにも注意してください。
    RC_DEVFSD_STARTUP="yes"

    注意:baselayout-1.11.13-r1以降を使用する場合、ブートローダ設定(すなわちカーネル引数)にgentoo=noudevgentoo=nodevfsを加える必要はありません。 udevが有効なシステムで/etc/conf.d/rcautoudevが設定されていたら、gentoo=nodevfsを使用しなくてもudevを使用してして起動します。 より早い段階で検出が必要なデバイスがあり、それ無しでは動作しない場合、ブートローダの設定にgentoo=nodevfsを書き戻して試してください。 /sbin/rcは、まだそれを認識します。 さらに(2.6.13から)2.6.14のようなより新しいカーネルを使用すると、もうdevfsはカーネルのオプションにはありません。ですので、それらのカーネルを使用する場合、nodevfsは的外れになります。

    たくさんの試行錯誤を経て、これらのオプションをどのように設定できるかを以下に記述します。 (注意: ブートローダの設定では'devfs=nomount'を使用しないでください。 /sbin/rcはそのオプションを無視します。 /sbin/rcは'gentoo=nodevfs'もしくは'gentoo=noudev'を期待します。)

    /etc/conf.d/rcのオプションが変更になったため、以下の記述はbeselayout-1.8.6.13-r1から1.11.13-r1の前までだけに関係します。 ですので、該当しない場合は読み飛ばしてかまいません。 さらに2.6.14のようなより新しいカーネルを使用する場合、devfsはもうカーネルのオプションではありません。

    以下はデフォルトの設定です。devfsかudevのどちらででも起動できます。 ブートローダに同一カーネル(訳注: 同一バイナリ)、またはそれぞれ別のカーネルで使い分けるように設定するなら、LILOまたはGRUBに対して適切なオプションを指定してください。(gentoo=noudevかgentoo=nodevfsのどちらか)

    devfsまたは(tarアーカイブファイルを使用した)udevのどちらも使用する場合

    RC_DEVICE_TARBALL="yes"
    RC_DEVFSD_STARTUP="yes"

    以下はtarアーカイブ(devices.tar.bz2)を使用しない設定です。 この設定でも、希望するならdevfsで起動することが可能です。 ブートローダに同一カーネル(訳注: 同一バイナリ)またはそれぞれ別のカーネルで使い分けるように設定するなら、LILOまたはGRUBに対して適切なオプションを指定してください。(gentoo=noudevかgentoo=nodevfsのどちらか)

    devfsまたは(tarアーカイブファイルを使用しない(純粋))udevのどちらも使用する場合

    RC_DEVICE_TARBALL="no"
    RC_DEVFSD_STARTUP="yes"

    以下はtarアーカイブファイル(devices.tar.bz2)を使用する、もしくはtarアーカイブファイルを使用しない設定です。どちらもdevfsでは起動できません!

    (tarアーカイブファイルを使用した)udevを使用し、devfsは使用しない場合

    RC_DEVICE_TARBALL="yes"
    RC_DEVFSD_STARTUP="no"

    もしくは

    (tarアーカイブファイルを使用しない(純粋))udevを使用し、devfsは使用しない場合

    RC_DEVICE_TARBALL="no"
    RC_DEVFSD_STARTUP="no"

    このたくさんの変数が導入されてからというもの、devfsが完全に過去のものになるのが待ち遠しいです。そうすればもうオプションもなくなるしね!

  9. 古いbaselayout(1.8.6.13-r1より前のバージョン)

    /etc/init.d/halt.sh
    このファイルの青い##の箇所を(rootユーザで)コメントアウトすると、シャットダウン時におけるdevices.tar.bz2ファイルへの/dev状態の保存をしなくなります。 /dev状態を保存するスクリプトであるこの箇所は、halt.shの先頭付近にあります。

    # We need to properly terminate devfsd to save the permissions
    if [ -n "`ps --no-heading -C 'devfsd'`" ]
    then
            ebegin "Stopping devfsd"
            killall -15 devfsd &>/dev/null
            eend $?
    elif [ ! -e /dev/.devfsd -a -e /dev/.udev ]
    then
            ebegin "Saving device nodes"
            ##cd /dev
            ##try tar -jclpf "/tmp/devices-$$.tar.bz2" *
            ##try mv -f "/tmp/devices-$$.tar.bz2" /lib/udev-state/devices.tar.bz2
            eend 0
    fi

    /sbin/rc
    このファイルでは青い##の箇所を一行だけ(rootユーザで)コメントアウトします。ここでは起動時において/sbin/rcがdevices.tar.bz2ファイルから/dev以下を作成しないようにします。


    # Fix weird bug where there is a /dev/.devfsd in a unmounted /dev
    mymounts="$(awk '($3 == "devfs") { print "yes"; exit 0 }' /proc/mounts)"
    if [ -e "/dev/.devfsd" -a "${mymounts}" != "yes" ]
    then
            rm -f /dev/.devfsd
    fi

    if [ "${udev}" = "yes" ]
    then
            ebegin "Mounting ramfs at /dev"
            try mount -n -t ramfs none /dev
            eend $?
            ebegin "Configuring system to use udev"
            einfo " Populating /dev with device nodes..."
            ##try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev
            populate_udev
            if [ -e /proc/sys/kernel/hotplug -a -x /sbin/hotplug ]
            then
                    einfo " Using /sbin/hotplug for udev management..."

            elif [ -e /proc/sys/kernel/hotplug ]
            then
                    einfo " Setting /sbin/udev as hotplug agent..."
                    echo "/sbin/udev" > /proc/sys/kernel/hotplug
            else
                    ewarn " Kernel was not compiled with hotplug support!"
            fi
            eend 0
            # Create problematic directories
            mkdir -p /dev/{pts,shm}
            # Same thing as /dev/.devfsd
            touch /dev/.udev


  10. 今回が新規のインストールで純粋UDEVシステム向けに設定している場合もしくはudevをインストールして、適切に設定したあと最終的に再起動したときにエラーになる場合、一番最初のコンソールを開くことができないことを警告しておきます。 これは/dev/consoleと/dev/nullが存在しないことが原因です。 udevが/devフォルダの下を作成する前に、/dev/consoleが要求されるということが発生しています。 別のシステムから/devフォルダにあるすべての静的なデバイスをわざと削除し、その後udevシステムを再起動してみてください。 そうするとconsoleのエラーになるでしょう。 さらに通常ならudevをロードする直前に失敗することにも気が付くでしょう。 ですが/dev/consoleだけを作成しても、次は/dev/nullに関してエラーになります。 したがって、少なくとも当面の間は、/devにこれら両方の静的デバイスが必要です。 今のところの対処方法は、/devフォルダにそれらを自分で作成することです。

    cd /dev
    mknod -m 660 console c 5 1
    mknod -m 660 null c 1 3

    これは、/devフォルダに/dev/consoleと/dev/nullを静的に作成します。

  11. NVIDIAドライバ: 現在sysfsはGPLのコードによってのみ使用できます。 ですのでudevはnvidiaのデバイスノードを作成しません。 Nvidia社はデバイスノード生成の面倒をみなければなりません。 nvidia-glxがXの起動時にデバイスノードを作成します。 残念ながらNvidia社は昔のカードでのこの問題を修正していません。 よって、RivaTNTのような古いカードを使っているなら、自分でデバイスノードを作成しなければなりません。 どうすべきかについて以下のNvidia社製ドライバセクションにある問題のあるデバイスを参照してください。 使用中のカードがサポート外(古い)なら、/usr/share/doc/nvidia-kernel-<version>/README.gzのAppendix Aも参照してください。 古いカード向けの最終バージョンはnvidia-kernel-1.0.7174nvidia-glx-1.0.7174-r5です。

    それでもnvidiaデバイスが/devに作成されない問題があるなら、 起動時にロードされるように/etc/modules.autoload.d/kernel-2.6ファイルにnvidiaを入れたことを確認してください。 そこになければ、nvidiaデバイスも作成されません。 よって、髪をかきむしっていらいらする前に、ロードされるか確認するためにlsmodコマンドを使ってください。

  12. LILOおよびGRUB。 これが編集する必要のある最後のもののはずです(でも再起動する前に、以下の問題のあるデバイスを参照してください)。

    カーネルにDEVFSサポートを含めてコンパイルしなかったもしくは>=kernel-2.6.13(devfsがもうオプションにない)を使用しているなら、準備は万端です。 ブートローダに追加する必要があるものは何もありません。 カーネルにDEVFSサポートを含めてコンパイルしたなら(起動時に自動でロードされるようにdevfsをコンパイルしましたか? もしそうなら、前に戻ってそのオプションを含めずにカーネルを再度コンパイルしてください。これが最後の警告です!) 2つほど意思決定をすることが必要です。 udev機能を組み込んであったとしても、カーネルにdevfsサポートがコンパイルされている場合、Gentooは起動時にdevfsをロードしようとします。したがって、ここに少し選択肢があります。

    選択肢1: devfsをロードせず、udevを使う場合。これを追加する必要があります --> gentoo=nodevfs

    選択肢2: udevをロードせず、devfsを使う場合。これを追加する必要があります。 --> gentoo=noudev

    選択肢3: udevかdevfsのどちらか一方で同一カーネルに対して起動できるように、GRUBまたはLILOに上記二つの選択肢を持たす場合。LILOまたはGRUBに二つの起動選択設定を追加する必要があります。そのうち一つは一つ目のオプション指定、もう片方は二つ目のオプション指定とする必要があります。

    genkernel 選択肢1:devfsをロードせず、udevを使う場合。これを追加する必要があります。 -->> udev

    genkernel 選択肢2:udevをロードせず、devfsを使う場合。これを追加する必要があります。 -->> devfs

    以下はLILOの例です。

    選択肢1: devfsをロードせず、udevを使う場合。

    # Udev system mm1 2.6.3 kernel
         image ="/boot/bzImage-2.6.3-rc1-mm1"
         root="/dev/hdb2"
         label="GentooUDEV"
         append = "gentoo=nodevfs ide0=ata66 ide1=ata66 hdc=ide-cd"
         read-only

    選択肢2: udevをロードせず、devfsを使う場合。

    # Devfs system mm1 2.6.3 kernel
         image ="/boot/bzImage-2.6.3-rc1-mm1"
         root="/dev/hdb2"
         label="GentooDEVFS"
         append = "gentoo=noudev ide0=ata66 ide1=ata66 hdc=ide-cd"
         read-only

    選択肢3: 起動時にどちらを使用するか選択する場合。

    # Udev system mm1 2.6.3 kernel
         image ="/boot/bzImage-2.6.3-rc1-mm1"
         root="/dev/hdb2"
         label="GentooUDEV"
         append = "gentoo=nodevfs ide0=ata66 ide1=ata66 hdc=ide-cd"
         read-only
    # Devfs system mm1 2.6.3 kernel
         image ="/boot/bzImage-2.6.3-rc1-mm1"
         root="/dev/hdb2"
         label="GentooDEVFS"
         append = "gentoo=noudev ide0=ata66 ide1=ata66 hdc=ide-cd"
         read-only

    genkernel 選択肢1: devfsをロードせず、udevを使用する場合。

    # Udev system kernel-2.6.10
         image="/boot/kernel-2.6.10-gentoo-r6"
         root="/dev/ram0"
         label="GenKernel-2.6.10"
         append="udev init=/linuxrc real_root=/dev/hda4 video=vesafb:ywrap,vga=0x31B"
         initrd="/boot/initrd-2.6.10-gentoo-r6"

    genkernel 選択肢2: udevをロードせず、devfsを使用する場合。

    # Devfs system kernel-2.6.10
         image="/boot/kernel-2.6.10-gentoo-r6"
         root="/dev/ram0"
         label="GenKernel-2.6.10"
         append="devfs init=/linuxrc real_root=/dev/hda4 video=vesafb:ywrap,vga=0x31B"
         initrd="/boot/initrd-2.6.10-gentoo-r6"

    以下はGRUBの例です。ブートローダが違うだけで、ほとんど同じです。

    選択肢1: devfsをロードせず、udevを使う場合。

    title=Gentoo UDEV
    root (hd0,0)
    kernel (hd0,0)/bzImage-2.6.3-rc1-mm1 root=/dev/hda3 gentoo=nodevfs

    GRUBのもう一つの例です。

    title=Gentoo Main
    root (hd0,5)
    kernel /bzImage-2.6.4-gentoo-r1 root=/dev/hda7 gentoo=nodevfs hdc=ide-cd ide0=ata66 ide1=ata66 vga=791

    カーネルにDEVFSをコンパイルしていなくて、後で使いたくなったら、DEVFSサポートを含めてカーネルを再度コンパイルしてください。そして、ここの記述を参照してブートローダの設定を編集し、上記のように適切な変更を行って、どちらか一方か、両方を使用してください。同時にudevとdevfsを使用することだけはできません。 ごめんなさい、お一人様一点限りとなっております。 再度強調しておきます。 起動時に自動でdevfsをロードするようにカーネルをコンパイルしてはいけません!!! (ほんとうに、ほんとうに、これが最後の警告ですよ!!) >=kernel-2.6.13のカーネル使用しているなら、DEVFSはもう使用できるオプションではありません。

  13. 問題のあるデバイス

    常に最初は/var/log/error_log_filesを調べてください。 解決の糸口があるかもしれません。

    devices.tar.bz2を次のように編集してください。 Gentooのデフォルトでのudevインストールを使うことにして、必要だけどもudevによって作成されないデバイスだけをdevices.tar.bz2に含めるように、簡単な変更を加えている人がいます。consoleやnullのような、そして/または他のデバイスのために、このようにしたいなら、arkを使うという簡単な方法があります。 他のGUIツールやコマンドラインツールでの方法もあります。 私は、単にdevices.tar.bz2をホームディレクトリ上の一時フォルダに移動し、その中を見て、consoleとnull以外のすべてを選択して、削除しました。 そしたら、削除に失敗したと言われましたが、実際は削除されていました。 そしてdevices.tar.bz2を作り直しました。 残っているファイルを再度確認すると、それら二つのデバイスだけがありました。 こうすることで、以前のdevices.tar.bz2と置き換えることができます。 とにかくこのやり方をするなら、tarアーカイブファイルを使用しないようにスクリプトを設定していないことを確認してください。 この方法でtarアーカイブファイルを使う場合、RC_DEVICE_TARBALL="yes"のままにしておくべきでしょう。

    Nvidia社製ドライバ: 現在sysfsはGPLのコードによってのみ使用できます。 ですのでudevはnvidiaのデバイスノードを作成しません。 Nvidia社はデバイスノード生成の面倒をみなければなりません。 nvidia-glxがXの起動時にデバイスノードを作成します。 残念ながらNvidia社は昔のカードでのこの問題を修正していません。 よって、RivaTNTのような古いカードを使っているなら、自分でデバイスノードを作成しなければなりません。

    使用中のカードがサポート外(古い)なら、/usr/share/doc/nvidia-kernel-<version>/README.gzのAppendix Aも参照してください。 古いカード向けの最終バージョンはnvidia-kernel-1.0.7174nvidia-glx-1.0.7174-r5です。

    ところで、/etc/modules.autoload.d/カーネルにnvidiaモジュールを記述するのが標準的なやり方です。 よって起動時に他のモジュールと共にnvidiaモジュールが自動でロードされるように追加したか確認してください。

    Nvidia社がこれを修正するまで、/devにnvidia#とnvidiactlデバイスを自分で作成しなければなりません。私が使用している一つの方法は、/etc/conf.d/local.startファイルに以下のような記述を追加することです。

    mknod -m 660 /dev/nvidia0 c 195 0
    mknod -m 660 /dev/nvidia1 c 195 1
    mknod -m 660 /dev/nvidiactl c 195 255

    デバイスの数がどれだけ必要かが定かでないかもしれません。 私は二つだけを作成しましたが、問題は起きませんでした。 ノード名に合わせてマイナー番号を変更しただけです。 古いカードを使用していてNvidia社が/devにnvidiaデバイスノードを作成しはじめると、起動時に「デバイスが既に存在している」というエラーになるでしょう。 そのときは(訳注: local.startやlinks.confに)追加した行を削除してかまいません。

    Nvidia社製/Alsaデバイス:udev-021以後は、/sbin/udevstartというバイナリファイルが新しく追加されました。 udev-023-r1をemergeするまで、この新しいバイナリが付属したバージョンを使ったことがありませんでした。 ですが使用してみると、nvidiaデバイスがなくてデバイス一つだけ(dev/snd/controlC0)が作成されるという問題に遭遇しました。 ですので、バージョン021およびそれ以上のものをインストールして、再起動して座っているとXではなくコマンドラインのログインになった場合、ルートユーザで/sbin/udevstartを実行してください。 これでデバイスが作成されます。その後、一般ユーザに戻ってstartxを実行してください。 これはnvidiaとalsaパッケージの問題で、udevに関する問題ではないという情報を得ています。

    mixer/midi/dspデバイス: /dev/mixerか/dev/midiか/dev/dspが作成されないということを、私も含めて何人かが報告しています。 これはudevの問題ではありません。 モジュールとしてカーネルをコンパイルしたらなら、/etc/modules.autoload.d/kernel-2.6に加えてロードなければなりません。 したがって、それらのデバイスが作成されていないなら、以下のようにsnd_pcm_oss & snd_seq_ossをkernel-2.6ファイルに追加してください。 snd_pcm_ossは、snd_mixer_ossをロードします。

    snd_mixer_oss alias is /dev/mixer
    snd_pcm_oss alias is /dev/dsp
    snd_seq_oss alias is /dev/midi

    PPPデバイス: 依然としてsysfsに対応される必要があるデバイスの一つであることが分かっています。 したがって、いずれにしてもそれを生成するためのudevルールを書くことはできません。 /dev/pppが必要なら、それを自分で作成しなければならないでしょう。 nvidiaデバイスでしたようにlocal.startに追加できます。 必要なデバイス(udevでは作成されない)だけを含むようにtarアーカイブファイルを調整した人もいます。 /etc/conf.d/local.startに追加したいなら、以下の行を追加してください。

    mknod -m 660 /dev/ppp c 108 0

    マウスデバイス: マウスがudevを使って動作しないことが判明した方々へ。それは実際にはudevの問題ではなく、今までに設定していた方法の問題です。 udev(現時点での)は、マウスが使用可能なデバイスの位置が4つあります。

    /dev/input/mice
    /dev/input/mouse0 (たくさんあるなら、mouse1、mouse2、..があるでしょう。ですがmouse0が最初のマウス用です)
    /dev/misc/psaux (/dev/psauxからシンボリックリンクされています)

    したがって、どれ(mouse#、mice、psaux)を使用するにしても、/etc/X11/XF86Config-4もしくはXF86Configもしくはxorg.confがマウスデバイスの適切な位置を使用していることを確認してください。/etc/udev/rules.d/10-local.rulesでシンボリックリンクを作成することができますが、XF86Config-4もしくはXF86Configファイルを編集する方が賢明です。

  14. さあこれで再起動してudevシステムを実際に試すことができるはずです。 そして、起動時に以下のような表示が確認できるはずです。 一つ目は古いスクリプトのものであり、その次は現行の起動時のものです。 選択したオプションによってこの例とは違いが出てきます。 より詳しい情報が必要なら/sbin/rcを調べてください。

    mounting sysfs at /sys
    mounting ramfs at /dev
    configuring system to use udev
      populating /dev with device nodes
      using /sbin/hotplug for udev management

    もしくは

    Mounting /dev for udev ...
    Configuring system to use udev ...
      Populating /dev with device nodes ...   <--- tarアーカイブを使用した場合のみ表示されます。
      Setting /sbin/udevsend as hotplug agent ...  <--- udevのバージョンに依存して異なります

最後にフォーラム上で見たことのある他の問題のいくつかを記述します。

  1. setfont: 起動時にsetfontのエラーが発生したら、最新のkbdを次のようにemergeしてください。emerge -U kbd
  2. udev-009: バージョン009は、sysfsutils-0.4.0との組み合わせではコンパイルできないでしょう。 その場合、一旦sysfsutils-0.3.0にダウングレードする必要があるでしょう。 その後、emerge udev-009をすると、再びemerge sysfsutils-0.4.0できます。 これに関するバグレポートがあります。 ただ、より新しいudevバージョンを使っているはずでしょうから、これは、もう問題ではないですね。
  3. 動的デバイス作成: udevが想定する振舞い、動的デバイス生成に関して疑問に思う人がいます。 現在、udevは極めてほとんどのデバイスに関して/dev以下の作成に使用されています。 いずれにしても、現時点でのGentooが備えるUDEVセットアップの方法でしか理解していないのでしょう。(これは、devices.tar.bz2を使用する方法にしか該当しません。)

リンク集

udev手引書のイタリア語翻訳(Enrico Morelliに感謝) イタリア語UDEV手引書

udev手引書の日本語翻訳(五十嵐 正尚に感謝) 日本語UDEV手引書

udev手引書の日本語翻訳(五十嵐 正尚に感謝) 日本語UDEV手引書 miscデバイス

udev手引書のドイツ語翻訳(Alexander Mingesに感謝) ドイツ語UDEV手引書

udevルールの書き方に関するDSDのガイド: udevルールの書き方(日本語訳)

GentooフォーラムでのUDEVに関する主要な一連の投稿: Gentooフォーラムでのスレッド


udevルールの書き方からの抜粋 UDEVルールの書き方に関するDSDのガイドを使うと、どれだけ簡単であるかを知りたかったので、もっとも最近にudevで動作したデバイス、私のMicrotek製スキャナを取り上げてやってみました。 その結果、非常に簡単であるということがわかりました。

私は/devにあるすべてのデバイスのsysfs情報を表示するためのpythonスクリプトを書きました。 新しいバージョンには、特定のデバイスの情報を/sysから検索する機能を追加しました。 ここからダウンロードしてください: udevread-0.3.tar。 展開して次のように実行してください。 /devにあるすべてのデバイスの情報の表示するpython udevread.py --allか、python udevread.py --dev device_pathのようにして使用します。 例えばpython udevread.py --dev input/miceのような感じです。 おそらく端末をフルスクリーンで開いた方がよいでしょう。 どのような出力結果になるか見てみるには、こちらを参照してください。 udevread.pyの出力結果

注意:/sysでのクラスを探さなければならなかったのが、今ではデバイスパスを引数にしてudevinfoを実行して情報を取得できます。 これで時間の節約ができます。 現在、udevinfoに比べてudevread.pyは少し劣ってしまっているようですが、まだいくつか優れているところもあります。 更新されたudevinfoの情報を参照するにはDSDのudevルール書き方ガイドのリンク先を調べてください。

udevread.pyを使用しない場合: 私は最初から/devでの私のスキャナのデバイスは/dev/sg0であることは知っていました。 デバイス接続時のhotplugデバッグ情報があるなら、tail -f /var/log/syslogも使えます。そうすると次のようなものが表示されます。

Feb 25 09:16:17 decibels default.hotplug[18643]: arguments (scsi_generic) env (OLDPWD=/ DEVPATH=/class/scsi_generic/sg0 ...

そして、DSDの情報を使って、不変の識別情報として最適なものを選択しました。

bash-2.05b# find | grep sg0
./class/scsi_generic/sg0
./class/scsi_generic/sg0/device
./class/scsi_generic/sg0/dev
./cdev/major/sg0

この結果を基に以下を実行します。

bash-2.05b# udevinfo -a -p /sys/class/scsi_generic/sg0

device '/sys/class/scsi_generic/sg0' has major:minor 21:0
(訳注: デバイス'/sys/class/scsi_generic/sg0'のメジャー番号:マイナー番号は、21:0です。)
  looking at class device '/sys/class/scsi_generic/sg0':
(訳注:   クラスデバイス'/sys/class/scsi_generic/sg0'を参照します。)
    SYSFS{dev}="21:0"

follow the class device's "device"
  looking at the device chain at '/sys/devices/platform/host0/0:0:0:0':
(訳注: クラスデバイスの"device"にしたがって、
  '/sys/devices/platform/host0/0:0:0:0'にあるデバイスチェインを参照します。)
    BUS="scsi" <------ これを選択。
    ID="0:0:0:0"
    SYSFS{detach_state}="0"
    SYSFS{type}="6"
    SYSFS{device_blocked}="0"
    SYSFS{queue_depth}="1"
    SYSFS{scsi_level}="3"
    SYSFS{vendor}=" "
    SYSFS{model}="Scanner V6UPL   " <----- これを選択。そうです、名前のところに空白があります。
    SYSFS{rev}="1.00"
    SYSFS{online}="1"

  looking at the device chain at '/sys/devices/platform/host0':
(訳注:   '/sys/devices/platform/host0'にあるデバイスチェインを参照します。)
    BUS=""
    ID="host0"
    SYSFS{detach_state}="0"

  looking at the device chain at '/sys/devices/platform':
(訳注:   '/sys/devices/platform'にあるデバイスチェインを参照します。)
    BUS=""
    ID="platform"
    SYSFS{detach_state}="0"

udevread.pyを使う場合: 私は最初から/devでの私のスキャナのデバイスは/dev/sg0であることは知っていました。 デバイス接続時のhotplugデバッグ情報があるなら、tail -f /var/log/syslogも使えます。そうすると次のようなものが表示されます。

Feb 25 09:16:17 decibels default.hotplug[18643]: arguments (scsi_generic) env (OLDPWD=/ DEVPATH=/class/scsi_generic/sg0 ...

bash-2.05b$ python udevread.py --dev sg0
************ DEVICE NODE *************
-----------------------------
/dev/sg0
P: /class/scsi_generic/sg0
N: sg0
T: c
M: 020660
S:ここにシンボリックを表示します。
O: root
G: disk
F:ここに使用されるルールファイルを表示します。
L: 0
U: 9650

Examining /sys for information on Device
(訳注: デバイスに関する情報のために/sysを調べています。)
looking at class device '/sys/class/scsi_generic/sg0':
(訳注: クラスデバイス'/sys/class/scsi_generic/sg0'を参照します。)
SYSFS{dev}="21:0"

follow the class device's "device"
looking at the device chain at '/sys/devices/platform/host0/0:0:0:0':
(訳注: クラスデバイスの"device"にしたがって、
'/sys/devices/platform/host0/0:0:0:0'にあるデバイスチェインを参照します。)
BUS="scsi" <------ これを選択。
ID="0:0:0:0"
SYSFS{detach_state}="0"
SYSFS{device_blocked}="0"
SYSFS{model}="Scanner V6UPL   " <----- これを選択。そうです、名前のところに空白があります。
SYSFS{online}="1"
SYSFS{queue_depth}="1"
SYSFS{rev}="1.00"
SYSFS{scsi_level}="3"
SYSFS{type}="6"
SYSFS{vendor}=" "

looking at the device chain at '/sys/devices/platform/host0':
(訳注: '/sys/devices/platform/host0'にあるデバイスチェインを参照します。)
BUS=""
ID="host0"
SYSFS{detach_state}="0"

looking at the device chain at '/sys/devices/platform':
(訳注: '/sys/devices/platform'にあるデバイスチェインを参照します。)
BUS=""
ID="platform"
SYSFS{detach_state}="0"

-----------------------------
*********** END DEVICE NODE ***********

結果は似ていますが、udevread.pyは/sysでのパスを探して指定する必要がありません。 さらに、若干多くの情報を提供します。udevinfoで同じものを取得するためには2回使わなければならないでしょう。また、/devにあるすべてのデバイスノードについて同じ出力結果を表示する、--allオプションを使うことができます。

ルールの作成: それでは、私のスキャナ/dev/sg0を/dev/scannerとしても参照するためのルールを作成するのに、DSDのガイドは役に立つかを見てみましょう。

どこにルールを追加すればいいでしょうか? /etc/udev/udev-rules、/etc/udev/rules.d/50-udev.rulesがあります。 50-udev.rulesは、デフォルト設定であり、DSDはこのファイルを編集することは推奨していません。 /etc/udev/udev.rulesは、現在廃止されており使用されておりません。 よって、udevのバージョンを新しいものに更新したなら、削除してもかまいません。 DSDは、ローカルルールには/etc/udev/rules.dに10-local.rulesという新規ファイルを作成するようにと書いています。 したがって、/etc/udev/rules.d10-local.rulesという新規ファイルを作成して、以下のものを追加してください。 (モデル名の最後にある空白を付ける必要がないことを確認しました。)

# Microtek Scanner
BUS="scsi", SYSFS{model}="Scanner V6UPL", NAME="%k", SYMLINK="scanner"

私のXSaneのバックエンドは/etc/sane.dフォルダにあるmicrotek2.confであることを知っていました。 XSaneはscsiデバイスを期待します。それで/dev/scannerを追加しました。 そして、二つのスキャナプログラムを起動しました。現在、両方のプログラムに対し、/dev/sg0か/dev/scannerかのどちらを使うか選択ができます。つまり/dev/scannerも完全に動作しています。

これをすることになんのメリットがあるのか? と思うかもしれませんね。 たしかにこのケースでは、ほとんどありません。主に練習のためです。 ですが、/dev/scannerが/dev/sg0へのシンボリックリンクであることに意味があります。 だけど、このケース以外に、複数のデバイスを所持していて、どれがどのデバイスファイルに対応するかを説明したいかもしれません。 しかし場合によっては、シンボリックはとても役に立つことがあります。 (訳注: だから、シンボリックリンクの説明をします。) 例として以下を見てください。 詳しくはDSDのudevルールの書き方ガイドを参照してください。

DVD: 次に私が抱えていた問題は、CD書き込み/DVD読み込み対応のコンボドライブを使って、DVDやVCDなど...を再生することに関することでした。 DSDは、udevルールの書き方ガイドで、これに関する役に立つ情報を記述しています。 udevは、デフォルトでちゃんと/dev/cdroms/cdrom0シンボリックリンクを作成しますが、おそらく/dev/dvd(私の場合では)は作成しれません。 ですので、dvdまたはvcdなど...を再生できませんでした。 さらに私はscsiエミュレーションを使用しておらず、代わりにhdc=ide-cdを使っています。 そんなわけで、udevルールの書き方ガイドを参照して、/etc/udev/rules.d/10-local.rulesに以下のものを追加しました。

# cdrom/dvd devices
KERNEL="hdc", SYMLINK="dvd"

これは追加で/dev/hdcへの/dev/dvdシンボリックリンクを作成します(再起動は必要なく、ルートでコマンドラインからudevstartを実行するだけでよいということを覚えておいてください)。 よって現在は、2つの/dev/hdcへのシンボリックリンクがあります。

カメラ: デバイスを必要とするカメラと必要のないカメラがあります。 scsiデバイスの一つ(すなわち、/dev/sd#もしくは、/dev/sg#)を使用するカメラなら、DSDのudevルール書き方ガイドを参照してください。 そういう特別なデバイスを必要としないカメラは、いくつかのセットアップだけが必要です。 私のカメラであるKodak DX3215は、gphoto2が必要で、GUIのgtkamかdigikamが使えます。 /sysフォルダに現れるのですが、ルールを作成できるデバイスとしては/sys/classに出現しません。 とにかくどんな試みも無残に失敗し、試行中には決して/devに新しいデバイスが作成されることはありませんでした。 それがUSBバス上にあるように認識されたことを除いて、/sysにはどんなデバイスへの参照も見つかりませんでした。 唯一の問題は、パミッション関係だったので、gtkamとdigikamの両方が、それを解決するのに/etc/hotplug/usb.usermapに少しの作業を必要とします。 そして、どのスクリプトを/etc/hotplug/usbcamとして利用したいかを選んで、usbcamファイルを実行可能にしてください(訳注: xビットを立ててください)。 gtkamは問題なく動作しますが、rootユーザでやっているにもかかわらず、Could not list folders in '/'.(訳注: '/'にあるフォルダを参照できませんでした。)のエラーになります。digikamでは、そのエラーになりません。



Thanks for visiting Decibels Help.







Decibels