dbg パッケージを生成せずに Linux カーネル deb-pkg ターゲットをコンパイルしますか?

dbg パッケージを生成せずに Linux カーネル deb-pkg ターゲットをコンパイルしますか?

私はLinuxカーネルをDebianのやり方で構築しています。Debian Linux カーネル ハンドブックしたがって、コンパイル手順では target を使用しdeb-pkg、正常に終了すると、make deb-pkg親ディレクトリにいくつかの Debian パッケージが生成されます。

linux-firmware-image-VERSIONS.deb
linux-headers-VERSIONS.deb
linux-image-VERSIONS.deb
linux-image-VERSION-dbg_VERSION.deb
linux-libc-dev_VERSIONS.deb

多くの場合、linux-image-x.y.z.deb他の 4 つのパッケージは使用せずにインストールするだけです。これはそれほど問題ではありませんが、カーネル デバッグ シンボル ( ) を含むパッケージの生成にかなりの時間がかかることがわかっています。ビルド ターゲットにデバッグ シンボル パッケージを生成しないようlinux-image-x.y.z-dbg_x.y.z_arch.debに指示する方法があるかどうか疑問に思っています。deb-pkg

答え1

MariusMatutiae の回答は私が期待していたものとは違っていましたが、カーネルビルドスクリプトをいくつか見て、実行可能な解決策を見つけました。結果として得られる Debian パッケージを生成するスクリプトは、scripts/package/builddebBUILD_DEBUGこのスクリプトを見ると、デバッグ シンボルを使用してパッケージをビルドする部分は、指定されたKCONFIGfor をgrep する条件によって囲まれていますCONFIG_DEBUG_INFO=y

したがって、デバッグ シンボルを含む Debian パッケージの生成を停止するには、現在、カーネルCONFIG_DEBUG_INFOオプションを無効にする必要があります。

CONFIG_DEBUG_INFO=n

答え2

カーネルハンドブックこれは次のように示唆しています:

CONFIG_DEBUG_INFO オプションを無効にすると、ビルドで使用するディスク容量が少なくなります。カーネルで crash、kgdb、SystemTap などのバイナリ オブジェクト ツールを使用する予定がある場合にのみ、Debuginfo が必要です。

これは次のコマンドで実現できます:

cd linux-source-4.12
scripts/config --disable DEBUG_INFO

答え3

最新のカーネル バージョン (5.19 以降) をコンパイルする場合、変更する構成シンボルは次のとおりです。

scripts/config --undefine GDB_SCRIPTS
scripts/config --undefine DEBUG_INFO
scripts/config --undefine DEBUG_INFO_SPLIT
scripts/config --undefine DEBUG_INFO_REDUCED
scripts/config --undefine DEBUG_INFO_COMPRESSED
scripts/config --set-val  DEBUG_INFO_NONE       y
scripts/config --set-val  DEBUG_INFO_DWARF5     n

設定ファイルのソース(Ubuntu のバージョンなど)に応じて、以下を実行する必要がある場合があります。

scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

答え4

以下のように設定する必要があります.configシンボル:

 CONFIG_FRAME_POINTER=n

 CONFIG_KGDB=n

 CONFIG_KGDB_SERIAL_CONSOLE=n

また、CONFIG_DEBUG_RODATAがコメントアウトされて設定されていないことを確認する必要があります。

 # CONFIG_DEBUG_RODATA

Linuxカーネルをコンパイルするためのすべての情報は、かなり信頼できる方法で見つけることができます。Linuxカーネルのホームページ

関連情報