ソースコードの修正(Fedora31)

以前カーネルをビルドしただけの時から随分経ったが、今回はちょっとソースコードもいじってみる。
で、今回はFedora31にバージョンが上がっている。
前回の記事と、

Fedora 24: カーネルを再ビルドする - Narrow Escape

ここを参考に。ここを中心に。

$ sudo yum install rpmdevtools

まず、rpmdevtoolsのインストール。

$ rpmdev-setuptree

rpmdev-setuptreeの実行。

$ uname -a
Linux localhost.localdomain 5.3.7-301.fc31.x86_64 #1 SMP Mon Oct 21 19:18:58 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$

バージョン確認しておく。

$ sudo yum install koji

kojiのインストール。

$ koji download-build --arch=src kernel-5.3.7-301.fc31.x86_64

ソースのダウンロード。

$ rpm -Uvh kernel-5.3.7-301.fc31.src.rpm

パッケージ更新。
警告が出るけど、気にしない。

SPECSの下のkernel.specをバックアップとって編集
SPECSの下のkernel.specをバックアップとって編集

SPECSの下のkernel.specをバックアップとって編集。

最初は別のだったが、今回も結局".bg1"にした。
最初は別のだったが、今回も結局".bg1"にした。

最初は別のだったが、今回も結局".bg1"にした。。

$ rpmbuild -bp SPECS/kernel.spec

"rpmbuild -bp"したら、

make入ってなかった
make入ってなかった

make入ってなかった。

$ sudo yum install make

make入れて再度やると、

flex入ってない
flex入ってない

flex入ってない。

$ sudo yum install flex

flex入れた。

$ sudo yum install fedpkg fedora-packager ncurses-devel pesign grubby

ついでに前回入れてたこの辺も入れてみた。
効果あったかはわからんけど。

今度はbisonが入ってない。
今度はbisonが入ってない。

今度はbisonが入ってない。

$ sudo yum install bison

bison入れた。

pathfix.pyがないってどういうこと。
pathfix.pyがないってどういうこと。

pathfix.pyがないってどういうこと。

command-not-found.com – pathfix.py

なるほど。

$ sudo yum install python3-devel

python3は入ってたけど、"python3-devel"が必要だったみたい。

$ rpmbuild -bp SPECS/kernel.spec
setting SOURCE_DATE_EPOCH=1571616000
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.gfIMWn
.
.
.

+ exit 0
$

やっと"rpmbuild -bp"が成功。

linuxから始まるソースを見ていくとgitレポジトリになってる
linuxから始まるソースを見ていくとgitレポジトリになってる

linuxから始まるソースを見ていくとgitレポジトリになってる。

addとcommitしてみる
addとcommitしてみる

addとcommitしてみる。

新しいブランチ"bg1"を作って切り替える
新しいブランチ"bg1"を作って切り替える

新しいブランチ"bg1"を作って切り替える。

init/main.cを編集。
init/main.cを編集。

init/main.cを編集。

kernel_init関数の中で、printkで"bg1 in kernel_init"と出力。
kernel_init関数の中で、printkで"bg1 in kernel_init"と出力。

kernel_init関数の中で、printkで"bg1 in kernel_init"と出力。

patch用のcommit
patch用のcommit

patch用のcommit。

こうやってpatchを作るらしい
こうやってpatchを作るらしい

こうやってpatchを作るらしい。
SOURCEに格納されたみたい。

1000-custom.patchをkernel.specの"END OF PATCH DEFINITIONS"の前に追加するらしい。
1000-custom.patchをkernel.specの"END OF PATCH DEFINITIONS"の前に追加するらしい。

作った1000-custom.patchをkernel.specの"END OF PATCH DEFINITIONS"の前に追加するらしい。

BUILDの下を空にして、"rpmbuild -bp"する。
BUILDの下を空にして、"rpmbuild -bp"する。

BUILDの下を空にして、"rpmbuild -bp"する。

うまくいった
うまくいった

うまくいったので、

本体ビルドしようとしたら、まだ足りなかったので、いろいろ入れる。
本体ビルドしようとしたら、まだ足りなかったので、いろいろ入れる。

本体ビルドしようとしたら、まだ足りなかったので、いろいろ入れる。

今度こそビルド
今度こそビルド

今度こそビルド。

数時間後に出来た。
数時間後に出来た。

数時間後に出来た。

成果物を"/usr/src/kernels"にコピー。
成果物を"/usr/src/kernels"にコピー。

成果物を"/usr/src/kernels"にコピー。

シンボリックリンクを貼って
シンボリックリンクを貼って

シンボリックリンクを貼って、

インストール
インストール

インストール。
で前回と同様に再起動してShiftキーを押すと、

こうなるので"bg1"とあるやつを選ぶ
こうなるので"bg1"とあるやつを選ぶ

こうなるので"bg1"とあるやつを選ぶ。

カーネルがbg1バージョンになってる
カーネルがbg1バージョンになってる

カーネルがbg1バージョンになってる。
さて、いじったソースがどうなってるか確認する。

dmesgすると、
dmesgすると、

dmesgすると、起動時のいろいろなものが見える。

随分と下に行くと、"bg1 in kernel_init"があった。
随分と下に行くと、"bg1 in kernel_init"があった。

随分と下に行くと、"bg1 in kernel_init"があった。
ということで、修正したソースコードの部分が反映されてることがわかった。