1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
9 <link rel="stylesheet" href="../stylesheets/lfs.css" type="text/css" />
10 <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
11 <link rel="stylesheet" href="../stylesheets/lfs-print.css" type=
12 "text/css" media="print" />
14 <body class="lfs" id="lfs-6.8">
15 <div class="navheader">
17 Linux From Scratch - Version 6.8
24 <a accesskey="p" href="fstab.html" title=
25 "/etc/fstab ファイルの生成">前のページ</a>
31 <a accesskey="n" href="grub.html" title=
32 "GRUB を用いたブートプロセスの設定">次のページ</a>
38 <a accesskey="u" href="chapter08.html" title=
39 "第8章 LFS システムのブート設定">上に戻る</a>
42 <a accesskey="h" href="../index.html" title=
43 "Linux From Scratch - Version 6.8">ホーム</a>
47 <div class="wrap" lang="ja" xml:lang="ja">
49 <a id="ch-bootable-kernel" name="ch-bootable-kernel"></a>8.3.
52 <div class="package" lang="ja" xml:lang="ja">
54 Linux パッケージは Linux カーネルを提供します。
56 <div class="segmentedlist">
57 <div class="seglistitem">
59 <strong class="segtitle">概算ビルド時間:</strong> <span class=
60 "segbody">1.0 - 5.0 SBU</span>
63 <strong class="segtitle">必要ディスク容量:</strong> <span class=
64 "segbody">540 - 800 MB</span>
69 <div class="installation" lang="ja" xml:lang="ja">
74 カーネルの構築は、カーネルの設定、コンパイル、インストールの順に行っていきます。
75 本書が行っているカーネル設定の方法以外については、カーネルソースツリー内にある <code class=
76 "filename">README</code> ファイルを参照してください。
79 コンパイルするための準備として以下のコマンドを実行します。
81 <pre class="userinput">
82 <kbd class="command">make mrproper</kbd>
85 これによりカーネルソースが完全にクリーンなものになります。
86 カーネル開発チームは、カーネルコンパイルするなら、そのたびにこれを実行することを推奨しています。 tar
87 コマンドにより伸張しただけのソースではクリーンなものにはなりません。
90 メニュー形式のインターフェースによりカーネルを設定します。 カーネルの設定方法に関する一般的な情報が <a class="ulink"
92 "http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt">
93 http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt</a>
94 にあるので参照してください。 BLFS では LFS
95 が取り扱わない各種パッケージに対して、必要となるカーネル設定項目を説明しています。 <a class="ulink" href=
96 "http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index">
97 http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index</a>
100 <pre class="userinput">
101 <kbd class="command">make LANG=<em class=
102 "replaceable"><code><host_LANG_value></code></em> LC_ALL= menuconfig</kbd>
104 <div class="variablelist">
106 <b>make パラメータの意味:</b>
110 <span class="term"><em class=
111 "parameter"><code>LANG=<host_LANG_value>
112 LC_ALL=</code></em></span>
116 これはホストのロケール設定を指示するものです。 この設定は UTF-8 での表示設定がされたテキストコンソールにて、
117 menuconfig の ncurses による行表示を適切に行うために必要となります。
121 "replaceable"><code><host_LANG_value></code></em>
122 の部分は、ホストの <code class="envar">$LANG</code> 変数の値に置き換えてください。
123 ホストにてその値が設定されていない場合は <code class="envar">$LC_ALL</code> あるいは
124 <code class="envar">$LC_CTYPE</code> の値を設定してください。
130 上のコマンドではなく、状況によっては <span class="command"><strong>make
131 oldconfig</strong></span> を実行することが適当な場合もあります。 詳細についてはカーネルソース内の
132 <code class="filename">README</code> ファイルを参照してください。
135 カーネル設定は行わずに、ホストシステムにあるカーネル設定ファイル <code class=
136 "filename">.config</code> をコピーして利用することもできます。 そのファイルが存在すればの話です。
137 その場合は <code class="filename">linux-2.6.37</code>
138 ディレクトリにそのファイルをコピーしてください。 もっともこのやり方はお勧めしません。
139 設定項目をメニューから探し出して、カーネル設定を一から行っていくことが望ましいことです。
142 カーネルイメージとモジュールをコンパイルします。
144 <pre class="userinput">
145 <kbd class="command">make</kbd>
148 カーネルモジュールを利用する場合 <code class="filename">/etc/modprobe.d</code>
149 ディレクトリ内での設定を必要とします。 モジュールやカーネル設定に関する情報は <a class="xref" href=
150 "../chapter07/udev.html" title=
151 "7.9. LFS システムにおけるデバイスとモジュールの扱い">7.9.「LFS
152 システムにおけるデバイスとモジュールの扱い」</a> や <code class=
153 "filename">linux-2.6.37/Documentation</code>
154 ディレクトリにあるカーネルドキュメントを参照してください。 また <code class=
155 "filename">modprobe.conf(5)</code> も有用です。
158 カーネル設定においてモジュールを利用することにした場合、モジュールをインストールします。
160 <pre class="userinput">
161 <kbd class="command">make modules_install</kbd>
164 カーネルのコンパイルが終わったら、インストールの完了に向けてあと少し作業を行います。 <code class=
165 "filename">/boot</code> ディレクトリにいくつかのファイルをコピーします。
168 カーネルイメージへのパスは、利用しているプラットフォームによってさまざまです。 そのファイル名は、好みにより自由に変更して構いません。
169 ただし <span class="emphasis"><em>vmlinux</em></span> という語は必ず含めてください。
170 これにより、次節で説明するブートプロセスを自動的に設定するために必要なことです。 以下のコマンドは x86
173 <pre class="userinput">
175 "command">cp -v arch/x86/boot/bzImage /boot/vmlinux-2.6.37-lfs-6.8</kbd>
178 <code class="filename">System.map</code> はカーネルに対するシンボルファイルです。
179 このファイルはカーネル API の各関数のエントリポイントをマッピングしています。
180 同様に実行中のカーネルのデータ構成のアドレスを保持します。
181 このファイルは、カーネルに問題があった場合にその状況を調べる手段として利用できます。
182 マップファイルをインストールするには以下を実行します。
184 <pre class="userinput">
185 <kbd class="command">cp -v System.map /boot/System.map-2.6.37</kbd>
188 カーネル設定ファイル <code class="filename">.config</code> は、上で実行した
189 <span class="command"><strong>make menuconfig</strong></span>
190 によって生成されます。 このファイル内には、今コンパイルしたカーネルの設定項目の情報がすべて保持されています。
191 将来このファイルを参照する必要が出てくるかもしれないため、このファイルを保存しておきます。
193 <pre class="userinput">
194 <kbd class="command">cp -v .config /boot/config-2.6.37</kbd>
197 Linux カーネルのドキュメントをインストールします。
199 <pre class="userinput">
200 <kbd class="command">install -d /usr/share/doc/linux-2.6.37
201 cp -r Documentation/* /usr/share/doc/linux-2.6.37</kbd>
204 カーネルのソースディレクトリは所有者が <span class="emphasis"><em>root</em></span>
205 ユーザーになっていません。 我々は chroot 環境内の <span class=
206 "emphasis"><em>root</em></span>
207 ユーザーとなってパッケージを展開してきましたが、展開されたファイル類はパッケージ開発者が用いていたユーザー ID、グループ ID
208 が適用されています。 このことは普通はあまり問題になりません。
209 というのもパッケージをインストールした後のソースファイルは、たいていは削除するからです。 一方 Linux
210 のソースファイルは、削除せずに保持しておくことがよく行われます。
211 このことがあるため開発者の用いたユーザーIDが、インストールしたマシン内の誰かの ID に割り当たった状態となりえます。
212 その人はカーネルソースを自由に書き換えてしまう権限を持つことになるわけです。
215 カーネルのソース・ファイルを保持しておくつもりなら <code class=
216 "filename">linux-2.6.37</code> ディレクトリにおいて <span class=
217 "command"><strong>chown -R 0:0</strong></span> を実行しておいてください。
218 これによりそのディレクトリの所有者は <span class="emphasis"><em>root</em></span>
221 <div class="admon warning">
222 <img alt="[警告]" src="../images/warning.png" />
227 カーネルを説明する書の中には、カーネルのソースディレクトリに対してシンボリックリンク <code class=
228 "filename">/usr/src/linux</code> の生成を勧めているものがあります。 これはカーネル 2.6
229 系以前におけるものであり LFS システム上では生成<span class=
230 "emphasis"><em>してはなりません</em></span> 。 ベースとなる LFS
231 システムを構築し、そこに新たなパッケージを追加していこうとした際に、そのことが問題となるからです。
234 <div class="admon warning">
235 <img alt="[警告]" src="../images/warning.png" />
240 さらに <code class="filename">include</code>
241 ディレクトリにあるヘッダファイルは、<span class="emphasis"><em>必ず</em></span> Glibc
242 のコンパイルによって得られるものでなければならず、つまりは Linux カーネルの tarball
243 によって提供されるものでなければなりません。 したがってカーネルヘッダによって上書きされてしまうのは避けなければなりません。
247 <div class="configuration" lang="ja" xml:lang="ja">
249 <a id="conf-modprobe" name="conf-modprobe"></a>8.3.2. Linux
253 USB ドライバをモジュールとして構築した場合は <code class=
254 "filename">/etc/modprobe.d/usb.conf</code> ファイルを生成する必要があります。 USB
255 ドライバには ehci_hcd、ohci_hcd、uhci_hcd があります。 これらのロード順は正しく行う必要があります。
256 ehci_hcd は ohci_hcd や uhci_hcd よりも先にロードしなければなりません。
257 これを行わないとブート時に警告メッセージが出力されます。
260 以下のコマンドを実行して <code class="filename">/etc/modprobe.d/usb.conf</code>
263 <pre class="userinput">
264 <kbd class="command">install -v -m755 -d /etc/modprobe.d
265 cat > /etc/modprobe.d/usb.conf << "EOF"
266 <code class="literal"># Begin /etc/modprobe.d/usb.conf
268 install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
269 install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
271 # End /etc/modprobe.d/usb.conf</code>
275 <div class="content" lang="ja" xml:lang="ja">
277 <a id="contents-kernel" name="contents-kernel"></a>8.3.3. Linux の構成
279 <div class="segmentedlist">
280 <div class="seglistitem">
282 <strong class="segtitle">インストールファイル:</strong> <span class=
283 "segbody">config-2.6.37, vmlinux-2.6.37-lfs-6.8-2.6.37,
284 System.map-2.6.37</span>
287 <strong class="segtitle">インストールディレクトリ:</strong> <span class=
288 "segbody">/lib/modules, /usr/share/doc/linux-2.6.37</span>
292 <div class="variablelist">
297 <col align="left" valign="top" />
302 <a id="config" name="config"></a><span class=
303 "term"><code class="filename">config-2.6.37</code></span>
315 <a id="lfskernel" name="lfskernel"></a><span class=
317 "filename">vmlinux-2.6.37-lfs-6.8</code></span>
323 コンピュータを起動した際には、オペレーティングシステム内にて最初にロードされるものです。
324 カーネルはコンピュータのハードウェアを構成するあらゆるコンポーネントを検知して初期化します。
325 そしてそれらのコンポーネントをツリー階層のファイルとして、ソフトウェアが利用できるようにします。 ただひとつの
326 CPU からマルチタスクを処理するマシンとして、あたかも多数のプログラムが同時稼動しているように仕向けます。
333 <a id="System.map" name="System.map"></a><span class=
335 "filename">System.map-2.6.37</code></span>
340 アドレスとシンボルのリストです。 カーネル内のすべての関数とデータ構成のエントリポイントおよびアドレスを示します。
349 <div class="navfooter">
352 <a accesskey="p" href="fstab.html" title=
353 "/etc/fstab ファイルの生成">前のページ</a>
359 <a accesskey="n" href="grub.html" title=
360 "GRUB を用いたブートプロセスの設定">次のページ</a>
366 <a accesskey="u" href="chapter08.html" title=
367 "第8章 LFS システムのブート設定">上に戻る</a>
370 <a accesskey="h" href="../index.html" title=
371 "Linux From Scratch - Version 6.8">ホーム</a>