
	    Optical disk driver for FreeBSD 4.1.1-RELEASE
	    =============================================


                                                        Oct. 21, 2000
                                                           秋山  俊輔
                                                  akiyama@FreeBSD.org


概要
----
  皆さん、大変お待たせしました。od-driver が帰ってきました。

  FreeBSD 3.0-RELEASE より、従来の Julian SCSI ドライバが SCSI CAM ド
  ライバに変更され、これとともに od(4) は da(4) に一本化され、サポート
  されなくなりました。作者としては、たいへん残念だったのですが、諸々の
  事情により、開発を継続することを断念していました。しかしながら、
  da(4) と一本化されたことにより、disklabel や newfs の誤操作を繰り返
  すこと等を経験することになり、ことここに至って、改めて od(4) の開発
  を再開することにしたのでした。

  このような経緯を経て開発された本ドライバ・セットは、FreeBSD
  4.1.1-RELEASE において、光ディスクの特性に応じたドライバを用意し、同リ
  リースにおけるいくつかのバグの修正等を行ったものとなっています。

    * 光ディスク・ドライブを od(4) として認識し使用できます。
    * DVD-RAM ドライブ (松下 LF-D100/LF-D200, 東芝 SD-W1101/SD-W1111,
      CREATIVE RAM1216S) が使用できます。また、これらのドライブは、
      od(4) および cd(4) として使用できます。
    * UFS において、旧バージョンのシステムで作成したメディアとの互換性
      をとることができます。また、これは、mount コマンドのコマンド・ラ
      イン・オプションで指定するるように変更されました。
    * 従来の od-driver では、コンパイル・オプションとなっていた動作状
      態の変更のいくつかを /sbin/sysctl コマンドで行うように変更されま
      した。

  なお、本ドライバ・セットの一次配布先は、

    ftp://daemon.jp.freebsd.org/pub/FreeBSD-jp/OD/

  となっています。また、ここには過去のリリースやユーティリティも置いて
  あります。


変更履歴
--------
  od-driver-4.1R からの変更点は、次の通りです。

    * 松下の DVD-RAM ドライブ LF-D200 が使用できるようになりました。
    * 4.7GB DVD-RAM メディア用の disktab エントリを追加しました。

  od-driver-3.5R からの変更点は、次の通りです。

    * 古い UFS メディアとの互換性をとるためのカーネル・オプションは、
      mount コマンドのオプションを指定することで行うように変更されまし
      た。

  od-driver-3.4R からの変更点は、次の通りです。

    * MSDOS-FS のパッチが不要になりました。

  od-driver-3.3R からの変更点は、次の通りです。

    * 富士通の GIGAMO ドライブ（MCD3130SS）の一部で 1.3GB メディアが使
      用できなかった点を修正。
    * MBR の中のリザーブ領域を使うブート・セレクタを使用していると、カー
      ネル起動時にルート・ファイル・システムをマウントできない点を修正。
    * MSDOS-FS を更新。
    * /sbin/newfs_msdos コマンドの不具合を修正。
    * 東芝 DVD-RAM ドライブ SD-W1111 が使用できるようになりました。


動作環境
--------
  このドライバ・セットは、FreeBSD 4.1.1-RELEASE 上で動作を確認していま
  す。2048 バイト／セクタのメディアでの動作も確認済みです。

  開発機の環境は、以下の通りです。

                 CPU : AMD K6-III 450MHz
                  MB : ASUS P5A-B WOA
              Memory : 256 MB
        SCSI Adapter : Adaptec AHA-2940UW
            MO Drive : 富士通 M2512A（3.5 インチ内蔵型）
                     : 富士通 M2513A（3.5 インチ内蔵型）
       DVD-RAM Drive : 松下 LF-D100 （内蔵型）

  MO ドライブは、光メモリ・デバイスのモード（FreeBSD ならば、システム
  立ち上げ時のデバイス・プローブで、"Removable Optical" デバイスと表示
  されるモード）で使用します。


