CONFIG_KALLSYMS_ALL

2023-05-16

内核配置

在2.6内核中,为了更好地调试内核,引入了kallsyms。kallsyms抽取了内核用到的所有函数地址(全局的、静态的)和非栈数据变量地址,生成一个数据块,作为只读数据链接进kernel image,相当于内核中存了一个System.map。
CONFIG_KALLSYMS=y 符号表中包含所有的函数
CONFIG_KALLSYMS_ALL=y 符号表中包括所有的变量(包括没有用EXPORT_SYMBOL导出的变量)
CONFIG_KALLSYMS_EXTRA_PASS=y

make menuconfig
General setup  --->  
    [*] Configure standard kernel features (for small systems)  --->
        (选中此项,才有/proc/kallsyms接口文件, oops问题,选中此选项即可,子选项可以忽略)
        [*]   Load all symbols for debugging/ksymoops 
              [*]   Include all symbols in kallsyms
              [*]   Do an extra kallsyms pass  

这样当系统出现oops的时候打印的信息就不是数字了,而是对应的符号信息。

Call Trace:
[] sys_delete_module+0x191/0x1ce
[] do_page_fault+0x189/0x51d
[] syscall_call+0x7/0xb


System.map与kallsyms

./scripts/kallsyms.c生成System.map
./scripts/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然后内核编译过程中将kallsyms.S(内核符号表)编入内核镜像uImage
内核启动后,kernel/kallsyms.c解析uImage形成/proc/kallsyms


/proc/kallsyms

cat /proc/kallsyms
000000000000a018 D per_cpu__xen_vcpu
000000000000a020 D per_cpu__xen_vcpu_info
000000000000a060 d per_cpu__mc_buffer
000000000000b570 D per_cpu__xen_mc_irq_flags
000000000000b578 D per_cpu__xen_cr3
000000000000b580 D per_cpu__xen_current_cr3
000000000000b5a0 d per_cpu__xen_runstate
000000000000b5e0 d per_cpu__xen_runstate_snapshot
000000000000b610 d per_cpu__xen_residual_stolen

第一列为符号地址,第二列为类型,第三列为符号名。如果发现符号地址均为0,那是因为系统保护。使用root权限查看即可。
第二列的类型:有的符号是大写的,有的是小写。大写的符号是全局的。
b 符号在未初始化数据区(BSS)
c 普通符号,是未初始化区域
d 符号在初始化数据区
g 符号针对小object,在初始化数据区
i 非直接引用其他符号的符号
n 调试符号
r 符号在只读数据区
s 符号针对小object,在未初始化数据区
t 符号在代码段
u 符号未定义

部分转自:旅途@KryptosX » linux内核符号表kallsyms简介


kallsyms_lookup_name

驱动代码中可以通过kallsyms_lookup_name寻找对应的symbol,如,

#ifdef CONFIG_KALLSYMS_ALL
        __boot_cpu_mode_sym = (void *)kallsyms_lookup_name("__boot_cpu_mode");
#else
        __boot_cpu_mode_sym = resolve_symbol("__boot_cpu_mode");
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CONFIG_KALLSYMS_ALL 的相关文章

