# Kernels (日本語)

関連記事

- カーネルモジュール
- カーネルパニック
- Linux-ck
- sysctl

Wikipedia より:

  カーネルは、階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。アプリケーションとハードウェアレベルでの実際のデータ処理との間の架け橋である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。

メインラインの Linux カーネルに加えて、Arch Linux では様々なカーネルを使うことができます。リポジトリから利用できるカーネルの一部と、それぞれの簡単な説明をこのページでリストアップしています。また、システムのカーネルに適用することができるパッチの説明も記述します。記事の最後にはカスタムカーネルのコンパイルの概要とリンクが付してあります。

## 事前コンパイル済みカーネル

### 公式パッケージ

linux
  [core] リポジトリにある Linux カーネルとモジュール。バニラカーネル（素のカーネル）に多少のパッチが適用されています。

linux-lts
  [core] リポジトリにある長期サポート版 (Long term support, LTS) の Linux カーネルとモジュール。

linux-grsec
  セキュリティを高めるための Grsecurity パッチセットと PaX パッチがあてられた Linux カーネルとモジュール。

### AUR パッケージ

linux-bfs
  Brain Fuck Scheduler (BFS) が含まれた Linux カーネルとモジュール - BFS は Con Kolivas によって作成された、4096コア以下のデスクトップコンピュータ向けのタスクスケジューラ。任意で使える BFQ I/O スケジューラも付属。

linux-ck
  Con Kolivas の ck1 パッチセットを適用した Linux カーネル。
  PKGBUILD 内で次の追加オプションを切り替えることができます: BFQ スケジューラ, nconfig, localmodconfig, 動作中のカーネル設定の利用。
  これらのパッチはシステムのレスポンスを改善するように作られており、特にデスクトップに向きますが、どのような使用目的でも問題なく使えます。ck パッチには BFS が含まれています。
  詳しい情報とインストールの方法については linux-ck を読んで下さい。

linux-eee-ck
  Asus Eee PC 701 向けの Linux カーネルとモジュール、Con Kolivas の ck1 パッチセットを使用。

linux-fbcondecor
  fbcondecor をサポートした Linux カーネルとモジュール。

linux-mainline
  メインラインの Linux カーネルとモジュール。

linux-pax
  セキュリティを高めるための PaX パッチがあてられた Linux カーネルとモジュール。

linux-ice
  gentoo-sources パッチセットが適用され TuxOnIce をサポートした Linux カーネルとモジュール。

linux-lqx
  Liquorix はデスクトップ・マルチメディア・ゲーム用途に Debian 用の設定と ZEN カーネルソースを使ってビルドされたディストロカーネル代替です。Debian Linux ではパフォーマンス向上カーネルとしてよく使われています。Liquorix パッチセットのメンテナである Damentz は ZEN パッチセットの開発者でもあります。

linux-pf
  pf-kernel パッチ [-ck パッチセット (BFS 含む), TuxOnIce, BFQ] と aufs3 が含まれた Linux カーネルとモジュール。

linux-zen
  ZEN Kernel は毎日の利用のために最高の Linux カーネルを提供するカーネルハッカーのコラボレーションによって生まれました。このリポジトリで ZEN カーネルのビルドが得られます。

kernel-netbook
  Eee PC などの Intel Atom N270/N280/N450/N550 を使っているネットブックのための安定したカーネル。外部ハードウェア (broadcom-wl) やパッチセット (BFS + TuxOnIce + BFQ optional) が追加されています - Intel GPU においてのみ動作

linux-lts-tresor
  TRESOR が統合された、安定した LTS Linux カーネルとモジュール。

linux-git
  Linus Torvalds の git リポジトリ から得たソースを使ってビルドする Linux カーネルとモジュール。

## パッチとパッチセット

カーネルにパッチをあてる理由は様々です。パフォーマンスを向上させたり reiser4 ファイルシステムのサポートなどメインラインに含まれていない機能を使うため、というのが大多数の理由でしょう。他の理由としては、カーネルの改善がどうやってなされるのか知ってみたいという好奇心もあるかもしれません。

