以下の環境で試していきます。
ビルド環境とターゲット環境を兼用しても大丈夫です。
今回は、VMに割り当てられるリソースが少ないので別途ビルド環境を用意しています。
ターゲットとするカーネルは5.12とします。
ビルド環境にて、メインラインのカーネルをチェックアウトします。
configはUbuntu 20.04のものを使用します。
ターゲット環境からビルド環境へ転送します。
1target$ scp /boot/config-5.4.0-72-generic 192.168.10.44:~/linux/.config
configはdefconfigから生成する方法もありますが、
ドライバの有無や機能の有無にも関連してくるため、
ひとまずはディストリビューションのものを試すのが無難だと思います。
カーネルのバージョンが5.4から5.12へ変わるため、
oldconfigで不足しているconfigを設定します。
1build$ make oldconfig
数十〜百単位で項目が聞かれますが、とりあえず試すだけであれば
全部デフォルト値(つまりEnter押しっぱなし)で十分だと思います。
一点だけ、CONFIGSYSTEMTRUSTED_KEYS はデフォルト値を削除して空欄にする必要があります。
署名済みカーネルモジュールを生成するためのキーみたいですが、
この点はどういう仕組になっているのかよくわかってないです。
make menuconfig でメニューを表示し / で検索します。
1build$ make menuconfig
次にビルドします。
細かくはカーネルビルドして、モジュールビルドして…とか手順はありますが、
今回そこが目的ではないので以下でまとめてビルドしてしまいます。
1build$ make -j4 bindeb-pkg
ビルドが完了すると以下のファイルが出力されます。
これをターゲットに転送して、インストールします。
1target$ sudo dpkg -i linux-*.deb
完了したらrebootします。
立ち上がったらunameでカーネルのバージョンが上がっていることを確認します。