Linux kernel release 5.x (2/4)

https://www.kernel.org/doc/html/latest/admin-guide/README.html

Docs » The Linux kernel user’s and administrator’s guide »
Linux kernel release 5.x ＜ http://kernel.org/ ＞


# Installing the kernel source

> If you install the full sources, put the kernel tarball in a directory where you have permissions (e.g. your home directory) and unpack it:

全ソースコードをインストールするには、kernelのtarballをパーミッションを持っているディレクトリ（例えばホームディレクトリ）に置き、展開してください。

` xz -cd linux-5.x.tar.xz | tar xvf - `

> Replace “X” with the version number of the latest kernel.

"X"は最新カーネルのバージョンに置き換えてください。

> Do NOT use the /usr/src/linux area! This area has a (usually incomplete) set of kernel headers that are used by the library header files. They should match the library, and not get messed up by whatever the kernel-du-jour happens to be.

絶対に！/usr/src/linux areaは使わないでください。このエリアは（一般的には不完全な）kernel headerが置かれており、ライブラリヘッダファイルが利用しています。ここは、libraryと一致させる必要があり、最新のカーネルがどうなっているのかによって、混乱をさせてはいけません。

> You can also upgrade between 5.x releases by patching. Patches are distributed in the xz format. To install by patching, get all the newer patch files, enter the top level directory of the kernel source (linux-5.x) and execute:

5.x releaseからパッチによってアップグレードすることもできます。Patchはxz formatで配布されています。patchをインストールするには、細心のパッチファイルを手に入れて、kernel sourceのtop level directory(linux-5.x)において、下記を実行してください。

` xz -cd ../patch-5.x.xz | patch -p1 `

