ポータブック用のカーネルパッチを作るまでの手順
※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ファイルが作成される。実行端末にコピーしてインストールしてから動作確認を行う。