首页 > 其他分享 >crash —— 查看内核配置

crash —— 查看内核配置

时间:2023-09-23 20:11:55浏览次数:34  
标签:kernel crash CONFIG 查看 config 内核 data IKCFG

在编译内核时如果配置了CONFIG_IKCONFIG,那么内核配置文件会被内嵌到内核中,那么可以通过crash工具将其输出出来。

crash> sys config
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 4.18.0 Kernel Configuration
#
#
# Compiler: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
...

还有其他方法可以提取内核配置吗?下面有三种方法:

  1. /proc/config.gz
    这个方法前提是使能了CONFIG_IKCONFIG_PROC
    可以使用zcat来读取,比如:zcat /proc/config.gz
  2. scripts/extract-ikconfig
    可以将内核配置从vmlinux中解析出来,比如:./scripts/extract-ikconfig vmlinux
    这个方法前提是使能了CONFIG_IKCONFIG,如果设置的是y,那么用vmlinux即可,如果设置的是m,那么需要用 ./scripts/extract-ikconfig kernel/configs.ko

内核配置是如何集成到内核中的呢?

参考kernel/Makefile:

在编译的时候,会先将.config拷贝到kernel/config_data中,然后使用下面的命令对其进行压缩:

cat kernel/config_data | gzip -n -f -9 > kernel/config_data.gz

kernel/configs.c中会通过汇编代码将上面的压缩文件包含进来:

/*
 * "IKCFG_ST" and "IKCFG_ED" are used to extract the config data from
 * a binary kernel image or a module. See scripts/extract-ikconfig.
 */
asm (
"       .pushsection .rodata, \"a\"             \n"
"       .ascii \"IKCFG_ST\"                     \n"
"       .global kernel_config_data              \n"
"kernel_config_data:                            \n"
"       .incbin \"kernel/config_data.gz\"       \n"
"       .global kernel_config_data_end          \n"
"kernel_config_data_end:                        \n"
"       .ascii \"IKCFG_ED\"                     \n"
"       .popsection                             \n"
);

这样会将压缩包链接到kernel_config_data和kernel_config_data_end之间,读取/proc/config.gz时,其实读取的就是这两个数据段之间的内容,此外,还提供了两个字符串标识"IKCFG_ST"和"IKCFG_ED",工具extract-ikconfig就是通过定位这两个标识来找到内核配置文件。

标签:kernel,crash,CONFIG,查看,config,内核,data,IKCFG
From: https://www.cnblogs.com/pengdonglin137/p/17724867.html

相关文章

  • Kubernetes 查看api
    [root@k8sm1~]#kubectlapi-versions......
  • crash工具使用 —— 查看DMI信息
    在linux上一般通过dmidecode来获取DMI信息,crash也提供了获取DMI信息的命令,不过内容不会像dmidecode那么详细。crash>sys-iDMI_BIOS_VENDOR:SeaBIOSDMI_BIOS_VERSION:rel-1.14.0-0-g155821a1990b-prebuilt.qemu.orgDMI_BIOS_DATE:04/01/20......
  • crash工具使用 —— 省去输入struct或者union关键字
    使用crash工具根据地址查看结构体的内容时,有时需要输入struct或者union,多少有些繁琐,crash提供了*命令,直接跟在结构体或者联合体的名字的前面即可。示例:带structcrash>structkmem_cache-xffff893751f60800structkmem_cache{cpu_slab=0x5fc135c77b40,flags=......
  • crash工具学习 —— percpu相关的一些用法
    作者[email protected]查看percpu变量在每个cpu上的基地址crash>kmem-oPER-CPUOFFSETVALUES:CPU0:ffff88807f600000CPU1:ffff88807fa00000CPU2:ffff88813d600000CPU3:ffff88813da00000CPU4:ffff8881bd600000CPU5:ffff8881bda00000C......
  • linu 查看进程端口的几种方法
    kill命令Linuxkill命令用于删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。使用kill-l命令列出所有可用信号。最常用的信号是:1(HUP):重新加载进程。9(......
  • 使用 cargo expand 查看被宏隐藏的代码
    使用cargoexpand查看被宏隐藏的代码使用VScode安装扩展RustMacroExpand需要安装以下软件:cargo-expandAcargocrateforeasierhandlingofcompilercommandsRustnightlycompiler,youcaninstallitwithrustuptoolchaininstallnightlycargoexpand简......
  • Linux查看系统版本信息
    Linux查看系统版本信息参考资料:Linux常用命令分类汇总查看Linux系统版本信息的几种方法uname-a #查看Linux内核版本命令cat/proc/version #查看Linux内核版本命令cat/etc/issue #此命令也适用于所有的Linux发行版。lsb_release-a #即可列出所有版本信息:‍‍......
  • 使用qemu来dump虚拟机的内存,然后用crash来分析
    场景如果虚拟机没有开启kdump,或者卡死了,那么可以进入qemu的monitor模式将虚机的内存保存到文件中,然后使用crash工具进行分析。示例启动虚拟机,然后按ctrl+ac进入monitor,查看帮助(qemu)helpdump-guest-memorydump-guest-memory[-p][-d][-z|-l|-s|-w]filename[beginl......
  • linux 查看jdk安装路径
    [root@iz2ze9ufq5ehrayz6j88sazbin]#java-versionjavaversion"1.8.0_191"Java(TM)SERuntimeEnvironment(build1.8.0_191-b12)JavaHotSpot(TM)64-BitServerVM(build25.191-b12,mixedmode)[root@iz2ze9ufq5ehrayz6j88sazbin]#whichjava/usr......
  • linux查看用户的所有组,和组下面有多少用户
    1.查看用户的所有组idgroups[root@ceph1~]#idtest01uid=1000(test01)gid=1001(test01)groups=1001(test01),1000(test)[root@ceph1~]#idtest02uid=1001(test02)gid=1002(test02)groups=1002(test02),1000(test)[root@ceph1~]#idtest03uid=1002(test03)gid......