FreeBSD QandA 1255
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 まで
お知らせください。