編譯linux核心deb-pkg目標而不產生dbg套件?

編譯linux核心deb-pkg目標而不產生dbg套件?

我正在按照 Debian 的指示(大部分)建立 Linux 內核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其他四個軟體包而未使用。這不是什麼大問題,但我不斷發現生成包含內核偵錯符號 ( linux-image-x.y.z-dbg_x.y.z_arch.deb) 的套件需要花費大量時間。我想知道是否有一種方法可以指示deb-pkg建置目標不產生偵錯符號包?

答案1

MariusMatutiae 給出的答案並不完全是我所期望的,但我確實查看了一些核心構建腳本並找到了一個可行的解決方案。產生 debian 軟體包的腳本是scripts/package/builddeb。查看此腳本,使用偵錯符號建置包的部分被條件包圍,條件取決於給BUILD_DEBUG定的 grep 。KCONFIGCONFIG_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 核心主頁上

相關內容