编译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_FRAME_POINTER=n

 CONFIG_KGDB=n

 CONFIG_KGDB_SERIAL_CONSOLE=n

您还应该通过注释掉来确保 CONFIG_DEBUG_RODATA 没有被设置,

 # CONFIG_DEBUG_RODATA

所有关于编译 Linux 内核的信息都可以在这里找到,而且非常权威。在 Linux 内核主页上

相关内容