制限事項
--------
  βテストを行った過程等で、以下のような不具合が発見されています。

    * バッド・セクタに対して書き込みを行うと、カーネルがフリーズする。

      カーネル内での書き込み時のエラーに対する処理が不正のようです。
      現在のところ、有効な対策をみつけることができていません。

    * ports の mei で、メディアの eject を行うことができない。

      これは、mei が CAM 対応になっていないためです。メディアの eject 
      を行う場合は、camcontrol コマンドを使用するか、拙作の eject コマ
      ンドを使用してください。
      なお、このコマンドは既に ports 化してあります。
      ports/sysutils/eject を参照してください。

    * DVD-RAM ドライブにおける動作に関して制限がある。

      DVD-RAM ドライブで DVD-ROM ディスクを読み出す場合、ISO-9660 形式
      が共に記録されているものは読み出せますが、UDF 形式でのみ記録され
      ているものは、ファイル・システムが対応していませんので、読み出す
      ことはできません。

      また、DVD-RAM ドライブは、od と cd の各デバイスとしてそれぞれ使
      用することができますが、同時にデバイスのアクセスを行った場合の動
      作は、保証されません。メディアを、同時に od(4) と cd(4) でマウン
      トするようなことは行わないでください。


内容
----
  このドライバ・セットには以下の内容のファイルが納められています。

        README.od-J             このファイル
        README.od               このファイルの英語版
        kernel.diff             カーネルに当てるパッチ
        MAKEDEV.diff            MAKEDEV に当てるパッチ
        mount.diff              mount コマンドに当てるパッチ
        newfs_msdos.diff        newfs_msdos コマンドに当てるパッチ
        release.diff            sysinstall 関連パッチ
        disktab.diff            disktab に当てるパッチ
                                （光ディスク用サンプル disktab エントリ）
        extract.sh              必要なソース・ファイルを抜き出すシェル・
                                スクリプト
        tested.txt              βテスタの動作環境リスト
        alpha/                  alpha アーキテクチャ用に追加で当てるパッ
                                チ

  ドライバ関連部分は、パッチ・ファイルの形で用意されています。使用方法
  は後述します。

  さらに、伊藤 暢浩（いとう のぶひろ）さん 
  <bobson@egg.ics.nitech.ac.jp> による MO ドライブ動作リストを同封して
  います。

        MO-REPORT/MO-List20000921.txt
                                動作確認されている光磁気ディスクドライ
                                ブの一覧
        MO-REPORT/result-20000921.txt
                                光磁気ディスクの動作確認報告