しかしながら、システムのスピードアップにベストな方法はまずカーネルをあなたのシステム、特にアーキテクチャとプロセッサーのタイプに適合させることだと気づくのは重要なことです。速度をアップさせるために、カスタムカーネルの（一般的なアーキテクチャ用の設定を使って）パッケージ済みのバージョンを使うのは推奨されませんし、あまり価値はありません。他の利点は、あなたが持っていない・使っていない物のサポートを含めないことで、カーネルのサイズ（そしてビルド時間）を減らすことができるということです。例えば、新しいカーネルバージョンがリリースされた時、私はいつもカーネルのコンフィグを皮切りに bluetooth, video4linux, 1000Mbit イーサネットといったサポート（マシンに必要ない機能）を削除します。このページではカーネルコンフィグのカスタマイズについては触れませんが、最初のステップとしてカーネルのビルドを行い、それからパッチセットを使ってみるのが推奨です。

### インストール方法

カスタムカーネルパッケージのインストールには Arch Build System (ABS) を使います。カスタムパッケージをビルドしたことがない場合は次の記事を読んで勉強できます: Arch Build System (日本語), Creating Packages (日本語)。

あなたがカーネルにパッチをあてたりカスタマイズをしたことがないとしても、インストールはそこまで難しいものではなく、また、それぞれのパッチセットの PKGBUILD がフォーラムにはたくさんあります。ただし、すぐ近くのバンドワゴンに飛びつくのではなく、それぞれのパッチセットの効能を調べるところから始めるのを推奨します。そのほうがいきなりカーネルを選ぶよりもやるべきことについて多く学ぶことができるでしょう。

#コンパイル を見て下さい。

Note: 新しいカーネルを使うために、あなたのブートローダ (例: GRUB) のブートオプションを変更するのを忘れないで下さい。

### 主なパッチセット

まず初めにパッチセットは様々な人によって開発されていることに注意してください。人々の中には linux カーネルの開発に深く関わっている人もいるでしょうし、そうでないひともいるでしょう。開発者のカーネルの理解度はパッチセットの信頼性と安定性に反映されます。

また、パッチセットによっては他のパッチセットとあわせて使うと効果がないものもあります (パッチの名前にそれが示されているかもしれません)。パッチセット（とカーネルアップデート）は非常に短い間隔でリリースされ、ほとんどの場合それを完全に追いつづける価値はありません。あまり夢中にならないようにしましょう、それを趣味にするなら話は別ですが。

ググればもっと多くのパッチセットがあります - そのときはクォーテーションを使うのを覚えておいて下さい (例: `"-nitro"`)。そうしないと google はあなたが望む検索結果を表示しません。

Note: This section is for information only - clearly no guarantees of stability or reliability are implied by inclusion on this page.

#### -ck

Linux-ck にはシステムのレスポンスを良くするためのパッチが含まれています。デスクトップ用途に重点が置かれていますが他の環境でも使えます。このパッチは Con Kolivas によって作成・メンテナンスされており、彼のサイトは http://users.on.net/~ckolivas/kernel/ にあります。Con はフルセットを管理していますがパッチを分けて提供もしており、使いたいものだけを追加することが可能です。

-ck パッチは http://ck.kolivas.org/patches/3.0/ から入手できます

#### -rt

このパッチセットは Ingo Molnar 率いるコアデベロッパのグループによってメンテナンスされています。このパッチを使うことでカーネルのほとんど全てをリアルタイム実行できるようになります、ただしコードの非常に小さい領域 ("raw_spinlock critical regions") は除きます。カーネルのスピンロックのほとんどを優先度継承をサポートするミューテックスに置き換え、全ての割り込みとソフトウェア割り込みをカーネルスレッドに移動することでこれを実現しています。

さらに高精度タイマーも組み入れられています - パッチセットは別々にメンテナンスされています。

[as said from the Real-Time Linux Wiki]

