设计
===
当一个内核转储发生的时候kdump使用kexec启动一个备份
的内核
。这个备份启动的内核只是使用少量的内存,并且这些内存由第一个内核提供
。这样设计保证了第一个内核启动且正在运行中的DMA不会破坏第二个内核的运行
。
在内核崩溃之前所有关于核心映像的必要信息
都用ELF
格式编码并存储在保留的内存区域中。ELF头所在的物理地址
被作为命令行参数(fcorehdr=
)传递给新启动的转储内核。
在i386体系结构上,启动的时候需要使用物理内存开始的640K
,而不管操作系统内核转载在何处。因此,这个640K的区域在重新启动第二个内核的时候由kexec备份
。
在第二个内核中,“前一个系统的内存”可以通过两种方式访问:
- 第一种方式是通过/dev/oldmem
这个设备接口。一个“捕捉”设备可以使用“raw”(裸的)方式 “读”这个设备文件并写出到文件。这是关于内存的 “裸”的数据转储,同时这些分析/捕捉工具应该足够“智能”从而可以知道从哪里可以得到正确的信息。ELF文件头(通过命令行参数传递过来的elfcorehdr
)可能会有帮助。
- 第二种方式就是通过/proc/vmcore
。这个方式是将转储输出为一个ELF格式的文件,并且可以方 便使用一些文件拷贝命令(比如cp,scp等等)将信息读出来。同时,gdb可以在得到的转储文件上做一些调试(有限的)。这种方式保证了内存中的页面都以正确的途径被保存。(注意内存开始的640K被重新映射了
)
安装/设置
=======
1)使用root用户登录系统。
2)下载upstream
kexec-tools
用户空间包,下载地址:
http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz.
3)解包:
tar xvpzf kexec-tools-1.101.tar.gz
4)从下列地址得到最新的kdump补丁。
http://lse.sourceforge.net/kdump/
如果所有关于用户空间支持kdump的补丁都已经集成到了upstream kexec-tools中那么这一步可以被省略。
5)cd到解包得到的目录:
cd kexec-tools-1.101
6)使用patch命令应用补丁:
patch -p1 < /path-to-kdump-patch/kexec-tools-1.101-kdump.patch
(注意使用正确的补丁目录和补丁文件)
7)配置这个包,使用如下命令:
./configure
8)编译包:
make
9)安装这个包:
make install
下载并构建系统内核和“转储-捕捉”内核
==============================
下载内核主版本树上的源码(从http://www.kernel.org),注意选择合适版本的内核(高于2.6.13-rc1版本)。需要编译两个内核:一个“系统内核”和一个“转储捕捉”内核
。要使这个特性得以实现并工作需要相应的编译两个内核。
遵照以下的步骤以配置内核使用合适的kexec和kdump功能:
系统内核
-------
1)编译内核时要确认选中了“kexec system call
”选项(在“处理器类型和功能”区域)。
CONFIG_KEXEC=y
2)编译内核时要确认选中了“sysfs file system support
”(在“文件系统”->“伪文件系统”区域)。这通常是默认选中的。
CONFIG_SYSFS=y
注
意:在“Configure standard kernel features (for small
systems)”没有被使能(在“General Setup”区域)时“sysfs file system
support”可能出现在“Pseudo filesystems"菜单中。在这种情况下,检查.config文件以确保sysfs被打开。可以参考:
grep 'CONFIG_SYSFS .config
3)在“kernel hacking”区域中选中“Compile the kernel with debug info
”:
CONFIG_DEBUG_INFO=Y
这样就可以使编译内核的时候带上调试用的符号,转储分析工具需要一个带有调试信息的vmlinux(内核文件)来调试分析转储文件。
4)编译内核和模块并安装之。更新启动管理器(比如grub,lilo,yaboot等等)的配置文件。
5)引导系统内核时使用引导参数:crashkernel=Y@X
。
注意要使用合适的X和Y的值。Y的值表示要为第二个内核保留多少内存,X的值表示保留的内存区开始的物理
地址
。例如:crashkernel=64M@16M 告诉系统内核保留64MB内存给“转储捕捉内核”使用,这64MB内存从物理地址0x01000000开始。
在x86和x86_64平台上,使用"crashkernel=64M@16M"
在ppc64平台上,使用"crashkernel=128M@32M"
转储捕获内核
----------
1)在“general setup”选项下,附加“-kdump”到“Local version”
后面。
2)在x86平台上,在“Processor type and features”选项下使能高端内存支持:
CONFIG_HIGHMEM64G=y
或者:
CONFIG_HIGHMEM4G=y
3)在x86平台上,去掉对称多处理器的支持,在“Processor type and features”:
CONFIG_SMP=n
(如果不小心设置成了y,那么在启动转储捕获内核的时候给内核传递:maxcpus=1
这样的命令行参数,参见“Load the Dump-capture Kernel”)
4)在ppc64平台上,去掉NUMA的同时加上EMBEDDED支持:
CONFIG_NUMA=n
CONFIG_EMBEDDED=y
CONFIG_EEH=N
for 转储捕获内核
5)加上“kernel crash dumps”支持,位置在“Processor type and features”:
CONFIG_CRASH_DUMP=y
6)为“Processor type and features”->“Physical address where the kernel is loaded”设置合适的值。
注意,这个选项只可能在选中了“kernel crash dumps”选项之后出现。默认值是0x1000000(16MB)。这个值应当和上面讨论到的命令行选项“crashkernel=Y@X”中的“X” 的值相对应
。
在x86和x86_64平台上,使用“CONFIG_PHYSICAL_START=0x1000000”
在ppc64平台上,当CONFIG_CRASH_DUMP被设置了那么就会自动给这个值赋值为32MB
7)可选择的使能“/proc/vmcore support”(在“Filesystems”->“Pseudo filesystems”选项下)。
CONFIG_PROC_VMCORE=y
(CONFIG_PROC_VMCORE 是在打开“CONFIG_CRASH_DUMP”选项时自动打开的一个选项。)
8)编译并安装内核和模块。但是:__不要__将这个内核加入到启动管理器可管理的内核列表中
。
载入“转储捕捉”内核
===============
当引导系统内核时,使用如下步骤和命令载入“转储捕捉”内核:
kexec -p <dump-capture-kernel> \
--initrd=<initrd-for-dump-capture-kernel> --args-linux \
--append="root=<root-dev> init 1 irqpoll"
关于装载“转储捕捉”内核的注意事项:
* <转储捕捉内核>应当是一个vmlinux格式
的映像(即就是一个未压缩的ELF映像文件)而不能是bzImage格式。
*
默认情况下,ELF文件头采用ELF64格式存储以支持那些拥有超过4GB内存的系统。但是可以指定“--elf32-core-headers”标志以
强制使用ELF32格式的ELF文件头。这个标志是有必要注意的,一个重要的原因就是:当前版本的GDB不能在一个32位系统上打开一个使用ELF64格
式的vmcore文件。ELF32格式的文件头不能使用在一个“没有物理地址扩展”(non-PAE)的系统上。(即是说,少于4GB内存的系统)
* 一个“irqpoll”的启动参数可以减低由于在“转储捕获内核”中使用了“共享中断”技术而导致出现驱动初始化失败这种情况发生的概率。
* 必须指定<root-dev>,指定的格式是和要使用根设备的名字。具体可以查看mount命令的输出。
* “init 1”这个命令将启动“转储捕捉内核”到一个没有网络支持的单用户模式。如果你希望有网络支持,那么使用“init 3”。
内核失败
=======
当使用上面提到的步骤成功地载入了“转储捕捉内核”之后,“系统崩溃”事件被触发之后系统将重启到“转储捕捉内核”。触发点将被放置到内核的“panic()”函数,“die()”函数,“die_nmi()”函数和sysrq(ALT+SysRq+c)处理句柄中
。
如下所列的一些情况将会触发“系统崩溃事件”:
如果一个硬锁定被探测到并且“NMI watchdog”配置了,那么系统将会重启到“转储捕捉内核”。(die_nmi())
如果die()函数被调用,并且调用die()函数的线程恰好是pid为0或1;或者die()函数在一个中断处理上下文中被调用;或者die()函数被调用且“panic_on_oops”被设置了,那么系统都将重启到“转储捕捉内核”。
在一个powerpc的系统上,当一个“软重启”产生,die()函数将在所有的cpu上被调用并且系统将重启动到“转储捕捉内核”。
如果是为了测试,有三种方式可以采用:
a)使用“ALT+SysRq+c
”组合键;
b)使用如下命令:echo c > /proc/sysrq-trigger
;
c)自己写一个内核模块强制产生“内核失败”;
读出转储文件
==========
在“转储捕捉内核”启动完毕之后,使用如下命令以读出并保存“转储文件”:
cp /proc/vmcore <dump-file>
除此之外,也可以通过线性的访问/dev/oldmem这个设备从“转储的内存”中得到“裸数据”,参考如下命令:
mknod /dev/oldmem c 1 12
使用dd命令,加上适当的count参数,bs参数,跳到特定的产生dump的点。使用如下命令可以看到整个内存:
dd if=/dev/oldmem of=oldmem.001
分析
===
在开始分析“转储文件”之前
,应该确定重启到一个稳定的内核。
可以使用GDB在“从/proc/vmcore拷贝得到的‘转储文件’”上做有限的分析。分析的时候需要“带有调试信息的vmlinux文件”(编译的时候带有-g选项),运行如下命令:
gdb vmlinux <dump-file>
追踪处理器0上的任务的栈调用,显示寄存器,显示内存内容等可以工作的很好。
注意:GDB不能分析x86平台上以ELF64格式产生的“内核转储文件”。在一个最大内存为4GB的系统上,可以通过在“转储捕捉内核”上指定“--elf32-core-headers”标志来使用ELF32格式的文件头。
也可以使用Crash工具集来分析Kdump产生的“内核转储文件”。Crash可以在Dave Anderson的网站上找到,通过如下链接:
http://people.redhat.com/~anderson/
下一步工作
========
1)提供内核页面过滤机制,这样可以通过去掉内存中的空白页面有效的减小“内核转储文件”的大小,
2)可重定位的内核可以有助于“崩溃转储”机制维护多个内核,并且“系统内核”就可以支持“捕捉转储”。
联系人
=====
Vivek Goyal (vgoyal@in.ibm.com)
Maneesh Soni (maneesh@in.ibm.com)
商标
===
Linux是Linus Torvalds在美国或其他国家的一个商标。
分享到:
相关推荐
kexec工具一个内核转储发生的时候kdump使用kexec启动一个备份的内核。这个备份启动的内核只是使用少量的内存,并且这些内存由第一个内核提供。这样设计保证了第一个内核启动且正在运行中的DMA不会破坏第二个内核的...
- **Kexec和Kdump**:这两项技术被用于实现快速内核启动和崩溃转储,对于提高系统的稳定性和可维护性至关重要。 - **性能剖析**:书中详细讲解了如何使用各种工具进行性能分析,帮助优化系统性能。 - **跟踪技术**:...
ASP技术访问WEB数据库.docx
2010-2019年上市公司排污费数据 1、时间:2010-2019年 2、来源:上市公司披露BG 3、指标:代码、日期、名称、本期支出 4、范围:417家上市公司 5、相关研究:胡珺,宋献中,王红建.非正式制度、家乡认同与企业环境治理
内容概要:本文详细介绍了六轴桌面机械臂的上位机(PC)和下位机(单片机)源码实现及其应用场景。上位机使用Python编写,通过pyserial库进行串口通信,实现了用户交互和指令发送功能;下位机则使用Arduino平台,通过C/C++语言编写代码,实现了机械臂的动作控制。文中不仅展示了基本的通信协议和控制逻辑,还深入探讨了逆运动学计算、PID控制、数据同步等问题,并提供了多个实用的代码片段和调试经验。 适合人群:对机器人技术和嵌入式开发感兴趣的开发者,尤其是有一定编程基础和技术背景的人群。 使用场景及目标:适用于六轴桌面机械臂的开发和调试,帮助读者理解上下位机的协同工作原理,掌握机械臂控制的关键技术,如串口通信、逆运动学、PID调节等。 其他说明:文章强调了实际开发中的注意事项和常见问题,如数据同步、指令校验、运动规划等,并提供了一些优化建议和解决方案。此外,还提到了系统的扩展性和安全性措施,如限位保护和扩展接口的设计。
青藏高原降水的水汽来源及输送机制一直是国际水文气候学界关注的热点问题。由于高原地面观测站数量有限,且分布极不均匀,从而导致降水溯源存在很大不确定性。作者通过引入卫星降水数据来弥补站点观测降水的不足,从而对高原整体降水的水汽来源进行模拟性评估。作者通过1998-2018年间水汽追踪数值模型模拟高原整体降水的水汽来源,模型使用ERA-Interim再分析资料、TRMM卫星降水和GLDAS OAFlux蒸发作为数据驱动,并设置对比实验进行验证,最终生成高原整体降水的水汽来源月尺度数据。数据集内容包括:(1)青藏高原范围;(2)高原1998-2018年逐月降水水汽贡献数据,空间分辨率为1°×1°,单位:mm/mon;(3)高原1998-2018年逐月降水量。数据集存储为.nc、.shp和.xlsx格式,由8个数据文件组成,数据量为55 MB(压缩为1个文件,40.9 MB)。基于该数据集的分析研究成果已发表在《Environmental Research Letters》2020年15卷。Zhang, C. Moisture source assessment and the varying characteristics for the Tibetan Plateau precipitation using TRMM [J]. Environmental Research Letters, 2020, 15(10): 104003.
内容概要:本文详细介绍了利用MotorCAD进行32极36槽内转子永磁同步电机的设计过程,涵盖电磁场计算、极槽配合选择、绕组设计、磁钢布局、冷却系统设计等方面。通过分数槽配置、双层短距绕组、V型磁钢布局以及高效的冷却系统,实现了70kW输出、525rpm转速、2.5倍过载能力和高达5kW/kg的功率密度。文中还讨论了具体的参数设置及其背后的物理意义,如极距、绕组因数、磁钢涡流损耗控制等。 适合人群:从事电机设计的专业工程师和技术人员,尤其是对高功率密度和高性能电机感兴趣的读者。 使用场景及目标:适用于电动工程机械等需要短时爆发力的应用场合,旨在提高电机的功率密度和过载能力,同时确保高效稳定运行。 其他说明:文章提供了详细的参数配置代码片段,便于读者理解和复现设计过程。此外,还分享了一些实用的设计经验和优化技巧,如磁钢分段设计、转子冲片造型等。
标题Python网络课程在线学习平台研究AI更换标题第1章引言介绍Python网络课程在线学习平台的研究背景、意义、国内外现状和研究方法。1.1研究背景与意义阐述Python在线学习平台的重要性和研究意义。1.2国内外研究现状概述国内外Python在线学习平台的发展现状。1.3研究方法与论文结构介绍本文的研究方法和整体论文结构。第2章相关理论总结在线学习平台及Python教育的相关理论。2.1在线学习平台概述介绍在线学习平台的基本概念、特点和发展趋势。2.2Python教育理论阐述Python语言教学的理论和方法。2.3技术支持理论讨论构建在线学习平台所需的技术支持理论。第3章Python网络课程在线学习平台设计详细介绍Python网络课程在线学习平台的设计方案。3.1平台功能设计阐述平台的核心功能,如课程管理、用户管理、学习跟踪等。3.2平台架构设计给出平台的整体架构,包括前后端设计、数据库设计等。3.3平台界面设计介绍平台的用户界面设计,强调用户体验和易用性。第4章平台实现与测试详细阐述Python网络课程在线学习平台的实现过程和测试方法。4.1平台实现介绍平台的开发环境、技术栈和实现细节。4.2平台测试对平台进行功能测试、性能测试和安全测试,确保平台稳定可靠。第5章平台应用与效果分析分析Python网络课程在线学习平台在实际应用中的效果。5.1平台应用案例介绍平台在实际教学或培训中的应用案例。5.2效果评估与分析通过数据分析和用户反馈,评估平台的应用效果。第6章结论与展望总结Python网络课程在线学习平台的研究成果,并展望未来发展方向。6.1研究结论概括本文关于Python在线学习平台的研究结论。6.2研究展望提出未来Python在线学习平台的研究方向和发展建议。
内容概要:本文详细介绍了为西门子S7-1200 PLC开发的一个自定义堆栈程序。由于S7-1200未提供内置堆栈功能,作者使用SCL(Structured Control Language)编写了一个通用型堆栈功能块(FB),能够实现FIFO(先进先出)和LIFO(后进先出)的数据管理。该堆栈程序支持多种数据类型(如BOOL、REAL、DWORD等),并提供了入栈、出栈、清空等功能。文中还讨论了具体的实现细节,如边界检测、指针管理和环形缓冲区的设计,以及在实际工业环境中的应用效果。 适合人群:从事PLC编程、自动化控制系统开发的技术人员,尤其是熟悉西门子S7-1200系列PLC的工程师。 使用场景及目标:适用于需要临时存储和管理数据的应用场景,如生产线上的配方管理、设备故障回溯、日志记录等。通过自定义堆栈程序,可以提高数据处理效率,减少因缺乏内置堆栈功能而带来的不便。 其他说明:该堆栈程序已在实际生产环境中运行超过三个月,处理了大量数据,表现出良好的稳定性和性能。未来计划进一步优化,如改进为环形缓冲区以提升性能。
GIS在林业管理系统中的应用.pdf
C语言专业课程设计销售标准管理系统.doc
基于 Python 的高校学生职业推荐系统的设计与实现LW+PPT
内容概要:本文详细介绍了基于Simulink平台构建的电动汽车仿真模型,涵盖整车动力性测试(如最高车速、最大爬坡能力和加速时间)和NEDC工况下的能耗测试。模型由驾驶员模型、VCU控制模型、电机系统和电池系统四个主要部分构成,通过协同工作完成各项性能指标的仿真测试。文中还展示了多个关键环节的具体实现细节,如PID控制、扭矩限制、电池能量管理等。 适合人群:从事电动汽车研发的技术人员、高校相关专业师生、对电动汽车仿真感兴趣的工程爱好者。 使用场景及目标:①用于电动汽车的设计阶段,评估不同设计方案的动力性能和能耗水平;②作为教学工具,帮助学生理解电动汽车的工作原理和技术难点;③为企业提供技术支持,优化现有车型的性能表现。 其他说明:文中提供了大量MATLAB/Simulink代码片段,便于读者理解和复现实验结果。同时强调了模型的实际应用价值及其对未来电动汽车发展的指导意义。
2025年计算机二级考试C试卷及答案.doc
标题Django基于Python的毕业生去向反馈调查平台设计与实现AI更换标题第1章引言介绍研究背景、意义,分析国内外相关平台的现状,并阐述论文的研究方法和创新点。1.1研究背景与意义说明毕业生去向反馈的重要性及现有调查方式的不足。1.2国内外研究现状概述国内外在毕业生去向反馈调查平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在平台设计中的创新之处。第2章相关理论与技术介绍Django框架、Python语言以及相关的Web开发技术。2.1Django框架概述简述Django框架的特点、优势及其在Web开发中的应用。2.2Python语言基础概述Python语言的基本语法、特点及其在Web开发中的作用。2.3Web开发相关技术介绍与平台设计相关的Web前端技术、数据库技术等。第3章平台需求分析对毕业生去向反馈调查平台进行需求分析,包括功能需求和非功能需求。3.1功能需求分析详细阐述平台应具备的各项功能,如用户管理、问卷调查、数据分析等。3.2非功能需求分析分析平台的性能、安全性、易用性等非功能需求。第4章平台设计根据需求分析结果,设计平台的整体架构、功能模块和数据库。4.1平台整体架构设计给出平台的整体架构图,并说明各个组成部分的作用。4.2功能模块设计详细设计平台的各个功能模块,包括用户模块、问卷模块、数据分析模块等。4.3数据库设计设计平台的数据库结构,包括数据表的设计、数据关系的建立等。第5章平台实现与测试介绍平台的实现过程、关键代码以及测试方法和结果。5.1平台实现阐述平台的实现过程,包括开发环境的搭建、代码的编写等。5.2关键代码展示展示实现平台功能的关键代码片段,如用户认证、问卷调查等。5.3平台测试说明平台的测试方法,包括功能测试、性能测试等,并给出测试结果。第6章结论与展望总结论文的研究成果,指出平台的优点与不足,并展望未来的研究方向。6.
内容概要:本文详细介绍了使用C#实现TCP/IP客户端与服务器之间的数据交互,涵盖字节、整型、浮点数、字符串等多种数据类型的处理,并特别强调了中英文字符串的交互功能。此外,文章深入探讨了与西门子S7-200Smart工业设备的通讯方式,包括协议适配、字节序处理、数据帧构建等关键技术点。文中提供了丰富的代码示例,如TcpListener的初始化、客户端连接、数据读取与发送、以及针对工业设备的特殊数据处理方法。同时,作者分享了许多实践经验,如避免字节序错误、处理浮点数精度问题、使用Wireshark抓包工具等。 适合人群:具有一定C#编程基础,尤其是对网络编程和工业自动化感兴趣的开发者和技术爱好者。 使用场景及目标:适用于需要实现C# TCP/IP通信的项目,特别是涉及工业设备通讯的场景。目标是掌握TCP/IP通信的基本原理及其在工业自动化领域的应用,能够独立完成与西门子S7-200Smart设备的通讯开发。 其他说明:文章不仅提供理论讲解,还有大量实战代码和技巧分享,帮助读者快速理解和应用所学知识。建议读者在实践中结合Wireshark等工具进行调试,以便更好地理解数据传输过程。
腹部CT扫描 用于检测癌症的轴向切片 腹部CT扫描数据集 用于检测癌症的轴向切片 欢迎使用这个强大的数据集,该数据集以腹部CT扫描的轴向切片为特色,在诊断癌症的过程中收集。 该资源是医学影像爱好者的金矿,非常适合推进医疗技术的研究和构建创新工具! 该数据集包含在轴向切片中采集的腹部计算机断层扫描(CT),最初是为了识别癌症的体征而采集的。无论您是从事医学成像、图像分割还是自动诊断,这些图像都为探索和创新提供了绝佳的机会。 里面是什么? 可能是带有CT扫描的ZIP文件](93.9 MB)一个压缩的档案,其中包含腹部CT图像,可能是DICOM或其他标准医疗格式。打开它以显示完整的收藏! 你如何使用它 通过这些激动人心的应用程序释放您的创造力: 胃癌症检测:建立和测试算法,像专业人士一样在CT扫描中发现癌症迹象。 图像分割:掌握精确勾勒腹部器官和潜在肿瘤的艺术。 医学影像研究:突破CT图像分析和处理技术的界限。 标签 医学影像·图像分割·癌症·CT扫描
内容概要:本文详细介绍了基于西门子S7-224XP PLC和昆仑通态触摸屏的恒压供水一拖二控制系统。该系统不仅支持工频和变频切换,还能作为纯变频方案使用。硬件方面,采用224XP带两个串口连接触摸屏和MODBUS通讯,配备EM232模拟量输出模块发送控制信号。软件部分展示了关键的梯形图代码,包括主泵切换逻辑、双PID调节、工变频互锁等。此外,还提供了触摸屏组态建议,确保系统的高扩展性和灵活性。文中强调了调试技巧和注意事项,如模拟量输出的软件滤波、变频器故障信号隔离等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和恒压供水系统感兴趣的读者。 使用场景及目标:适用于需要主备泵轮换或同时运行的恒压供水系统。目标是帮助工程师理解和实施高效稳定的工变频互锁控制方案,提高系统的可靠性和适应性。 其他说明:文中提到的具体代码片段和硬件配置有助于实际项目的快速部署和调试。对于希望深入了解PLC编程和恒压供水系统的人来说,本文提供了宝贵的实践经验和技术细节。
20XX年农村信息化建设方案.docx
Arduino串口源代码100%好用.7z