パッチの使用方法
----------------
  このドライバ・セットは以下のようにして使用します。

  １．パッチを当てるソースを用意する

    このドライバ・セットを使用するには、カーネル他のソース・ファイルが
    必要になります。ディストリビューション・セットの中から、最低限カー
    ネル（ssys.??）／mount コマンド（sbin.??）のソースを展開してくださ
    い。
    必要なソース・ファイルは以下の通りとなります。

    カーネルおよび mount コマンドを再構築する場合：
        sys/ 以下のファイル        （ssys.??）
        sbin/Makefile              （ssbin.??）
        sbin/Makefile.inc          （ssbin.??）
        sbin/mount/ 以下のファイル （ssbin.??）

    newfs_msdos のバグ修正版をインストールする場合：
        sbin/Makefile                    （ssbin.??）
        sbin/Makefile.inc                （ssbin.??）
        sbin/newfs_msdos/ 以下のファイル （ssbin.??）

    sysinstall の再構築しインストールを行う場合：
        release/ 以下のファイル           （srelease.??）
        lib/libdisk/ 以下のファイル       （slib.??）
        gnu/lib/libdialog/ 以下のファイル （sgnu.??）
        sbin/disklabel/  以下のファイル   （ssbin.??）
        usr.bin/cksum/  以下のファイル    （subin.??）

    添付の extract.sh を使用すると、必要なファイルを CD-ROM 等から抜き
    出すことができます。

        # sh extract.sh

    として使用します。スクリプトからの質問に対して、適当なディレクトリ
    名を入力します。なお、Enter キーのみ押すと、表示されているデフォル
    トのディレクトリが使用されます。

    なお、このパッチ・セットも適当なディレクトリに展開しておきます。

  ２．MAKEDEV へのパッチ

    /dev ディレクトリにある MAKEDEV を od(4) に対応したものにするため、
    パッチを当てます。

    ex.
      # cd /dev
      # patch < /somewhere/od-driver-4.1.1R/MAKEDEV.diff

  ３．disktab へのパッチ

    /etc/disktab にパッチを当てて、光ディスク用の disktab エントリを追
    加します。

    ex.
      # cd /etc
      # patch < /somewhere/od-driver-4.1.1R/disktab.diff

  ４．カーネル・ソース・ファイルにパッチを当てる

    /usr/src ディレクトリの下等で、カーネル用パッチ（kernel.diff）を当
    ててください。patch コマンドには、"-p1" オプションが必要です。

    ex.
      # cd /usr/src
      # patch -p1 < /somewhere/od-driver-4.1.1R/kernel.diff

  ５．インクルード・ファイルの更新

    mount コマンドを再作成するために、パッチ済みのファイルをインストー
    ルします。

    ex.
      # cd /usr/src/sys/sys
      # install -c -m 444 mount.h /usr/include/sys

  ６．mount コマンドを再作成する

    mount コマンドのソースにパッチをあてた後、コマンドを再作成し、これ
    をインストールします。パッチ（mount.diff）は、/usr/src/sbin/mount 
    ディレクトリで当ててください。

    ex.
      # cd /usr/src/sbin/mount
      # patch < /somewhere/od-driver-4.1.1R/mount.diff
      # make obj
      # make depend
      # make
      # make install

  ７．sysinstall の再作成／インストール

    sysinstall コマンドを再作成／インストールを行わない方は、次のステッ
    プ８に進んでください。

    (1) リリース関連パッチを当てる

      ソース・ファイルにリリース関連パッチを当てます。
      patch コマンドには、"-p1" オプションが必要です。

      ex.
        # cd /usr/src
        # patch -p1 < /somewhere/od-driver-4.1.1R/release.diff

    (2) ライブラリ（libdisk）の再作成／インストール

      libdisk を作り直して、これをインストールします。

      ex.
        # cd /usr/src/lib/libdisk
        # make obj
        # make depend
        # make
        # make install

    (3) sysinstall コマンドの再作成／インストール

      sysinstall コマンドを再作成し、これをインストールします。

      ex.
        # cd /usr/src/release/sysinstall
        # make obj
        # make depend
        # make
        # make install

      これで、sysinstall コマンドで、od(4) を扱うことができるようにな
      ります。

  ８．/sbin/newfs_msdos の再作成／インストール

    このパッチ・セットがリリースされた時点において、全てのブランチの 
    newfs_msdos コマンドは、512 バイト／セクタ以外のメディア上に正しく
    ファイル・システムを構築することができない、という不具合があります。
    本パッチ・セットには、この不具合を修正するためのパッチが含まれてい
    ますが、newfs_msdos を再作成／インストールしないのであれば、ステッ
    プ９へ進んでください。

      (1) パッチを当てる

        ソース・ファイルにパッチを当てます。

        ex.
          # cd /usr/src/sbin/newfs_msdos
          # patch < /somewhere/od-driver-4.1.1R/newfs_msdos.diff

      (2) コマンドを再作成し、インストールする

        パッチ後のソースから newfs_msdos を再作成し、これをインストー
        ルします。

        ex.
          # make obj
          # make depend
          # make
          # make install

  ９．光ディスク対応のカーネルを作成／インストール

    光ディスクのデバイス名は od です。カーネル・コンフィギュレーション・
    ファイルの中に、

        device  od

    を追加して、カーネルを作成してください。（GENERIC にはすでに記述し
    てあります）
    なお、本ドライバにてサポートされている DVD-RAM ドライブを cd デバ
    イスとしても認識させる場合は、さらに、

        device  cd

    を追加します。（これも GENERIC にはすでに記述してあります）
    なお、カーネル・コンパイル時に設定可能なオプションに関しては、次の
    セクションで説明を行います。

    新しいカーネルが作成できたら、これをインストールします。

    ex. ［コンフィグレーション・ファイルを GENERIC からコピーして使う］
      # cd /usr/src/sys/i386/conf
      # cp GENERIC ODDRIVER
      # vi ODDRIVER
      # config ODDRIVER
      # cd ../../compile/ODDRIVER
      # make depend
      # make
      # make install

  １０．デバイス・ファイルを作成する

    MAKEDEV スクリプトで、必要となる光ディスクのデバイス・ファイルを再
    作成します。

    この作業は、＊＊＊ 必ず ＊＊＊ 行ってください。

    この作業を行わないと、od(4) は正しく動作しません。
    また、スライス対応のデバイス・ファイル（od*s*）も必要ならば、再度
    作っておいてください。

    ex. ［スライス４に対応するデバイス・ファイルを再作成する］
      # cd /dev
      # sh MAKEDEV od0 od0s4a

    なお、光ディスクが da(4) から od(4) として認識されるようになること
    で、da(4) のデバイス・シーケンスがずれるケースがあると思われます。
    この場合は、該当する da(4) のデバイス・ファイルの再作成作業や 
    /etc/fstab の修正等の作業が発生しますので、注意してください。

  １１．システムをリブートする

    システムをリブートします。
    これで、次にシステムが立ち上がったときから、光ディスクを

        /dev/od*[a-h]   /dev/rod*[a-h]
        /dev/od*        /dev/rod*
        /dev/od*s[1-4]  /dev/od*s[1-4][a-h]
        /dev/rod*s[1-4] /dev/rod*s[1-4][a-h]

    として使用することができるようになります。デバイス名が異なる他は
    ほぼ da(4) デバイスとほとんど同じように使うことができます。


