Fedora 31でカーネルソースコードを用意する

ディストリビューションのカーネルソースを使いたいと思うと、RPMパッケージで入手するらしく、展開方法などお作法が分かりずらかったので備忘録に残しておく。

まずは必要なパッケージをインストールする。

# dnf install fedpkg fedora-packager rpmdevtools ncurses-devel pesign
#
#dnf builddep -y kernel

稼働中のカーネルバージョンを確認して、src.rpmパッケージをダウンロードする。

# uname -r
5.3.7-301.fc31.x86_64
# dnf download --source kernel-5.3.7-301.fc31
#
# ls
anaconda-ks.cfg  kernel-5.3.7-301.fc31.src.rpm

RPMパッケージをインストールする。警告がたくさんでるが問題はないらしい。インストールが終わるとrpmbuildというフォルダが生成されてSOURCESとSPECSというサブフォルダが生成される。

# rpm -i kernel-5.3.7-301.fc31.src.rpm 
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
...
#
# ls
anaconda-ks.cfg  kernel-5.3.7-301.fc31.src.rpm  rpmbuild
#
# cd rpmbuild/
#
# ls
SOURCES  SPECS

続いて下記のコマンドを実行すると展開される。

# rpmbuild -bp SPECS/kernel.spec 
...
# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
#
# cd BUILD/kernel-5.3.fc31/linux-5.3.7-301.fc31.x86_64/
#
# ls
arch     COPYING-5.3.7  drivers  ipc      lib          mm       scripts   usr
block    CREDITS        fs       Kbuild   LICENSES     net      security  virt
certs    crypto         include  Kconfig  MAINTAINERS  README   sound
configs  Documentation  init     kernel   Makefile     samples  tools

この段階ではまだ.configファイルがないらしいので、make oldconfigでファイルを作成する。

# make menucofnig
***
*** Configuration file ".config" not found!
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
make: *** [Makefile:669: .config] Error 1
#
# make oldconfig
scripts/kconfig/conf  --oldconfig Kconfig
#
# using defaults found in /boot/config-5.3.7-301.fc31.x86_64
#
#
# configuration written to .config
#
# make menucofnig

無事make menuconfigが実行できた。めでたし。 f:id:mailstop:20191117092653p:plain