【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です
make-kpkgでカーネルビルドする方法、カーネルパッケージ(*.deb)について知りたい
こんな悩みを解決します
バージョン情報
Linux Kernel 3.14
make-kpkg
【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との比較
【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パッケージの中身を見るにはどうすればよいか
【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)について調べることができました