init kcore_list kcore_vsyscall

发布时间:2026/9/29 11:59:45

init kcore_list kcore_vsyscall static struct kcore_list kcore_vsyscall;是 Linux 内核中用于描述/proc/kcore文件里 vsyscall 页面区域的一个静态全局变量。核心作用在 kcore 中注册 vsyscall 区域/proc/kcore是内核暴露给用户空间的“内核内存镜像”它允许调试工具如 GDB以 ELF 格式查看内核和用户空间的虚拟内存内容。struct kcore_list用于描述 kcore 文件中每一个可被读取的内存区域。kcore_vsyscall这个变量专门用来记录 vsyscall 页面在虚拟地址空间中的位置和大小以便在 kcore 中正确暴露这块区域。与 vsyscall 的关系vsyscall是 x86-64 架构上一个特殊的只读页面位于固定虚拟地址0xffffffffff600000。它提供了gettimeofday、time、getcpu三个系统调用的快速用户态实现避免了传统系统调用的开销。在较新的内核中vsyscall通常以emulate模式运行但该页面本身仍然存在于虚拟地址空间中作为兼容性接口保留。kcore_vsyscall就是为了在/proc/kcore中暴露这个页面而存在的。在代码中的位置从内核源码可以看到这个变量在arch/x86/mm/init_64.c或arch/x86/entry/vsyscall/vsyscall_64.c中被定义并在kcore初始化时通过kclist_add()注册kclist_add(kcore_vsyscall, (void *)VSYSCALL_ADDR, PAGE_SIZE, KCORE_OTHER);这行代码将VSYSCALL_ADDR即0xffffffffff600000处的一个页面以KCORE_OTHER类型添加到 kcore 的列表中使得调试工具能够读取这个页面的内容。struct kcore_list是 Linux 内核中用于描述/proc/kcore文件中每一个内存区域的数据结构。它像一张“内存区域登记表”记录了哪些内存段需要被/proc/kcore暴露给用户空间。核心定义它的定义位于include/linux/kcore.h结构非常简洁struct kcore_list { struct list_head list; // 链表节点用于串联所有区域 unsigned long addr; // 区域的虚拟起始地址 size_t size; // 区域的大小字节 int type; // 区域类型如 RAM、VMALLOC 等 };字段含义字段含义list内核用list_head将所有kcore_list串联成一个全局链表/proc/kcore读取时遍历这个链表来生成 ELF 程序头Program Headers。addr该内存区域在内核虚拟地址空间中的起始地址。size该区域的长度。/proc/kcore的文件大小和 ELF 段的大小都由此决定。type区域类型用于区分不同用途的内存。区域类型enum kcore_typetype字段的取值来自enum kcore_type常见的有类型含义KCORE_TEXT内核代码段.textKCORE_VMALLOCvmalloc 动态分配区KCORE_RAM系统物理内存直接映射区KCORE_VMEMMAPvmemmap 区域struct page数组KCORE_OTHER其他特殊区域如 vsyscall、模块区在/proc/kcore中的作用/proc/kcore是一个伪文件它以ELF 格式导出内核的运行时内存映像供 GDB 等调试工具分析。内核在初始化时通过kclist_add()函数将各个内存区域注册到全局链表中。例如kclist_add(kcore_mem, __va(0), max_low_pfn * PAGE_SIZE, KCORE_RAM); kclist_add(kcore_vmem, (void *)VMALLOC_START, VMALLOC_END - VMALLOC_START, KCORE_VMALLOC); kclist_add(kcore_kernel, _stext, _end - _stext, KCORE_TEXT);当用户读取/proc/kcore时内核会遍历这个链表为每一个区域生成一个PT_LOAD程序头描述该区域在文件中的偏移和大小。这样调试工具就能知道从哪里读取内核的哪一部分内存。历史演进struct kcore_list的定义经历过一些变化。早期版本如 4.4只包含addr、size、type和链表节点。在 5.0 到 5.13 之间曾短暂增加过一个vaddr字段用于处理某些架构下的虚拟地址映射但后来被移除回归了简洁的设计。type字段则是在 2009 年左右引入的目的是让/proc/kcore能够区分不同类型的区域以便更精确地导出内存。
延伸阅读

更多相关文章

2026/9/29 11:59:45

IMX6ULL | SPI 协议详解与 ADXL345 加速度传感器

一、SPI 基础介绍SPI 是高速同步串行通信接口,通信速度远高于 I2C。I2C 速率:100K、400K、1.xM、最高 3.4MHzSPI 速率:1MHz ~ 上百 MHz,常用于驱动 OLED、加速度计等外设。SPI 传输特点:高位先行。SPI 四根信号线引脚名…

2026/9/29 11:59:45

用 ±1% 计量精度做机房 PUE 测算:PDU 级电量采集的数据链路

用 1% 计量精度做机房 PUE 测算:PDU 级电量采集的数据链路 PUE 是数据中心最常被引用、也最容易被算错的指标。 问题往往不在公式(公式很简单),而在分子分母的数据来自不同精度、不同采样窗口的采集点。这篇从 PDU 级计量出发&…

2026/9/29 12:54:48

ffmpeg安装与实战:从环境变量配置到视频处理命令详解

简介:面向Linux用户的ffmpeg安装教程资源,以docx文档形式呈现,内容涵盖依赖包安装、编解码器配置、ffmpeg编译与常见故障排除。资源共1个文件,大小18KB,便于快速浏览与对照操作,适合需要搭建音视频处理环境…

2026/9/29 12:54:48

本地缓存与分布式缓存选型:Caffeine与Redis两级缓存实战

简介:本地缓存与分布式缓存,是后端架构设计里的常见选择难题。这份PPT用一整套幻灯片讲清两种缓存机制:先交代缓存以空间换时间、应对高并发读压力的本质,再逐一对比本地缓存的命中速度快、适合小数据量存储,但存在集群…

2026/9/29 12:54:48

802.11ax-2021标准解读:从草案到正式版的Wi-Fi 6实战避坑指南

简介:802.11ax协议标准2021版是电气和电子工程师协会于2021年2月批准发布的官方标准,面向无线网络研究人员、通信工程师及网络协议学习者,系统定义了从1吉赫到7.125吉赫频段内高效率无线局域网的媒体接入控制层与物理层规范,并将正…

2026/9/29 12:54:48

802.11ax部署避坑指南:OFDMA、TWT与BSS Coloring关键参数调优

简介:802.11ax协议标准2021版(IEEE Std 802.11ax-2021)是IEEE 802.11工作组发布的官方正式修订文件,面向无线网络研发工程师、协议测试人员及高校通信专业学生,用于研究高吞吐、低延迟的WLAN实现方案。整份内容为1个英…

2026/9/29 12:54:48

常州联合靠谱吗

锚定制造根脉,践行线缆配套的时代使命 顺应产业升级浪潮,锚定实体制造方向在国内装备制造产业向精细化、专业化升级的浪潮中,下游制造端对核心配套部件的可靠性要求不断提升,小到线缆线束这样的基础配套,也成为影响整机…

2026/9/29 12:49:47

用Dify工作流搭建AI应用自动复盘系统,让静默故障无处遁形

说句实话,我做AI应用开发这两年,最头疼的从来不是“怎么让模型回答得更聪明”,而是“怎么发现它已经在犯蠢了”。模型在测试集上表现再好,一上线面对真实用户,各种奇奇怪怪的输入就会把它打回原形。前阵子我搭了个叫hi…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/28 6:05:15

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 0:04:04

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:04:04

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