光ディスク・ドライバのカーネル・コンフィグレーション
----------------------------------------------------
  本バージョンのドライバは、カーネル MIB スタイル・パラメータの設定に
  よりその動作を変更することができます。また、一部は、コマンドのオプショ
  ンによる指定によって、設定を行います。

  １．カーネル MIB スタイル・パラメータを使用するもの

    カーネル MIB スタイル・パラメータは、/sbin/sysctl コマンドを使用し
    て参照／設定を行います。本ドライバは、この方法によって、以下のパラ
    メータの設定を行うことで、その動作を変更することができるようになっ
    ています。
    なお、これらのパラメータは、/etc/rc.sysctl 等で設定すると良いでしょ
    う。

    (1) kern.cam.od.auto_turnoff

        タイプ：integer
        初期値：0

        0 以外の値をセットすると、光ディスク・メディアをマウントしてい
        ない場合は、ドライブのスピンドル・モータの動作を停止します。

        ただし、このオプションを指定すると、メディアをマウントしていな
        い場合に、CAM passthrough device (/dev/pass*) を使用しようとし
        ても、動作しないドライブがあるので注意してください。

    (2) kern.cam.od.wait_ready_count

        タイプ：integer
        初期値：0

        光ディスク・デバイスをオープンする際に、ドライブがレディ状態に
        なっているかどうかのチェックを行う回数を設定します。チェックの
        間隔は、現在１秒おきとなっています。

        ただし、このオプションを指定すると、本当にドライブがレディ状態
        でない場合（メディアが入っていないなど）、エラーとなるまでに時
        間を要するようになるので注意が必要です。

  ２．コマンドのオプションで設定を行うもの

    以下は、コマンドのオプション指定でカーネルの動作が指定可能なもので
    す。設定の変更には、以前のバージョンのものと異なりカーネルの再生成／
    インストールは必要ありません。

    (1) mount コマンドのオプション：-o compat

        UFS でフォーマットされたメディアにおいて、過去のバージョンとの
        互換性を持たせます。また、このオプションを使用することで、
        NetBSD/i386 システムで作成したメディアとの互換性もとることがで
        きます。

        このオプション場合は、mount コマンドのオプション指定にて、-o
        compat を指定した場合に有効となります。また、このオプションは、
        mount コマンドの他のオプションと組み合わせて使用することができ
        ます。

        背景：
        FreeBSD バージョン２系列から、バージョン３系列へ移行する段階で、
        メディアのセクタ長が 512 バイト以外のものをサポートするため、
        newfs コマンドに修正が行われました。このため、バージョン３系列
        のシステムでは、バージョン２系列で newfs を行ったメディアの読
        み書きを行うことができません。
        mount コマンドで、このオプションを指定すると、バージョン２系列
        で newfs を行ったメディアに対しても読み書きを行うことができる
        ようになります。また、副次的作用により、NetBSD/i386 システムで
        作成したメディアに対しても互換性が生まれます。


