ポータブックカーネルパッチ準備手順【Ubuntu編】

ポータブック用のカーネルパッチを作るまでの手順

※ubuntu標準のlinux-sourceパッケージからのパッチ作成
※例はUbuntu18.04の4.15.0-42です。バージョンが変更になるとファイル名は変わる可能性あり。

 もくじ

ビルド環境を作成する。

最新カーネルを取得

カーネルソースをコピー

linux-sourceパッケージをインストールしソースをコピーする。

mkdir kernel415
cd kernel415
cp /usr/src/linux-source-4.15.0.tar.bz2 .

解凍する

tar xvf linux-4.15.0.tar.bz2

configファイルのコピー

/boot/config-4.15.0-42-genericをソースのフォルダに.configとしてコピーする。

configファイルのコピー

cp /boot/config-4.15.0-42-generic ./linux-source-4.15.0/.config

configファイルのmake

cd linux-4.19.8
make oldconfig

gitの準備

.gitignoreを作成する。

 kernel.orgからのソースと違い.gitignoreが無いのでどこかからコピーしてくる。

gitの初期化

差分を取るためにgitで初期化を行う。ベースラインのcommitメッセージは適当に。

git init
git add .
git commit -m "master of kernel4.15.0-42

ctags

ctags用のファイルを作る。

ctags -R

ソースの編集

変更点を確認しつつソースを解析して編集する。

カーネルビルド

変更が終わったらカーネルをビルドする。sudo -sが必要。
下記のパラメータは環境に合わせて変更
・CONCURRENCY_LEVEL(CPUコア数+1)
・-j(CPUスレッド数×2)
・–append_to_version (わかりやすい名前を付ける。)
・–revision (リビジョンを管理したい時に使用する。)

sudo -s
time CONCURRENCY_LEVEL=9 LANG=C make-kpkg -j 18 --rootcmd fakeroot --initrd --append_to_version=-xmc10-custom-20181213001 --revision=001 kernel_image kernel_headers

 ※ commitしていないのでこの時点でビルドされるカーネルバージョンには「+」というsuffixが付加される。

ビルド中のエラー

 下記のエラーが出たらLANG=Cが入っているか確認する。

./scripts/ubuntu-retpoline-extract-one: 134 行: printf: 0x十六進数ダンプ:: 無効な十六進数です
symbolmap: 00000000: invalid section

動作確認

ビルドが正常に完了すると親ディレクトリにdebファイルが作成される。実行端末にコピーしてインストールしてから動作確認を行う。