快速回忆
- debuginfo-common是源码,安装在/usr/src下面,提供gdb crash等命令查看源码
- debuginfo是库,安装在/usr/lib下面,主要提供vmlinux
- debug-debuginfo是debug版本linux的debuginfo库,本质是库同2
巩固:
- vmlinux什么提供?在哪个目录(安装debuginfo的包、/usr/lib)
- 想看linux的源码,怎么办?在哪个目录?(安装debuginfo-common的rpm包、/usr/src)
注意都在/usr目录下,并且src和lib几乎算是官方地带了。
前言
kdc、kd、kdd是什么?另外我们为什么要知道这些?
举个例子,当我想用crash或者gdb 查看vmlinux,来定位crash问题的时候,需要安装debuginfo包。并且放到了/usr/lib下
再举个例子,我们需要用crash种的dis或者gdb的l,以及想用add2line查看某个crash地址所在行,并且显示代码,就需要用src,那么就需要debuginfo-common提供源码。并且放到了/usr/src下
再有甚者想查看本内核编译的详细内核代码,由于开源下载的kernel代码只有大版本号不一定是编译的内核,所以有了这个编译的内核,就能查看所有源码,甚至重新编译
要点:
-
kernel-debuginfo-common 主要是编译linux的与架构无关的,本质就是源码。主要就是提供源码
- rpm会安装到 /usr/src/debug/下的kernel中,注意大本营是usr的src下面,说明本质是src是代码
- 包括编译内核所有的源码
- 主要作用在用vmlinux定位的时候,可以获取到源码,进而可以用crash的dis等方式查看到出现问题在哪一行,包括addr2line都是很有用的
-
kernel-debuginfo 主要是vmlinux、所有的ko等,会copy文件到
- rpm会安装到 /usr/lib/deubug/下的lib和src,注意大本营是usr的lib下面,说明本质是lib是库,所以架构相关
- lib是vmlinux和所有ko。
-
kernel-debug-debuginfo 是debug版本linux的debuginfo库,本质是库,同kernel-debuginfo
其他:
- 注意为什么
- /lib/module/$(uname -r)/build这个目录是用来编译内核模块指定linux src编译路径的不是这里提到的debuginfo。如下是编译某个linux内核模块指定kernel dir的方式,和前面这里提的不一样
KERNEL=/lib/modules/$(shell uname -r)/build
modules:
make -C $(KERNEL) M=`pwd` modules
这个参考兄弟篇详细介绍/lib/modules中的代码以及 /usr/src/kernel的代码的关系,以及kernel-devel的rpm包与kernel-debug-common关系:https://blog.csdn.net/essencelite/article/details/137846894
简单梳理:
kernel-devel 安装到 /usr/src/kernel 被软连接到/lib/modules/$(uname -r)/build #为什么要一个lib软连接,因为可能多个内核版本需要一个壳, 是库+源文件。
kernel-header 安装到 /usr/include,是源文件。
kernel-debuginfo 安装到了 /usr/lib/debug/lib/xxx 是库。在lib库的debug下面
kernel-debuginfo-common 安装到了 /usr/src/debug/xxx 是代码。在src源码的debug下面
实际例子:
yum源列出的mirror上的rpm包:(注意yum本质只是一个包管理框架,包本质都是这些rpm包)
kernel-debuginfo-common
kernel-debuginfo
参考下载例子:
https://mirrors.openanolis.cn/anolis/8.6/BaseOS/x86_64/debug/Packages/
另外安装方法参考兄弟篇文章:https://blog.csdn.net/essencelite/article/details/137713050