> Replace “x” for all versions bigger than the version “x” of your current source tree, in_order, and you should be ok. You may want to remove the backup files (some-file-name~ or some-file-name.orig), and make sure that there are no failed patches (some-file-name# or some-file-name.rej). If there are, either you or I have made a mistake.

"x"は　現在利用しているソースコードの"x"バージョンよりも大きいすべてを、あなたが必要なだけ、順番に指定してください。あなたがバックアップファイル（ファイルには"~"や".orig"が付与される）を削除し、パッチを充てるのに失敗したファイル（ファイルには"#”や".rej"が付与される）がないことを確認してください。もしあれば、あなたがわたしが何かのミスをしています。

> Unlike patches for the 5.x kernels, patches for the 5.x.y kernels (also known as the -stable kernels) are not incremental but instead apply directly to the base 5.x kernel. For example, if your base kernel is 5.0 and you want to apply the 5.0.3 patch, you must not first apply the 5.0.1 and 5.0.2 patches. Similarly, if you are running kernel version 5.0.2 and want to jump to 5.0.3, you must first reverse the 5.0.2 patch (that is, patch -R) before applying the 5.0.3 patch. You can read more on this in Documentation/process/applying-patches.rst.

5.xカーネルのパッチとは異なり、5.x.yカーネル（-stableカーネルとも呼ばれます）のパッチは増分ではなく、ベースの5.xカーネルに直接適用されます。
例えば、ベースカーネルが5.0で5.0.3パッチを適用する場合は、最初に5.0.1および5.0.2パッチを適用しないでください。同様に、カーネルバージョン5.0.2を実行していて5.0.3にジャンプする場合、5.0.3パッチを適用する前に、まず5.0.2パッチ（つまり、パッチ-R）を元に戻す必要があります。これについて詳しくは、Documentation/process/applying-patches.rstを参照ください。

> Alternatively, the script patch-kernel can be used to automate this process. It determines the current kernel version and applies any patches found:

または、patch-kernel scriptがこの処理を自動化するのに使えます。現在のカーネルバージョンを判断し、適切なパッチを適用します。

` linux/scripts/patch-kernel linux `

> The first argument in the command above is the location of the kernel source. Patches are applied from the current directory, but an alternative directory can be specified as the second argument.

コマンドに与える第１引数は、カーネルソースの場所です。パッチは現在のディレクトリから適用されますが、代わりのディレクトリを第２引数として指定もできます。

> Make sure you have no stale .o files and dependencies lying around:

古くなった.oファイルと依存関係がないことを確認して下さい。

```
cd linux
make mrproper
```

> You should now have the sources correctly installed.

これで、ソースコードは正しくインストールされたはずです。

# Software requirements

> Compiling and running the 5.x kernels requires up-to-date versions of various software packages. Consult Documentation/process/changes.rst for the minimum version numbers required and how to get updates for these packages. Beware that using excessively old versions of these packages can cause indirect errors that are very difficult to track down, so don’t assume that you can just update packages when obvious problems arise during build or operation.

5.x kernelをコンパイルし、実行するには、様々なソフトウェアパッケージの新しいバージョンが必要です。必要な最小のバージョンと、それらのパッケージをアップデートする方法については、Documentation/process/changes.rstを参照してください。これらのパッケージとして非常に古いバージョンを利用すると、追跡するのが非常に難しい間接絵的なエラーを引き起こすことがあることに気を付けてください。また、ビルドまたは操作中に明らかな問題が発生したときに、パッケージを更新できるとは限りません。

# Build directory for the kernel

> When compiling the kernel, all output files will per default be stored together with the kernel source code. Using the option make O=output/dir allows you to specify an alternate place for the output files (including .config). Example:

kernelをコンパイルするとき、デフォルトでは全ての生成物はkernel source codeと一緒に格納されます。option make O=output/dirを指定する事で、ファイルの生成物(.config含む）を別の場所として指定する事もできます。例えば；

```
cd /usr/src/linux-5.x
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
```

> Please note: If the O=output/dir option is used, then it must be used for all invocations of make.

注意： O=output/dir optionを使う場合、makeの全ての呼び出しに適用する必要があります。

# Configuring the kernel

> Do not skip this step even if you are only upgrading one minor version. New configuration options are added in each release, and odd problems will turn up if the configuration files are not set up as expected. If you want to carry your existing configuration to a new version with minimal work, use make oldconfig, which will only ask you for the answers to new questions.

1つマイナーバージョンをあげる場合であっても、このステップは省かないでください。それぞれのリリースでは新しい設定optionが追加されています。そして、設定ファイルが想定した通りに設定されていないと、奇妙な問題が発生します。最小の構成で新しいバージョンに移行したい場合は、make oldconfigを使用してください。これにより、新しい質問への回答が求められます。

Alternative configuration commands are:

その他の設定するためのコマンドは以下です。

```
"make config"      Plain text interface.
                   Plain textインタフェイス。
"make menuconfig"  Text based color menus, radiolists & dialogs.
                   カラー、ラジオボタンやダイアログ含むテキストメニュー
"make nconfig"     Enhanced text based color menus.
                   カラーメニューによる拡張text
"make xconfig"     Qt based configuration tool.
                   Qtでの設定メニュー
"make gconfig"     GTK+ based configuration tool.
                   GTK+での設定メニュー
```

```
"make oldconfig"   Default all questions based on the contents of
                   your existing ./.config file and asking about
                   new config symbols.
                   現在の./configファイルのコンテンツをベースにして、
                   新しい設定のシンボルについてすべて問い合わせる設定。
"make olddefconfig"
                   Like above, but sets new symbols to their default
                   values without prompting.
                   上述と似ているが、新しいシンボルについて確認なしで
                   デフォルト値を適用する。
"make defconfig"   Create a ./.config file by using the default
                   symbol values from either arch/$ARCH/defconfig
                   or arch/$ARCH/configs/${PLATFORM}_defconfig,
                   depending on the architecture.
                   ,configファイルをデフォルトの設定値で生成する。
                   architectureの指定が必要で、arch/$ARCH/defconfig
                   あるいは、arch/$ARCH/configs/${PLATFORM}_defconfig,
                   を用いる。
"make ${PLATFORM}_defconfig"
                   Create a ./.config file by using the default
                   symbol values from
                   arch/$ARCH/configs/${PLATFORM}_defconfig.
                   Use "make help" to get a list of all available
                   platforms of your architecture.
                   arch/$ARCH/configs/${PLATFORM}_defconfig.に戻づき、
                   .configファイルをデフォルト値で生成する。
                   対象architecureでどのplatformが有効なのかは、
                   "make help"で得られます。
```

```
"make allyesconfig"
                   Create a ./.config file by setting symbol
                   values to 'y' as much as possible.
                   できる限り設定を"y" にして、.config ファイルを生成。
"make allmodconfig"
                   Create a ./.config file by setting symbol
                   values to 'm' as much as possible.
                   できる限り設定を"m" にして、.config ファイルを生成。
"make allnoconfig" Create a ./.config file by setting symbol
                   values to 'n' as much as possible.
                   できる限り設定を"n" にして、.config ファイルを生成。
"make randconfig"  Create a ./.config file by setting symbol
                   values to random values.
                   設定をランダムにして、.config ファイルを生成。
```

```
"make localmodconfig" Create a config based on current config and
                      loaded modules (lsmod). Disables any module
                      option that is not needed for the loaded modules.

                      現在のconfigとloaded modules(lsmod)に基づいて
　　　　　　　　　　　configを生成する、loaded moduleに必要ない他の
                      module optionは無効化する。

                      To create a localmodconfig for another machine,
                      store the lsmod of that machine into a file
                      and pass it in as a LSMOD parameter.

　　　　　　　　　　　localmodconfigを他のマシンで作るには、
                      他のマシンで生成したlsmodとして保存し、
                      LSMOD parameterとして羽化渡してください。

              target$ lsmod > /tmp/mylsmod
              target$ scp /tmp/mylsmod host:/tmp

              host$ make LSMOD=/tmp/mylsmod localmodconfig

                      The above also works when cross compiling.

                      cross compilingで動くようになります。

"make localyesconfig" Similar to localmodconfig, except it will convert
                      all module options to built in (=y) options.

                      localmodconfigと類似していますが、
                      変換した全てのモジュールはbuild in(=y) option が
                      指定されます。
```


```
"make kvmconfig"   Enable additional options for kvm guest kernel support.
                   kvm guest kernel supportに関する追加オプションを有効化します。
"make xenconfig"   Enable additional options for xen dom0 guest kernel
                   support.
                   dom0 guest kernel supportに関する追加オプションを有効化します。
"make tinyconfig"  Configure the tiniest possible kernel.
                   可能な限り最小の設定にします。
```

> You can find more information on using the Linux kernel config tools in Documentation/kbuild/kconfig.rst.

Linux kernel config toolsの使い方に関する更なる情報については、Documentation/kbuild/kconfig.rstを参照してください。


# NOTES on make config:

> - Having unnecessary drivers will make the kernel bigger, and can under some circumstances lead to problems: probing for a nonexistent controller card may confuse your other controllers.
- A kernel with math-emulation compiled in will still use the coprocessor if one is present: the math emulation will just never get used in that case. The kernel will be slightly larger, but will work on different machines regardless of whether they have a math coprocessor or not.
- The “kernel hacking” configuration details usually result in a bigger or slower kernel (or both), and can even make the kernel less stable by configuring some routines to actively try to break bad code to find kernel problems (kmalloc()). Thus you should probably answer ‘n’ to the questions for “development”, “experimental”, or “debugging” features.

- 不要なドライバーを所有すると、カーネルは巨大化し、想定していない問題を引き起こす場合があります。存在していないコントローラカードを有効化することで、他のコントローラーを混乱させます。
- math-emuration compileがコンパイルされたカーネルは、コプロセッサを有するケースでも引き続き使われます、その場合、math-emurationは機能しません。カーネルは少し大きくなりますが、math coprocessorを有していてもいなくても様々なマシンで動作します。
- "kernel hacking" 設定は通常、Kernelを巨大にするか、遅くするか、あるいはその両方の影響を与えます。また、いt靴化の処理が、カーネル問題を発見するために不調なコードを積極的にbreakしようとするので、カーネルの安定性を低下させます(kmalloc())。したがって、「development」「experimental」「debugging」機能の質問には"n2"と答えるべきです。

---
もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる（はずの認識）。

> https://www.kernel.org/doc/html/latest/index.html
> 
> Licensing documentation
> 
> The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
> 
> https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing