crash —— 查看内核配置

简介: crash —— 查看内核配置

在编译内核时如果配置了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
  3. vmlinux-gdb.py
    通过make scripts_gdb,会在编译目录下生成一个软链接vmlinux-gdb.py,然后通过qemu启动gdbserver,然后通过gdb启动调试,使用lx-configdump命令可以将内核配置dump出来。
$ gdb ./vmlinux
(gdb) source vmlinux-gdb.py
(gdb) lx-configdump config.log
warning: Type size unknown, assuming 1. Try casting to a known type, or void *.
Dumped config to config.log

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

参考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"
);
C 复制 全屏

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

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
存储 自然语言处理 固态存储
ublk:来自Linux社区的新热点,基于io_uring的全新高性能用户态块设备
如果您想快速了解ublk的意义、作用及性能,请直接看第二节Q&A部分。一、简介用户态块设备,就是提供/dev/ublkbX这样的标准块设备给业务,业务读写这个块的实际IO处理由您编写的用户态的代码决定。这就好比您使用FUSE,所有对挂载于FUSE的目录的读写都是您编写的IO handler来处理一样。使用用户态块设备,您可以方便地向上层业务以块设备/dev/ublkbX的形式提供您的自定义
|
C语言
C语言 HTTP上传文件-利用libcurl库上传文件
原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们可以容易地实现这个功能。
3596 0
|
Android开发 芯片 SoC
全志H713/H618方案:调焦电机(相励磁法步进电机)的驱动原理、适配方法
本文介绍了全志H713/H618方案中调焦电机(相励磁法步进电机)的驱动原理、适配方法,并通过DTS配置和驱动实现代码,详细说明了如何控制步进电机的正反转和步数,以及如何进行测试。
1005 1
全志H713/H618方案:调焦电机(相励磁法步进电机)的驱动原理、适配方法
|
JSON 网络协议 Java
cpolar内网穿透将本地服务端接口模拟公共网络环境远程调用调试
cpolar内网穿透将本地服务端接口模拟公共网络环境远程调用调试
763 0
|
安全 网络安全 数据安全/隐私保护
ssh连接时提示THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED
ssh链接云主机: ssh root@123.59.xx.xx 报错:THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED   解决办法: ssh -o StrictHostKeyChecking=no root@123.59.xx.xx 输入密码,链接成功   与ssh中Host key verification failed问题一样。
5317 0
|
机器学习/深度学习 数据采集 自然语言处理
使用R语言进行文本挖掘和自然语言处理
【4月更文挑战第26天】R语言在文本挖掘和自然语言处理(NLP)中扮演重要角色,得益于其强大的统计分析功能、灵活的数据处理和丰富的扩展包。活跃的社区开发了如"tm"、"SnowballC"、"text2vec"、"topicmodels"和"syuzhet"等包,支持数据预处理、向量化、主题建模和情感分析。
329 1
|
编译器 API C语言
在x86架构汇编语言中函数参数传递的三种约定
在x86架构汇编语言中函数参数传递的三种约定
853 2
|
存储 算法 程序员
实现一个malloc内存分配器(图文并茂)
实现一个malloc内存分配器(图文并茂)
101986 0
|
定位技术 API
百度地图API的使用教程以及案例(二)
百度地图API的使用教程以及案例
|
消息中间件 XML JSON
一文就读懂RPC远程调用核心原理
rpc的全称是Remote Procedure Call,即远程过程调用,是分布式系统的常用通信方法。 Remote,简单来说的话就是两个不同的服务之间,两个服务肯定是两个不同的进程。因此,我们就从跨进程进行访问的角度去理解就行了。 Procedure,意思是一串可执行的代码,我们写Java的方法,就是一段课程行的代码。 Call,即调用,调用的就是跨了进程的方法。
843 0
一文就读懂RPC远程调用核心原理