FreeBSD QandA 1255

FreeBSD QandA

Q. 3.3-RELEASE を使っています。boot -c で起動して kernel のデバイスド
   ライバの設定を変更したのですが、再起動すると前回の 変更が有効になって
   いないようなのですが、kernel を make し直す以外に設定を変更する方法が
   あるのでしょうか。

A. 3.0-RELEASE から 3.1-RELEASE の間に kernel が a.out 形式から ELF 形
   式に変更されました。これに伴って boot -c による USERCONFIG でのデバイ
   スドライバ設定の変更が kernel に記録されなくなりました。

   /etc/rc には、
   # snapshot any kernel -c changes back to disk here <someday>
   # this has changed with ELF and /kernel.config.
   とかいてあり、いつか、自動で save できるようになるようですが、
   現在はできません。
   次善の手段として以下の手順を行って下さい。

   1. /boot/loader.rc または /boot/boot.conf というファイルが
     あれば、これが読み込まれます。(/boot/loader.rc が、優先されます。)
     (どちらもなければ /boot/loader.rc というファイルを作成しましょう。)

   2. /boot/loader.rc に以下の内容を記述します。
       userconfig_script_load="YES"
     また、読み込まれるファイル名は default では /boot/kernel.conf ですが、
     /boot/defaults/kernel.conf ファイルにて
       userconfig_script_name="/boot/kernel.conf"
     と設定されているだけなので、これを /boot/loader.rc で上書きすればよ
     いでしょう。

     3.1-RELEASE では書き方が異なり、
       load -t userconfig_script /boot/kernel.conf
     となります。

   3. /boot/kernel.conf というファイルに USERCONFIG で変更を行った、
     あるいは、行いたい内容をそのまま記述しておくことでその config が
     次回起動時に読み込まれます。
     install 時に行った UserConfig は、/boot/kernel.conf に save され
     ています。

     ただし、3.1-RELEASE では save されるファイルは /kernel.config です。
     従って、install 時に save された設定をそのまま使うのであれば、
     loader.rc には次のように書きます。
       load -t userconfig_script /kernel.config

   (例)
   enable apm
   disable sio1
   port sb0 0x220
   pnp 1 0 os enable irq0 5 drq0 1 drq1 5
   pnp 1 0 port0 0x220 port1 0x330 port2 0x388
   pnp 1 1 os enable port0 0x200
   pnp 1 2 os enable port0 0x620 port1 0xa20 port2 0xe20
   quit

   また、/sbin/kget を用いて USERCONFIG にて行なった変更を読み出すことが
   できます。
   3.1-RELEASE ではこのコマンドはありませんが、
   /usr/src/release/picobsd/tinyware/kget に source がありますので、これ
   を make して使えばよいでしょう。

   尚、上記の内容は、3.2-RELEASE、3.4-RELEASE についてもあてはまると思わ
   れますが、基本的に 3.3-RELEASE で確認しています。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。