我正在按照 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_FRAME_POINTER=n
CONFIG_KGDB=n
CONFIG_KGDB_SERIAL_CONSOLE=n
您还应该通过注释掉来确保 CONFIG_DEBUG_RODATA 没有被设置,
# CONFIG_DEBUG_RODATA
所有关于编译 Linux 内核的信息都可以在这里找到,而且非常权威。在 Linux 内核主页上。