为什么在 linux 内核调试包安装系统中需要两个内核模块副本?
Why two kernel module copies are required in a linux kernel debug package installed system?
在安装了内核调试包的 Linux 机器中,我可以看到内核模块的两个副本位于两个位置,如下所述:
/lib/modules/<$KERNELVERSION>/kernel/
/usr/lib/debug/lib/modules/<$KERNELVERSION>/kernel/
我确实有疑问,执行哪个模块,两个模块需要什么。
/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
/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_aranges
、debug_info
、debug_ranges
等
在安装了内核调试包的 Linux 机器中,我可以看到内核模块的两个副本位于两个位置,如下所述:
/lib/modules/<$KERNELVERSION>/kernel/
/usr/lib/debug/lib/modules/<$KERNELVERSION>/kernel/
我确实有疑问,执行哪个模块,两个模块需要什么。
/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
/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_aranges
、debug_info
、debug_ranges
等