
我正在按照 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 。KCONFIG
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 核心主頁上。