Linux

【PC】Linuxビルドのノウハウ ⑦make-kpkgでカーネルビルド、カーネルパッケージ(*.deb)について調べる

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

Linuxのカーネルビルドの方法を知りたいけど簡単にまとめられた情報源がない

こんな悩みを解決します。

今回やることは2つ。

  1. make-kpkgでカーネルビルド
  2. カーネルパッケージ(*.deb)について調べる

バージョン情報

Linux Kernel 3.14

make-kpkg

【PC】Linuxビルドのノウハウ ③make deb-pkgによるカーネルビルドとdebパッケージ作成・インストールではmake deb-pktを採用したので、make-kpkgは使わずじまい。今回、make-kpkgでビルドを試してみました。

①make-kpkgって何だっけ?

make-kpkgが何だったのかスッカリ忘れてしまいました。Ubuntu で kernel をソースコードからビルドする (make-kpkg 編) を読みようやく思い出しました。そうだカーネルイメージをdebパッケージ化する方法だ。

こんな感じでビルドするみたいです。

$ sudo make-kpkg –initrd kernel_image kernel_headers

ビルド完了。カーネルイメージとカーネルヘッダが出来ました。

$ ls ../*.deb
linux-headers-3.14.79_3.14.79-10.00.Custom_amd64.deb
inux-image-3.14.79_3.14.79-10.00.Custom_amd64.deb

②make deb-pkgとの比較

【PC】Linuxビルドのノウハウ ③make deb-pkgによるカーネルビルドとdebパッケージ作成・インストールで実施したmake deb-pkgで生成される①~⑤のうち、make-kpkgでは①②が生成されました。

①カーネルイメージと関連モジュールを含む linux-image-version、
②外部モジュールのビルドに必要なヘッダファイルを含む linux-headers-version、
③一部のドライバから要求されるファームウェアファイルを含む linux-firmware-image-version (Debian の配布しているカーネルソースからカーネルをビルドする場合、このパッケージは生成されないかもしれません)、
④カーネルイメージとモジュールのデバッグシンボルを含む linux-image-version-dbg、
⑤GNU glibc などのユーザ空間ライブラリに関連するヘッダを含む linux-libc-dev

make deb-pkgを覚えてしまったのでmake-kpkgを使うことは無さそうですが、1度試せたので満足です。

カーネルパッケージ(*.deb)

debパッケージ(*.deb)をdpkgでインストールしましたが、firmware、headers、デバッグシンボルを含むimage、linux-libc-devについて調べたいと思います。

debパッケージの中身を見るにはどうすればよいか。

【PC】Linuxビルドのノウハウ ③make deb-pkgによるカーネルビルドとdebパッケージ作成・インストールでカーネルビルドを実施すると、/usr/srcにdebパッケージが5つ生成されます。

linux-firmware-image-3.14.79-pavement1234_3.14.79-1_amd64.deb ③
linux-headers-3.14.79-pavement1234_3.14.79-1_amd64.deb ②
linux-image-3.14.79-pavement1234-dbg_3.14.79-1_amd64.deb ④
linux-image-3.14.79-pavement1234_3.14.79-1_amd64.deb ①
linux-libc-dev_3.14.79-1_amd64.deb ⑤

debパッケージの展開を読み、debの展開方法を調べました。

①カーネルイメージ

$ sudo ar vx linux-image-3.14.79-pavement1234_3.14.79-1_amd64.deb
x – debian-binary テキストファイル。中に2.0と書いてある。
x – control.tar.gz
x – data.tar.xz

 

control.tar.gzを展開。

$ sudo tar xvf control.tar.gz
./
./postrm
./control
./prerm
./postinst
./preinst
./md5sums

data.tar.xzを展開。

$ sudo tar xvf data.tar.xz
./
./lib/
./lib/modules/
./lib/modules/3.14.79-pavement1234/
./lib/modules/3.14.79-pavement1234/modules.builtin.bin
./lib/modules/3.14.79-pavement1234/modules.dep
./lib/modules/3.14.79-pavement1234/modules.symbols
./lib/modules/3.14.79-pavement1234/modules.softdep
./lib/modules/3.14.79-pavement1234/modules.symbols.bin
./lib/modules/3.14.79-pavement1234/modules.devname
./lib/modules/3.14.79-pavement1234/modules.order
./lib/modules/3.14.79-pavement1234/kernel/
(途中省略)
./lib/modules/3.14.79-pavement1234/modules.alias.bin
./lib/modules/3.14.79-pavement1234/modules.alias
./lib/modules/3.14.79-pavement1234/modules.builtin
./lib/modules/3.14.79-pavement1234/modules.dep.bin
./etc/
./etc/kernel/
./etc/kernel/prerm.d/
./etc/kernel/preinst.d/
./etc/kernel/postinst.d/
./etc/kernel/postrm.d/
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/linux-image-3.14.79-pavement1234/
./usr/share/doc/linux-image-3.14.79-pavement1234/copyright
./usr/share/doc/linux-image-3.14.79-pavement1234/changelog.Debian.gz
./boot/
./boot/vmlinuz-3.14.79-pavement1234
./boot/config-3.14.79-pavement1234
./boot/System.map-3.14.79-pavement1234

②カーネルヘッダー

かならずこの3ファイルが展開されるんですね。

$ sudo ar vx linux-headers-3.14.79-pavement1234_3.14.79-1_amd64.deb
x – debian-binary テキストファイル。中に2.0と書いてある。
x – control.tar.gz
x – data.tar.xz

control.tar.gzを展開。

$ sudo tar xvf control.tar.gz
./
./control
./md5sums

data.tar.xzを展開。

$ sudo tar xvf data.tar.xz
./
./lib/
./lib/modules/
./lib/modules/3.14.79-pavement1234/
./usr/
./usr/src/
./usr/src/linux-headers-3.14.79-pavement1234/
./usr/src/linux-headers-3.14.79-pavement1234/tools/
(途中省略)
./usr/share/
./usr/share/doc/
./usr/share/doc/linux-headers-3.14.79-pavement1234/
./usr/share/doc/linux-headers-3.14.79-pavement1234/copyright
./usr/share/doc/linux-headers-3.14.79-pavement1234/changelog.Debian.gz
./lib/modules/3.14.79-pavement1234/build

③ファームウェア

$ sudo ar vx linux-headers-3.14.79-pavement1234_3.14.79-1_amd64.deb
x – debian-binary テキストファイル。中に2.0と書いてある。
x – control.tar.gz
x – data.tar.xz

control.tar.gzを展開(②と同じでした)。

data.tar.xzを展開。

$ sudo tar xvf data.tar.xz
./
./lib/
./lib/firmware/
./lib/firmware/3.14.79-pavement1234/
./lib/firmware/3.14.79-pavement1234/yamaha/
(途中省略)
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/linux-firmware-image-3.14.79-pavement1234/
./usr/share/doc/linux-firmware-image-3.14.79-pavement1234/copyright
./usr/share/doc/linux-firmware-image-3.14.79-pavement1234/changelog.Debian.g

④デバッグ版カーネルイメージ

$ sudo ar vx linux-image-3.14.79-pavement1234-dbg_3.14.79-1_amd64.deb
x – debian-binary テキストファイル。中に2.0と書いてある。
x – control.tar.gz
x – data.tar.xz

control.tar.gzを展開(③と同じでした)。

$ sudo tar xvf control.tar.gz
./
./control
./md5sums

data.tar.xzを展開

$ sudo tar xvf data.tar.xz
./
./usr/
./usr/lib/
./usr/lib/debug/
./usr/lib/debug/lib/
./usr/lib/debug/lib/modules/
./usr/lib/debug/lib/modules/3.14.79-pavement1234/
./usr/lib/debug/lib/modules/3.14.79-pavement1234/kernel/
./usr/lib/debug/lib/modules/3.14.79-pavement1234/kernel/sound/
(途中省略)
./usr/lib/debug/lib/modules/3.14.79-pavement1234/vmlinux
./usr/lib/debug/boot/
./usr/share/
./usr/share/doc/
./usr/share/doc/linux-image-3.14.79-pavement1234-dbg/
./usr/share/doc/linux-image-3.14.79-pavement1234-dbg/copyright
./usr/share/doc/linux-image-3.14.79-pavement1234-dbg/changelog.Debian.gz
./usr/lib/debug/vmlinux-3.14.79-pavement1234
./usr/lib/debug/boot/vmlinux-3.14.79-pavement1234

⑤Cランタイム

$ sudo ar vx linux-libc-dev_3.14.79-1_amd64.deb
x – debian-binary テキストファイル。中に2.0と書いてある。
x – control.tar.gz
x – data.tar.xz

control.tar.gzを展開。

$ sudo tar xvf control.tar.gz
./
./control
./md5sums

data.tar.xzを展開。

$ sudo tar xvf data.tar.xz
./
./usr/
./usr/include/
./usr/include/sound/
(途中省略)
./usr/share/
./usr/share/doc/
./usr/share/doc/linux-libc-dev/
./usr/share/doc/linux-libc-dev/copyright
./usr/share/doc/linux-libc-dev/changelog.Debian.gz

取り急ぎ展開できました。

/lib/modules、/etc、/usr/share、/usr/lib、/lib/firmware、/usr/srcに展開されるようです。困ったらここを見てデバッグします。

debパッケージ作成方法

debパッケージ作成方法をステップバイステップでまとめましたに、debパッケージの作り方が書いてあります。これを読むことで、make deb-pkgで生成されたパッケージがどうやって作られているかわかるに違いありません。近々debパッケージを作ってみようと思います。

まとめ

今回、make-kpkgでカーネルビルド、カーネルパッケージ(*.deb)について調べることができました。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。