光ディスクの使用方法
--------------------
  本ドライバ・セットを使用することで、光ディスクを（少なくとも）以下の
  ファイル・システムとして使用することが可能になります。

    a. MSDOS ファイル・システム（スーパー・フロッピー・フォーマット）
    b. MSDOS ファイル・システム（HD 互換フォーマット）
    c. UNIX ファイル・システム（UFS）

  a. および b. は、mount コマンドで "-t msdos" オプションを指定するか、
  /sbin/mount_msdos コマンドを使用することで、利用可能となります。
  なお、MSDOS 形式のファイル・システムは、/sbin/newfs_msdos コマンドを
  使用して作成することができます。

  c. の UFS として使用する場合、ディスク・ラベルの書き込み、および、ファ
  イル・システムの構築が必要となります。
  これには、（パッチを当てて再構成した）/stand/sysinstall を使用して一
  連の作業を行うことができます。
  これが、光ディスク上にファイル・システムを構築する、最も簡単な方法で
  しょう。

  ここでは、手動で、光ディスク上に UFS を作成して、使用する方法につい
  て記述します。

  現行バージョンの FreeBSD において UFS は、

    (1) 全てのディスク領域を使う
    (2) ディスク上のスライス（いわゆる物理パーティション）の領域を使う

  方法で構築することができます。

  (1) の場合、ディスク・ラベルの書き込み／ファイル・システムの構築を行
  うことで、通常のディスクと同じようにマウントして使用可能となります。

    1. disktab エントリの準備

      パッチを当てた後の /etc/disktab を参照してください。サンプルでは、
      １メディア／１パーティションですが、必要なら、さらに細かくパーティ
      ションを定義します。

    2. ディスク・ラベルの書き込み

      用意した disktab エントリを使って、ディスク・ラベルを書き込みま
      す。

      ex.
        # disklabel -r -w od0 mo128

    3. ファイル・システムの構築

      newfs コマンドでファイル・システムを作成します。

      ex.
        # newfs /dev/rod0a

        or
        # newfs -t 64 -u 32 /dev/rod0a
        or
        # newfs -t 0 -u 0 /dev/rod0a

  (2) の場合は、まずスライスの確保を行ってから、ディスク・ラベルの書き
  込み／ファイル・システムの構築を行います。スライスの確保は、fdisk コ
  マンドを使用します。

    1. スライスの確保

      fdisk コマンドを使って、FreeBSD 用のスライスを確保します。

      ex.
        # fdisk -i /dev/rod0
        or
        # fdisk -u /dev/rod0

    2. disktab エントリの準備

      確保した FreeBSD 用スライスのサイズに応じた disktab エントリを作
      成します。なお、各 UFS パーティションのオフセットは、FreeBSD 用
      スライス内のオフセット値を使用します。
      disktab エントリのパラメータは、fdisk コマンドで書き込まれた MBR 
      の内容と矛盾してはいけません。矛盾したパラメータがあると、ディス
      ク・ラベルが書き込めません。

    3. ディスク・ラベルの書き込み

      用意した disktab エントリを使って、ディスク・ラベルを書き込みま
      す。

      ex.
        # disklabel -r -w od0 XXXXX

    4. ファイル・システムの構築

      newfs コマンドで、ファイル・システムを構築します。
      使用するデバイスは、確保したスライスに対応したデバイスを使用しま
      す。

      ex.
        # newfs /dev/rod0s1a

        or
        # newfs -t 64 -u 32 /dev/rod0s1a
        or
        # newfs -t 0 -u 0 /dev/rod0s1a


