Ubuntu Weekly Recipe

第578回 メインラインカーネルにパッチをあてる

この記事を読むのに必要な時間:およそ 6 分

何度か紹介しているように,UbuntuはLinuxディストリビューションのひとつです。つまりカーネルとしてLinuxを採用しています。新しいハードウェアを使うなら新しいカーネルが必要になりますし,特定のデバイスで問題が起きるならカーネルを修正することになります。今回は最新のカーネルに修正を加えてパッケージ化する方法を紹介します。

カーネルをビルドするさまざまな方法

本連載ではこれまでにも,さまざまな方法でカーネルをビルド・インストールする手段を紹介してきました。代表的なものだけでも,次の3つの記事が存在します。

  • 第333回「カーネルパッケージをビルドしよう」
    Ubuntuカーネルのgitリポジトリもしくはカーネルソースパッケージを利用した,Ubuntuのカーネルパッケージのビルド方法。
  • 第524回「Hades Canyon/Kaby Lake GのdGPUを有効化する」
    Ubuntuのメインラインビルドを利用したビルド済み最新カーネルのインストール方法。
  • 第526回「Ubuntuで最新のカーネルをお手軽にビルドする方法」

    VanillaカーネルからDebianパッケージをビルドする方法。

個々のビルド方法についての詳細は各記事を参照してもらうことにして,まずは今回使用する方法との違いを説明しておきましょう。

Ubuntuにおいて「カーネル」と呼ぶとき,そのソースコードの取得元に応じて大まかに次のように分けられます。

Ubuntuカーネル

Ubuntuで正式に採用されているカーネルもしくは採用される予定のカーネルです。特定のカーネルバージョンに対して,各種Ubuntuに必要なパッチを適用した上で,パッケージとして提供されています。

ソースコードの取得元はkernel.ubuntu.comです。Ubuntu用なので,カーネルはUbuntuのリリースに合わせたバージョンのみが提供されます。たとえばUbuntu 19.04であればKernel 5.0ですし,Ubuntu 18.04 LTSならKernel 4.15になります(HWEなら4.18や5.0です⁠⁠。

既存のカーネルを少しだけ変更して利用したいなら,Ubuntuカーネルをベースにすることになるでしょう。第333回ではUbuntuカーネルに少し修正を加えてビルドする方法を紹介しました。

メインラインカーネル(Mainline Kernel)

Ubuntuでは不具合の原因追求や次期リリースに向けてのバージョン選定のために,メインラインカーネルと呼ばれるオリジナルのLinuxカーネルをほぼそのまま利用した,ビルドインフラストラクチャーを用意しています。

つまりKernelのmasterブランチの最新コミット特定のタグを毎日ビルドし,そのパッケージを公開しているのです。メインラインビルドは,不具合がどのリリースから発生するようになったのか,新しいリリースでは修正されているのかを追求するのに役に立ちます。リリースごとに再ビルドの必要がなく,パッケージをダウンロードしてインストールするだけでトライアンドエラーを繰り返せます。

なおメインラインカーネルは,基本的にLinux Kernelの内容そのままですが,リリースごとに「Ubuntu化」用のパッチセットも併せて公開しています。つまり利用者は比較的簡単にUbuntu化されたカーネルを入手可能です。

また第524回では,最新のカーネルでのみサポートしていたハードウェアを使うために,メインラインビルドのパッケージをインストールしました。

バニラカーネル(Vanilla Kernel)

Ubuntuによる修正がまったく加えられていないアップストリームのカーネルをバニラカーネルと呼んでいます。もちろん,このバニラカーネルをビルドすれば,Ubuntuで利用可能です。最近はMakefileにDebianパッケージを構築するターゲットが追加されているため,比較的簡単にDebianパッケージ化も可能です。

ただし各種パッチが適用されていないこと,コンフィグを自分で構築する必要があることから,Ubuntuの各種コンポーネントが動かなかったり,起動すらできないこともあります。あくまでカーネル開発者向けのオプションです。

第526回ではカーネルパッケージをビルドするひとつの方法として,バニラカーネルを利用する手法を紹介しました。

どのカーネルをベースにするかは,ユースケースに合わせて変更する必要があります。

たとえば今回は第576回で紹介したようにGPD MicroPC向けのカーネルを作ることを考えてみましょう。GPD MicroPC向けのカーネルには次の制約が存在しました。

  • 古いBIOSは5.2.0-rc5以降のカーネルを使わないと画面の回転がおかしくなる
  • 新しいBIOSは5.2.0にさらにパッチを適用しないと画面の回転がおかしくなる

執筆当時はUbuntuの開発版であるeoanでさえも,カーネルは5.0ベースでした※1⁠。さらに新しいBIOS向けの修正はまだLinux Kernelには取り込まれていないため,パッチを適用する必要があることには変わりありません。

※1
7月上旬ぐらいにKernel 5.2がリリースされ,eoanのカーネルも5.2ベースに変更されました。今回は5.2のUbuntuカーネルはまだないものとして話を続けます。

つまりUbuntuカーネルだとバージョンアップが必要です。なおかつメインラインカーネルにしろバニラカーネルにしろ,パッチの適用が必須であるため,メインラインカーネルのビルド済みパッケージは使えません。

第526回のようにバニラカーネルをビルドしても良いのですが,より「Ubuntuらしい」カーネルがほしかったので,今回はメインラインカーネルにパッチを適用する方法を採用します。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。