パスワードを忘れた? アカウント作成
435013 journal

naruakiの日記: DEVFS 廃止対応

日記 by naruaki
DEVFS 廃止対応
==============
                             2006/08/04
* ----------------------------------------------------------------- *
・はじめに
  Linux 2.6.13 以降は、devfs が廃止(OBSOLETE)となった。
    .confg : CONFIG_DEVFS_FS
        -> File systems
            -> Pseudo filesystems
                -> /dev file system support

・/dev とは
  Unix系オペレーティング・システムでは /dev以下にデバイス・ノードファ
  イルという特別なファイル群をあらかじめ設けておいて、ユーザ空間のア
  プリケーションとカーネルやデバイスドライバとの接続点として利用され
  ている。(歴史的慣例と互換性が理由であることが大きい)
例) open("/dev/stdout")
        # cat /dev/device -- read
        # echo set > /dev/device -- write

慣例と互換性 --- が、欠点もあり、その克服の Linux での実装が devfs
であった。(2.2.x 系 ~ 2.4.x 系)

・udev の登場と、devfs の廃止
  - kernel との連携が面倒である
  - デバイスの動的なコンフィギュレーションに対応
例) USB ポートにデバイスが追加された
  (1) デバイスのドライバ登録
  (2) ユーザから使用可能状態にする。(ex. mount、IP 設定)
  => 最終的にユーザ・ランドが介入せざるをえない。
        ならば、devfs で頑張っても仕方ないですね。
  - 第三の選択
    devfs、udev 機能は使わずに、ストレージ(HDD)に、デバイス・ノード
    ファイルを、「あらかじめ」作成しておく。 (先祖返りな手法)
    ※デバイスが静的(固定)ならば、当手法で問題なし。

・devfs 有/無における相違
(A) devfs 有
  # insmod driver.ko ... /dev/driver を利用可
(B) devfs 無
  # insmod driver.ko & mknod /dev/driver c 2xx 0
※driver __init() 内で、devfs を利用する register APIを使用
    OBSOLETE 後は、当APIが使用不可なので、修正要。
    => kernel include で吸収しているので、当 kernel の include
          指定が必須。

(a) devfs 有
  - /root ファイル・システムに、/dev エントリのみあれば良い
(b) devfs 無
  - /dev 以下にデバイス・ノードファイル(群)を用意しておく必要がある。
>>> #ls /dev ... 何が本当に必要か判断つきますか?
        /dev/ppp : kernel が ppp サポートしていなければ不要
        (sysfs を参考に判断する:/proc/devices)
        ※ sysfs 2.6.x系から実装

  - デバイス・ノードファイル が無いと ...
    o /dev/console : シリアル・コンソールが使用できません
    o /dev/pts : telnet login できません ※ftp などは使用できる
    o /dev/mtd : flash ファイル・システムが使えない

* ----------------------------------------------------------------- *
・対応方法
  - Embedded の強い味方 busybox (http://www.busybox.net/) 1.2.1
  - mdev : /etc/init.d/rcS にて、/sbin/mdev -s
    => sysfs より情報入手し、/dev 以下のデバイス・ノードファイルを
          作成してくれます。
          別途、/etc/mdev.conf による指示も可能。(? 試してません)

<<注意点>>
  - 命名則が異なります。
  ex) devfs /dev/mtdblock/0 --- mdev /dev/mtdblock0
    ある意味、devfs が特殊であった。(先祖返り)

  - sysfs に基づいて、/dev/... を作成する
    => # insmod driver.ko --> /sys/class/driver/dev は作成される
          # mdev -s とすれば、再参照するので、/dev/driver は作成される
          # rmmod driver --> /sys/class/driver/dev は削除される
          # mdev -s としても、/dev/driver はそのまま。
※何か抜けている?
  <<解決策>> -> # echo "/sbin/mdev" > /proc/sys/kernel/hotplug
[.config]
      CONFIG_HOTPLUG=y
[rcS]
        /sbin/mdev -s
        echo "/sbin/mdev" > /proc/sys/kernel/hotplug

  - 些細な変更点
    o /root FS、/dev/console を mknod であらかじめ作成
    o mkdir /dev/pts を実施 (mount -t devpts none /dev/pts は従来通り)
    o /etc/inittab tts/0 -> ttyS0 (Console)
    o auxinfo.c の誤り /dev/mem を潰してしまっていた (ポーティング問題)

・その他 (busybox-1.2.0)
  - 気をつけて config しましょう
    o /bin/sh が無い (とりあえず、ash を選択)
    o ipcalc, long option が使えない
    o symbolic-link の張り方(install.sh オプション相違)
    o cmp、dirname、basename (デフォルトで disable、必要なもの)

  - /dev/ram : CONFIG_BLK_DEV_RAM_COUNT (不要な数を減らす)
  - /sys/class : char-dev :
  - /sys/block : block-dev :
      デバイス・ノードファイル が作成されない場合には、上記にて、
      kernel の認識を確認する。
  - <参考ソース> ~/drivers/net/ppp_generic.c
    o デバイスの登録
    o sysfs への登録など(など ...)

<<添付>>
ユーザランドの差分 (diff -rcN)
409724 journal

naruakiの日記: 「テレビゲームとデジタル科学展」で ENIAC を見よう

日記 by naruaki
話題となっていた展示会に行ってきた。
9月の平日という事もあり、また会場もこじんまりしたものだったので、20分程で駆け抜けてしまった。
様々な家庭用ゲーム機の展示は、どうせなら分解して中身を見せてくれと思ったのは、ヲタクの発想か?

ENIAC のカケラは、電源と USB I/F変換器でも付けて、PC に接続すると、「新しい記憶デバイスが見つかりました。容量は 10bitです」って具合にできないかなと妄想。
※記憶媒体でなく、アキュムレータだから、ちと違うだろうけど。

コア・メモリの展示の前では、お約束:冬月教授 状態でした。

typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...