入場者数
kema's web TopWho is kema?電気・回路無線コンピュータ
バイク鉄道関係妙な写真・イラストkema's料理ゲーム関係

上に戻る

カーネル再構築

カーネル再構築


1:カーネルとは

カーネルというのは、ケンタッキーフライドチキンのおじさんOSの核心、その名の通りの「核」です。私がダイアルアップルータを作成しようと思い、あちこちのWEBなり書籍なりを漁ったところ、「まずは不要なドライバ等を削除すると共に必要なオプションを組み込んだカーネルの再構築をしませう」と書いてあったため、その通りに従ってみたのが真相だったりしますが。
カーネルのソース(C言語のファイルです。)は、/usr/src/sys/以下にどどーんと展開してあります。で、設定ファイルは/usr/src/sys/i386/conf/以下にあり、デフォルトでは「GENERIC」「LINT」というファイルがあるはずです。

デフォルトのカーネルは、標準的なオプションを組み込んであるものの、ファイアウォールにするための設定が入っていなかったり、386,486,ノーマルPentium向けのコードなど余計なものが入っているため、まずは再構築をするのが宜しいかと思う次第。

デフォルトでは、「GENERIC」ファイルに書いてあるオプションで作ったカーネルが動いているわけです。一方、「LINT」ってのは設定可能な全てのオプション一覧が載っているファイルです。


2:カーネル設定ファイルのつくりかた

慣例として、カーネルの設定ファイルはマシン名と同じ名前のファイルにして、小文字でなく大文字で名前を付けるらしいです。例えば「GATEWAY」というマシン名にしたいのであれば、
# cd /usr/src/sys/i386/conf
# cp GENERIC GATEWAY
ってな感じで、まずはGENERICファイルをそのままコピーしてしまい、その後GATEWAYファイルを(LINTファイルなどを参照しつつ)編集すればいいと思います。

もちろん、設定を誤るとカーネルコンパイルが通らなかったり、或いは通っても再起動したらカーネルが立ち上がらないという危険性もあります。当然ながら、私も何十回も失敗をしました(苦笑)。しかし、あれこれ試行錯誤して、失敗をしつつ覚えていけば良いんです。失敗を恐れちゃいけません(笑)。
#当然ながら、あれこれいじり倒せるマシンでやってください。業務で稼動中のマシンを、知識がないうちに試行錯誤すると*必ず*ハマります。(経験者は語…もごもご)

さて、まずはGENERICファイルを、マシン名ファイルにコピーできましたでしょうか。(ここでの説明では、「GATEWAY」って名前で進めます)あ、当然rootで作業します。
ではいよいよGATEWAYファイルを編集します。エディタはviでも良いんですが、viは慣れないと使えないので、私のような初心者向けに「ee」というエディタが用意されています。ワタクシはeeでファイルを開きました。
# ee GATEWAY
あとは、必要に応じて項目を追加・削除すればおっけぃ。

2.1:定番の設定項目

どこの環境に持っていっても、変わらず設定する項目があります。例えば、
cpu I686_CPU
options FFS
options FFS_ROOT
pseudo-device loop
とか。当然、私が最初にFreeBSDマシンを組んだ時は、CPUは486を指定しましたが、今時そんな人は僅少だと思います。もちろん、ノーマルPentiumを使う時などは586を選択します。逆に、ほとんどありえない設定である386と486を削り、586と686を残す方法が一般的かもしれません。

2.2:環境に応じての設定項目

実はこっちが重要です。が、それと共に、その人が使う環境に左右される設定項目なので、これこれこーしなさい、とは一概に言えません。詳しくは、私なんかよりももっともっと詳しく懇切丁寧に書いてあるページがたくさんありますのでそちらを見て頂いて(手抜き!!)、ワタクシの環境下で設定した項目を幾つか説明しておきます。

  1. ISAのNICを使うためには、まずMS-DOSやWindows環境で、製造元より配布されている設定ツールでアドレス・割り込みを固定したのち、その設定にあわせてカーネルを作る。
  2. ファイアウォールやNATの設定は、仕組みと設定方法が分かれば複雑な設定が可能ですが、分からないうちはpppのNAT機能にお任せし、ファイアウォールも全て素通しにしておくといいかも。慣れてきたら少しずつ設定を変えてみる。
  3. 私の愛用しているMebius/PC-SX1-H1では、内臓のNIC(RTL8139)がうまく使えないという問題が発生しますが、これはNICが悪いわけではなくBIOSのせい。options  PCI_ENABLE_IO_MODESを設定すればうまく動作する。

って…そんな事書かれてもしょーがないって?まあ、カーネル再構築は慣れてきてからでも良いかもしれません(汗)。


3:カーネルのコンパイル

これは決まった手順があります。GATEWAYファイルを編集したのち、
# config GATEWAY
# cd ../../compile/GATEWAY
# make clean
# make depend
# make
# make install
で、あとは再起動すればおっけぃ。Linuxみたいに、LILOを書き換えて云々とか、そういうめんどくさいものはありません。楽チンですね?[Y]/y

もし、万一再構築したあとのカーネルが立ち上がらなかった場合は、元のカーネルで立ち上げることが可能です。方法は、

  • ブート時に10秒待つ場面で、スペースキーか何かを押して起動を止める
  • キーボードから、「unload kernel」と入力
  • 同じく、「load kernel.old」と入力
  • 最後に「boot」と入力
これで、一個前のカーネルからブートできます。

さてさて、カーネルの再構築の方法は分かりましたでしょうか。まとめると、

  1. /usr/src/sys/i386/conf/[ファイル名] の設定ファイルを編集する
  2. # config [ファイル名] とコマンド実行
  3. # cd ../../compile/[ファイル名]
  4. # make clean
  5. # make depend
  6. # make
  7. # make install
  8. あとはリブートすれば新カーネルで立ち上がる
といった手順です。はい、それでは各自、それぞれ設定を変えて30回カーネルを作り直してー。ハジメッ!


ひとつうえにもどる。