随机推荐

  • Libsvm网格参数寻优教程

    原文 xff1a http endual iteye com blog 1262010 首先下载Libsvm Python和Gnuplot xff1a l libsvm的主页http www csie ntu edu tw cjlin li
  • 打井问题

    在偏远的山区 xff0c 水资源很稀缺 xff0c 因此 xff0c 我们问每个山区进行打井工程 xff0c 在不同的地方打了N口井 xff0c 现在我们要在这N口井之间修建管道 xff0c 要使得这些井都能连通 xff0c 同时所使用的管
  • C语言结构体的初始化

    C primer Plus第五版 第14章结构和其他数据形式 1 结构声明 结构声明 xff08 structure declaration xff09 是描述结构体如何组合的主要方法 xff0c 声明就像下面这样 xff1a struct
  • 【Unix编程】文件处理函数

    文件处理函数 xff1a http www iteedu com os linux linuxprgm linuxcfunctions file fcntl php 1 close xff08 关闭文件 xff09 相关函数 open xf
  • ubuntu安装vnc踩的坑

    较新版本的ubuntu 安装vnc 1 搜索setting 把里面的sharing的权限都打开 2 试一下sudo apt get install vnc4server 或者sudo apt y install vnc4server 3 如
  • ElasticSearch 7.6中遇到的一些坑

    一 限制单个index在单个节点上的总shard数 index routing allocation total shards per node 一般在冷热分离的场景种 xff0c 冷数据会设置副本 xff0c 热数据为了保证写入速度 xf
  • 大数据部门组织结构

    平台团队 运维团队 运维工程师最基本的职责都是负责服务的稳定性 xff0c 确保服务可以7 24H不间断地为用户提供服务 xff0c 负责维护并确保整个服务的高可用性 xff0c 同时不断优化系统架构提升部署效率 优化资源利用率 xff1b
  • Hadoop HDFS 副本机制

    Data Replication HDFS is designed to reliably store very large files across machines in a large cluster It stores each f
  • Apache Spark 3.0:全新功能知多少

    Spark3 0解决了超过3400个JIRAs xff0c 历时一年多 xff0c 是整个社区集体智慧的成果 Spark SQL和 Spark Cores是其中的核心模块 xff0c 其余模块如PySpark等模块均是建立在两者之上 Spa
  • Spark优化篇:动态内存管理

    Spark内存管理分为静态内存管理和统一内存管理 xff0c Spark1 6之前使用的是静态内存管理 xff0c Spark1 6之后的版本默认使用的是统一内存管理 动态内存机制图 xff1a 内存估算 xff1a Other Memor
  • Spark优化篇:RBO/CBO

    在Spark1 0中所有的Catalyst Optimizer都是基于规则 rule 优化的 为了产生比较好的查询规 则 xff0c 优化器需要理解数据的特性 xff0c 于是在Spark2 0中引入了基于代价的优化器 xff08 cost
  • Spark优化篇:数据倾斜解决

    数据倾斜是指我们在并行进行数据处理的时候 xff0c 由于数据散列引起Spark的单个Partition的分布不均 xff0c 导致大量的数据集中分布到一台或者几台计算节点上 xff0c 导致处理速度远低于平均计算速度 xff0c 从而拖延
  • Apache Flink 作业图 JobGraph 与执行图 ExecutionGraph

    由 Flink 程序直接映射成的数据流图 xff08 dataflow graph xff09 xff0c 也被称为逻辑流图 xff08 logical StreamGraph xff09 到具体执行环节时 xff0c Flink 需要进一
  • Apache Flink 任务 Tasks 和任务槽 Task Slots

    目录 任务槽 xff08 Task Slots xff09 任务槽数量的设置 任务对任务槽的共享 任务槽和并行度的关系 任务槽 xff08 Task Slots xff09 Flink 中每一个 worker 也就是 TaskManager
  • Flink 水位线结合窗口进行KeyBy、Reduce案例

    水位线 xff08 Watermark xff09 和窗口 xff08 Window xff09 Watermark 在事件时间语义下 xff0c 我们不依赖系统时间 xff0c 而是基于数据自带的时间戳去定义了一个时钟 xff0c 用来表
  • UML中的五种关系

    UML中的关系 xff08 Relationships xff09 主要包括5种 xff1a 关联关系 聚合关系 依赖关系 泛化关系和实现关系 关联 xff08 Association xff09 关系 关联关系是一种结构化的关系 xff0
  • 摄像头常用接口MIPI,DVP原理图接口定义

    摄像头常用接口 xff1a USB是串行通用串行总线 xff08 Universal Serial Bus xff09 的简称 xff0c 电脑摄像头接口是USB接口 xff0c MIPI MIPI是移动行业处理器接口 xff08 Mobi
  • 内核current指针

    通过current指针获取当前进程信息 current其实一个struct task struct指针 xff0c 指向当前进程 struct task struct task又是struct thread info的一个成员变量 thre
  • DMA(四) - DMA_API_DEBUG

    DMA API DEBUG 为了debug驱动程序及发现使用DMA API时的bug xff0c 检测代码可以编译到kernel中 xff0c 它们可以告诉开发 者那些违规行为 如果你的体系结构支持 xff0c 你可以选择编译选项 Enab
  • CONFIG_KALLSYMS_ALL

    内核配置 在2 6内核中 xff0c 为了更好地调试内核 xff0c 引入了kallsyms kallsyms抽取了内核用到的所有函数地址 全局的 静态的 和非栈数据变量地址 xff0c 生成一个数据块 xff0c 作为只读数据链接进ker