为什么在 linux 内核调试包安装系统中需要两个内核模块副本?

Why two kernel module copies are required in a linux kernel debug package installed system?

在安装了内核调试包的 Linux 机器中,我可以看到内核模块的两个副本位于两个位置,如下所述:

  1. /lib/modules/<$KERNELVERSION>/kernel/
  2. /usr/lib/debug/lib/modules/<$KERNELVERSION>/kernel/

我确实有疑问,执行哪个模块,两个模块需要什么。

  1. /lib/modules/<$KERNELVERSION>/kernel/ - 将与内核一起加载的模块(它们没有调试符号)

示例:

ll /lib/modules/4.15.0-20-generic/kernel/fs/xfs/xfs.ko<br> -rw-r--r-- 1 root root 1883966 2018 年 4 月 24 日 /lib/modules/4.15.0-20-generic/kernel/fs/xfs/xfs.ko

  1. /usr/lib/debug/lib/modules/<$KERNELVERSION>/kernel/ - 带有调试符号的模块

示例:

ll /usr/lib/debug/lib/modules/4.15.0-20-generic/kernel/fs/xfs/xfs.ko<br> -rw-r--r-- 1 root root 40247182 2018 年 4 月 24 日 /usr/lib/debug/lib/modules/4.15.0-20-generic/kernel/fs/xfs/xfs.ko

如您所见,1.8Mb 对比 40Mb。如果比较 readelf -S <module> 的输出,您会注意到调试模块

中的其他部分,如 debug_arangesdebug_infodebug_ranges