OSDN Git Service

a9388ac08df6c00de80d1c8fca391e336487afe3
[linuxjf/JF.git] / docs / LFS-BOOK / chapter08 / kernel.html
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">
4   <head>
5     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
6     <title>
7       8.3. Linux-2.6.37
8     </title>
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" />
13   </head>
14   <body class="lfs" id="lfs-6.8">
15     <div class="navheader">
16       <h4>
17         Linux From Scratch - Version 6.8
18       </h4>
19       <h3>
20         第8章 LFS システムのブート設定
21       </h3>
22       <ul>
23         <li class="prev">
24           <a accesskey="p" href="fstab.html" title=
25           "/etc/fstab ファイルの生成">前のページ</a>
26           <p>
27             /etc/fstab ファイルの生成
28           </p>
29         </li>
30         <li class="next">
31           <a accesskey="n" href="grub.html" title=
32           "GRUB を用いたブートプロセスの設定">次のページ</a>
33           <p>
34             GRUB を用いたブートプロセスの設定
35           </p>
36         </li>
37         <li class="up">
38           <a accesskey="u" href="chapter08.html" title=
39           "第8章 LFS システムのブート設定">上に戻る</a>
40         </li>
41         <li class="home">
42           <a accesskey="h" href="../index.html" title=
43           "Linux From Scratch - Version 6.8">ホーム</a>
44         </li>
45       </ul>
46     </div>
47     <div class="wrap" lang="ja" xml:lang="ja">
48       <h1 class="sect1">
49         <a id="ch-bootable-kernel" name="ch-bootable-kernel"></a>8.3.
50         Linux-2.6.37
51       </h1>
52       <div class="package" lang="ja" xml:lang="ja">
53         <p>
54           Linux パッケージは Linux カーネルを提供します。
55         </p>
56         <div class="segmentedlist">
57           <div class="seglistitem">
58             <div class="seg">
59               <strong class="segtitle">概算ビルド時間:</strong> <span class=
60               "segbody">1.0 - 5.0 SBU</span>
61             </div>
62             <div class="seg">
63               <strong class="segtitle">必要ディスク容量:</strong> <span class=
64               "segbody">540 - 800 MB</span>
65             </div>
66           </div>
67         </div>
68       </div>
69       <div class="installation" lang="ja" xml:lang="ja">
70         <h2 class="sect2">
71           8.3.1. カーネルのインストール
72         </h2>
73         <p>
74           カーネルの構築は、カーネルの設定、コンパイル、インストールの順に行っていきます。
75           本書が行っているカーネル設定の方法以外については、カーネルソースツリー内にある <code class=
76           "filename">README</code> ファイルを参照してください。
77         </p>
78         <p>
79           コンパイルするための準備として以下のコマンドを実行します。
80         </p>
81         <pre class="userinput">
82 <kbd class="command">make mrproper</kbd>
83 </pre>
84         <p>
85           これによりカーネルソースが完全にクリーンなものになります。
86           カーネル開発チームは、カーネルコンパイルするなら、そのたびにこれを実行することを推奨しています。 tar
87           コマンドにより伸張しただけのソースではクリーンなものにはなりません。
88         </p>
89         <p>
90           メニュー形式のインターフェースによりカーネルを設定します。 カーネルの設定方法に関する一般的な情報が <a class="ulink"
91           href=
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>
98           を参照してください。
99         </p>
100         <pre class="userinput">
101 <kbd class="command">make LANG=<em class=
102 "replaceable"><code>&lt;host_LANG_value&gt;</code></em> LC_ALL= menuconfig</kbd>
103 </pre>
104         <div class="variablelist">
105           <p class="title">
106             <b>make パラメータの意味:</b>
107           </p>
108           <dl>
109             <dt>
110               <span class="term"><em class=
111               "parameter"><code>LANG=&lt;host_LANG_value&gt;
112               LC_ALL=</code></em></span>
113             </dt>
114             <dd>
115               <p>
116                 これはホストのロケール設定を指示するものです。 この設定は UTF-8 での表示設定がされたテキストコンソールにて、
117                 menuconfig の ncurses による行表示を適切に行うために必要となります。
118               </p>
119               <p>
120                 <em class=
121                 "replaceable"><code>&lt;host_LANG_value&gt;</code></em>
122                 の部分は、ホストの <code class="envar">$LANG</code> 変数の値に置き換えてください。
123                 ホストにてその値が設定されていない場合は <code class="envar">$LC_ALL</code> あるいは
124                 <code class="envar">$LC_CTYPE</code> の値を設定してください。
125               </p>
126             </dd>
127           </dl>
128         </div>
129         <p>
130           上のコマンドではなく、状況によっては <span class="command"><strong>make
131           oldconfig</strong></span> を実行することが適当な場合もあります。 詳細についてはカーネルソース内の
132           <code class="filename">README</code> ファイルを参照してください。
133         </p>
134         <p>
135           カーネル設定は行わずに、ホストシステムにあるカーネル設定ファイル <code class=
136           "filename">.config</code> をコピーして利用することもできます。 そのファイルが存在すればの話です。
137           その場合は <code class="filename">linux-2.6.37</code>
138           ディレクトリにそのファイルをコピーしてください。 もっともこのやり方はお勧めしません。
139           設定項目をメニューから探し出して、カーネル設定を一から行っていくことが望ましいことです。
140         </p>
141         <p>
142           カーネルイメージとモジュールをコンパイルします。
143         </p>
144         <pre class="userinput">
145 <kbd class="command">make</kbd>
146 </pre>
147         <p>
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> も有用です。
156         </p>
157         <p>
158           カーネル設定においてモジュールを利用することにした場合、モジュールをインストールします。
159         </p>
160         <pre class="userinput">
161 <kbd class="command">make modules_install</kbd>
162 </pre>
163         <p>
164           カーネルのコンパイルが終わったら、インストールの完了に向けてあと少し作業を行います。 <code class=
165           "filename">/boot</code> ディレクトリにいくつかのファイルをコピーします。
166         </p>
167         <p>
168           カーネルイメージへのパスは、利用しているプラットフォームによってさまざまです。 そのファイル名は、好みにより自由に変更して構いません。
169           ただし <span class="emphasis"><em>vmlinux</em></span> という語は必ず含めてください。
170           これにより、次節で説明するブートプロセスを自動的に設定するために必要なことです。 以下のコマンドは x86
171           アーキテクチャの場合の例です。
172         </p>
173         <pre class="userinput">
174 <kbd class=
175 "command">cp -v arch/x86/boot/bzImage /boot/vmlinux-2.6.37-lfs-6.8</kbd>
176 </pre>
177         <p>
178           <code class="filename">System.map</code> はカーネルに対するシンボルファイルです。
179           このファイルはカーネル API の各関数のエントリポイントをマッピングしています。
180           同様に実行中のカーネルのデータ構成のアドレスを保持します。
181           このファイルは、カーネルに問題があった場合にその状況を調べる手段として利用できます。
182           マップファイルをインストールするには以下を実行します。
183         </p>
184         <pre class="userinput">
185 <kbd class="command">cp -v System.map /boot/System.map-2.6.37</kbd>
186 </pre>
187         <p>
188           カーネル設定ファイル <code class="filename">.config</code> は、上で実行した
189           <span class="command"><strong>make menuconfig</strong></span>
190           によって生成されます。 このファイル内には、今コンパイルしたカーネルの設定項目の情報がすべて保持されています。
191           将来このファイルを参照する必要が出てくるかもしれないため、このファイルを保存しておきます。
192         </p>
193         <pre class="userinput">
194 <kbd class="command">cp -v .config /boot/config-2.6.37</kbd>
195 </pre>
196         <p>
197           Linux カーネルのドキュメントをインストールします。
198         </p>
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>
202 </pre>
203         <p>
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           その人はカーネルソースを自由に書き換えてしまう権限を持つことになるわけです。
213         </p>
214         <p>
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>
219           ユーザーとなります。
220         </p>
221         <div class="admon warning">
222           <img alt="[警告]" src="../images/warning.png" />
223           <h3>
224             警告
225           </h3>
226           <p>
227             カーネルを説明する書の中には、カーネルのソースディレクトリに対してシンボリックリンク <code class=
228             "filename">/usr/src/linux</code> の生成を勧めているものがあります。 これはカーネル 2.6
229             系以前におけるものであり LFS システム上では生成<span class=
230             "emphasis"><em>してはなりません</em></span> 。 ベースとなる LFS
231             システムを構築し、そこに新たなパッケージを追加していこうとした際に、そのことが問題となるからです。
232           </p>
233         </div>
234         <div class="admon warning">
235           <img alt="[警告]" src="../images/warning.png" />
236           <h3>
237             警告
238           </h3>
239           <p>
240             さらに <code class="filename">include</code>
241             ディレクトリにあるヘッダファイルは、<span class="emphasis"><em>必ず</em></span> Glibc
242             のコンパイルによって得られるものでなければならず、つまりは Linux カーネルの tarball
243             によって提供されるものでなければなりません。 したがってカーネルヘッダによって上書きされてしまうのは避けなければなりません。
244           </p>
245         </div>
246       </div>
247       <div class="configuration" lang="ja" xml:lang="ja">
248         <h2 class="sect2">
249           <a id="conf-modprobe" name="conf-modprobe"></a>8.3.2. Linux
250           モジュールのロード順の設定
251         </h2>
252         <p>
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           これを行わないとブート時に警告メッセージが出力されます。
258         </p>
259         <p>
260           以下のコマンドを実行して <code class="filename">/etc/modprobe.d/usb.conf</code>
261           ファイルを生成します。
262         </p>
263         <pre class="userinput">
264 <kbd class="command">install -v -m755 -d /etc/modprobe.d
265 cat &gt; /etc/modprobe.d/usb.conf &lt;&lt; "EOF"
266 <code class="literal"># Begin /etc/modprobe.d/usb.conf
267
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
270
271 # End /etc/modprobe.d/usb.conf</code>
272 EOF</kbd>
273 </pre>
274       </div>
275       <div class="content" lang="ja" xml:lang="ja">
276         <h2 class="sect2">
277           <a id="contents-kernel" name="contents-kernel"></a>8.3.3. Linux の構成
278         </h2>
279         <div class="segmentedlist">
280           <div class="seglistitem">
281             <div class="seg">
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>
285             </div>
286             <div class="seg">
287               <strong class="segtitle">インストールディレクトリ:</strong> <span class=
288               "segbody">/lib/modules, /usr/share/doc/linux-2.6.37</span>
289             </div>
290           </div>
291         </div>
292         <div class="variablelist">
293           <h3>
294             概略説明
295           </h3>
296           <table border="0">
297             <col align="left" valign="top" />
298             <tbody>
299               <tr>
300                 <td>
301                   <p>
302                     <a id="config" name="config"></a><span class=
303                     "term"><code class="filename">config-2.6.37</code></span>
304                   </p>
305                 </td>
306                 <td>
307                   <p>
308                     カーネルの設定をすべて含みます。
309                   </p>
310                 </td>
311               </tr>
312               <tr>
313                 <td>
314                   <p>
315                     <a id="lfskernel" name="lfskernel"></a><span class=
316                     "term"><code class=
317                     "filename">vmlinux-2.6.37-lfs-6.8</code></span>
318                   </p>
319                 </td>
320                 <td>
321                   <p>
322                     Linux システムのエンジンです。
323                     コンピュータを起動した際には、オペレーティングシステム内にて最初にロードされるものです。
324                     カーネルはコンピュータのハードウェアを構成するあらゆるコンポーネントを検知して初期化します。
325                     そしてそれらのコンポーネントをツリー階層のファイルとして、ソフトウェアが利用できるようにします。 ただひとつの
326                     CPU からマルチタスクを処理するマシンとして、あたかも多数のプログラムが同時稼動しているように仕向けます。
327                   </p>
328                 </td>
329               </tr>
330               <tr>
331                 <td>
332                   <p>
333                     <a id="System.map" name="System.map"></a><span class=
334                     "term"><code class=
335                     "filename">System.map-2.6.37</code></span>
336                   </p>
337                 </td>
338                 <td>
339                   <p>
340                     アドレスとシンボルのリストです。 カーネル内のすべての関数とデータ構成のエントリポイントおよびアドレスを示します。
341                   </p>
342                 </td>
343               </tr>
344             </tbody>
345           </table>
346         </div>
347       </div>
348     </div>
349     <div class="navfooter">
350       <ul>
351         <li class="prev">
352           <a accesskey="p" href="fstab.html" title=
353           "/etc/fstab ファイルの生成">前のページ</a>
354           <p>
355             /etc/fstab ファイルの生成
356           </p>
357         </li>
358         <li class="next">
359           <a accesskey="n" href="grub.html" title=
360           "GRUB を用いたブートプロセスの設定">次のページ</a>
361           <p>
362             GRUB を用いたブートプロセスの設定
363           </p>
364         </li>
365         <li class="up">
366           <a accesskey="u" href="chapter08.html" title=
367           "第8章 LFS システムのブート設定">上に戻る</a>
368         </li>
369         <li class="home">
370           <a accesskey="h" href="../index.html" title=
371           "Linux From Scratch - Version 6.8">ホーム</a>
372         </li>
373       </ul>
374     </div>
375   </body>
376 </html>