デバイス・ファイルと用途
------------------------
  /dev/MAKEDEV スクリプトで作成するデバイス・ファイルには以下のものが
  あります。

        /dev/od*[a-h]   /dev/rod*[a-h]
        /dev/od*        /dev/rod*
        /dev/od*s[1-4]  /dev/od*s[1-4][a-h]
        /dev/rod*s[1-4] /dev/rod*s[1-4][a-h]

  これらのデバイス・ファイルは、それぞれ用途によって使い分けます。
  以下、簡単にまとめておきます。

      ┌───────────┬────────────────────┐
      │  デバイス・ファイル  │             用          途             │
      ┝━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━┥
      │/dev/od*              │ディスク全体のアクセスに使用します。    │
      │                      │スーパー・フロッピー・フォーマットの MO │
      │                      │をマウントする場合などは、このデバイス・│
      │                      │ファイルを指定します。                  │
      │                      │MBR の書き込みなども、このデバイスを使う│
      │                      │ようです。                              │
      ├───────────┼────────────────────┤
      │/dev/od*[a-h]         │UFS の各パーティションに対応する。      │
      │                      │ディスクがスライス分割されている場合は、│
      │                      │最初に現れた FreeBSD スライスにマップさ │
      │                      │れます。                                │
      ├───────────┼────────────────────┤
      │/dev/od*s[1-4]        │各スライス（物理パーティション）に対し  │
      │                      │てのアクセスに使用します。HD 互換フォー │
      │                      │マットの MO の DOS 領域のマウントには、 │
      │                      │このデバイス・ファイルを指定します。    │
      ├───────────┼────────────────────┤
      │/dev/od*s[1-4][a-h]　 │スライス内に設けられたパーティションに  │
      │                      │アクセスする場合は、これらのデバイス・  │
      │                      │ファイルを使用します。                  │
      └───────────┴────────────────────┘


ＳＰＥＣＩＡＬ  ＴＨＡＮＫＳ
----------------------------
  βテスタ用 ML の作成／運用をおこなっていただきました：

    たかのゆ〜じ さん   <takachan@running-dog.net>

  od-driver パッチセットのβテストを行ってくださいました：

    森田 昭夫 さん              <amorita@meadow.scphys.kyoto-u.ac.jp>
    たかの ゆ〜じ さん          <takachan@running-dog.net>
    YABU (Shigeru Kasahara)/笠原 さん
                                <bush@jrtokyohosp.gr.jp>
    下川 俊彦 さん              <toshi@tea.forus.or.jp>
    SETA -sheta- Takuji さん    <sheta@kk.iij4u.or.jp>
    井上 敬介 さん              <keisuke@csl.sony.co.jp>
    許  勝益 さん               <hokun@honet.org>
    Sugiura Takakazu さん       <sugiurat@mwnet.or.jp>
    山崎 暢 さん                <sph40089@se.ritsumei.ac.jp>
    かわぐち ひろみち さん      <guzi@guzi.imasy.or.jp>
    大橋 健 さん                <ohashi@mickey.ai.kyutech.ac.jp>
    高宗 和暁 さん              <takamune@avrl.mei.co.jp>
    谷口 恭弘 さん              <taniguti@krl.toshiba.co.jp>
    斉藤 哲也 さん              <tetuya@rite.or.jp>

  FreeBSD(98) に関するテストに協力していただきました：

    小金丸 信幸 さん    <kogane@koganemaru.co.jp>

  MSDOSFS に関するパッチに関して協力していただきました：

    柴田 千春 さん      <chi@bd.mbn.or.jp>

  MO-REPORT を頂きました：

    伊藤 暢浩 さん      <bobson@phaser.elcom.nitech.ac.jp>

  頂いたパッチは、今も生き続けています：

    今田 宏司 さん

  松下 DVD-RAM ドライブ LF-D200 のテストに強力していただきました：

    武藤 武士 さん      <mutoh@bovine.info.nara-k.ac.jp>

  皆さん、ありがとうございました。


その他
------
    バグ・フィックスや機能拡張などがあれば、ぜひ私の方にフィードバック
  をお願いします。
  なお、他の光ディスクの disktab エントリも募集しています。


$Id: README.od-J,v 4.3 2000/10/21 11:27:45 akiyama Exp $