パッチは https://www.kernel.org/pub/linux/kernel/projects/rt/ にあります

#### -bld

Warning: このスケジューラは開発中です。

BLD is best described as a O(1) CPU picking technique. Which is done by reordering CPU runqueues based on runqueue loads. In other words, it keeps the scheduler aware of the load changes, which helps scheduler to keep runqueues in an order. This technique doesn't depend on scheduler ticks. The two most simple things in this technique are: load tracking and runqueue ordering; these are relatively simpler operations. Load tracking will be done whenever a load change happens on the system and based on this load change runqueue will be ordered. So, if we have an ordered runqueue from lowest to highest, then picking the less (or even busiest) runqueue is easy. Scheduler can pick the lowest runqueue without calculation and comparison at the time of placing a task in a runqueue. And while trying to distribute load at sched_exec and sched_fork our best choice is to pick the lowest busiest runqueue of the system. And in this way, system remains balanced without doing any load balancing. At the time of try_to_wake_up picking the idlest runqueue is topmost priority but it has been done as per domain basis to utilize CPU cache properly and it's an area where more concentration is requires.

Google Code ウェブページ: https://code.google.com/p/bld/

#### -grsecurity

Grsecurity はセキュリティに焦点を置いたパッチセットです。ロールベースアクセス制御など様々なセキュリティに関係する機能を追加し PaX プロジェクトの機能を利用します。デスクトップでも使うことはできますが公開サーバーでの利用が一番意味があるでしょう。アプリケーションによってはこのパッチセットで実装されている追加のセキュリティ対策と互換性がないことがあります。そうした問題が起こる場合は、セキュリティレベルを低くしてみて下さい。

-grsecurity パッチは https://grsecurity.net から入手できます

#### Tiny-Patches

Linux Tiny の目標はメモリやディスクの使用量を減らし、小さなシステムで動作するのを助ける機能を追加することです。組み込みシステムの開発者や 386 など小さい・古いマシンのユーザーを対象にしています。

メインストリームの Linux カーネルに対するパッチリリースは止まっています。開発者達は少数のパッチに力を注ぎメインラインカーネルにパッチをマージさせることに時間を割くことを選んだようです。

#### -pf

linux-pf は非公式の Linux カーネルのフォークで、メインラインにマージされていないひと握りの素敵な機能を提供します。既存の Linux フォークやパッチセットには基づいていませんが、必要なパッチが公式にリリースされていない場合に非公式のポートが使われることもあります。 linux-pf の特徴的なパッチとして TuxOnIce, CK パッチセット (特に BFS), AUFS3, LinuxIMQ, l7 フィルタ, BFQ があります。

### 個々のパッチ

以下のパッチはバニラカーネルのビルドに含めたり、他のパッチセットに組み入れることができます。

#### Reiser4

Reiser4

#### fbsplash

fbsplash

## コンパイル

Arch Linux ではカーネルコンパイルに複数の方法があります。

### Arch Build System を使う

Arch Build System の利用には既存の linux の PKGBUILD とパッケージ管理システムを使えるというアドバンテージがあります。PKGBUILD があるので、ソースがダウンロードされた後、ビルドを止めてカーネルを設定することができます。

Kernels/Compilation/Arch Build System (日本語) を見て下さい。

### 伝統的な方法

手動でソース tarball をダウンロードし、標準ユーザーとして home ディレクトリでビルドを行います。設定を行った後、コンパイル・インストールする方法は2つあります; 伝統的に手動で行うか makepkg + pacman を使うかです。

伝統的な方法のメリットは、他の Linux ディストリビューションでもカーネルを動作させることができることです。

Kernels/Compilation/Traditional (日本語) を見て下さい。

### プロプライエタリの NVIDIA ドライバ

カスタムカーネルと一緒にプロプライエタリの NVIDIA ドライバを使う方法は NVIDIA (日本語)#Alternate install: カスタムカーネル を見て下さい。

## 参照

- O'Reilly - Linux Kernel in a Nutshell (free ebook)

Category:

- Kernel (日本語)