
【Linux 维测及Crash 专栏】
文章平均质量分 80
主要介绍系稳定性分析内容包含Linux 和 RTOS,以及维测工具 crash 的安装使用以及相关命令使用介绍
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
主公讲 ARM
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生
展开
-
【LInux 维测专栏 1 -- printk extension 介绍】
是一个平台特定的扩展选项,用于在某些架构或平台上定制化printk行为。具体的实现和作用因平台而异,主要用于满足特定硬件或调试需求。原创 2025-03-24 09:14:23 · 85 阅读 · 0 评论 -
【Linux 维测专栏 1 -- Hung Task 分析与验证】
Hung Task 是 Linux 内核中的一个检测机制,用于监控长时间处于 D 状态(不可中断睡眠状态) 的任务(进程或线程)。如果某个任务在 D 状态停留时间过长,内核会认为该任务可能已经“挂起”(Hung),并触发相应的警告或调试信息,帮助开发者定位问题。原创 2025-03-21 22:33:57 · 246 阅读 · 0 评论 -
【Linux 维测专栏 5 -- linux pstore 使用介绍】
pstore(Persistent Storage)是 Linux 内核的一个功能模块,用于在系统崩溃(如内核 panic)或重启时,将调试信息(如日志、堆栈跟踪等)持久化保存到非易失性存储介质(如闪存、EFI 变量等)。pstore 的主要目的是帮助开发者和系统管理员分析系统崩溃的原因。原创 2025-03-21 22:22:16 · 385 阅读 · 0 评论 -
【Linux 维测专栏 2 -- Deadlock detection介绍】
【代码】【Linux 维测专栏 2 -- Deadlock detection介绍】原创 2025-03-21 22:11:08 · 344 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 2.2 -- Crash 命令 Crash Usage】
转储任务的打开文件描述符数据;最有用的是每个打开文件描述符的文件、dentry 和 inode 结构地址。还可以转储地址空间中每个页面的物理地址,或者如果没有映射,显示其在文件或交换设备中的位置。工具的功能来调试特定的内核问题。通过使用这些命令,用户可以深入了解内核崩溃的原因和细节,从而有助于更有效地解决问题。: 读取内存,可以是内核虚拟、用户虚拟或物理内存,并以多种格式和大小显示。: 转储任务的虚拟内存映射,包括关于组成任务地址空间的每个。调试内核崩溃转储的步骤不是固定的,使用的。原创 2024-11-05 13:51:39 · 186 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 2.1 -- Crash 命令 Session Control 集合】
这些命令提供了一种灵活而有效的方式来管理和控制。会话,使用户能够更好地调试和分析内核问题。以下命令有助于高效地运行。原创 2024-11-05 11:26:32 · 357 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 2 -- Crash 命令 Utility Functions 集合】
这些命令为用户提供了强大的工具,用于处理和分析内核和用户空间的内存及相关数据,这在内核调试和问题解决过程中尤为有用。以下命令是一组有用的辅助命令,具有各种用途,有些简单,另一些则相当强大。原创 2024-11-05 11:23:41 · 82 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.9.2 -- Crash 命令 System State 集合】
将 PTE 的内容翻译为其物理页面地址和页面位设置,或者如果它引用了交换位置,则显示交换设备和偏移量。这些命令提供了深入了解系统状态和内核资源的工具,帮助用户在调试和分析过程中更加有效地理解和管理问题。其他选项显示关于系统调用表的信息,其中一个选项允许 root 用户使实时系统 panic。引用的每个虚拟页面翻译为其物理地址,或如果不驻留,则显示其文件和偏移量。还可以显示进程到 init 进程的父层次结构,或显示某任务的所有子任务。的内容翻译为其位设置代表的信号名称。的标志,或显示任务的。原创 2024-11-05 11:06:57 · 171 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.9.1 -- Crash 命令 System State 集合】
任务特定的命令是上下文敏感的,这意味着它们作用于当前上下文,除非指定了 PID 或任务地址作为参数。此外,给定一个地址,该命令在符号表、slab 子系统、自由列表、page_hash_table、vmlist 和 mem_map 数组中搜索,并显示其被找到的位置。更重要的是,如果可用,它加载模块对象文件的调试数据,允许内核模块的符号调试功能。: 显示引用指定文件名或 inode 地址作为当前根或工作目录、打开文件描述符或 mmap 文件的任务列表。命令,显示任务的内核堆栈回溯,包括完整的异常帧转储。原创 2024-11-05 09:49:31 · 483 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.9 -- Crash 命令集合】
这些命令为用户提供了强大的工具来检查和分析内核内存中的数据结构及其符号信息,使内核调试和分析过程更为高效和直观。本节将命令集按类别划分,并简要描述每个类别中的命令。完整的细节和示例可以通过。工具的每个命令的内置帮助页获得。原创 2024-11-05 09:47:32 · 81 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.8 -- Crash Builtin Help 介绍】
工具时快速获取所需的信息和指导,以便更有效地调试和分析内核。选项从 shell 命令行显示相同的帮助页面。最后,有关命令输入和输出的信息可以在运行时通过输入。后跟命令名称来显示命令的帮助页面。工具内置了丰富的帮助信息。来显示,或者通过从 shell 命令行输入。通过这些内置帮助功能,用户可以在使用。命令的帮助信息,可以使用。会话期间,可以通过输入。如果出于某种原因无法启动。原创 2024-11-05 09:46:52 · 75 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.7 -- Crash Context 介绍】
另外,当前上下文可以设置为在给定 CPU 编号上运行的任务,或返回到发生 panic 的任务。命令是 “context-sensitive” 的,即从当前上下文的视角执行。因此,上下文敏感命令的输出可能会因当前上下文的不同而有所不同。如果不带参数地执行,它将显示当前上下文的打开文件数据。会话后,会选择一个现有的 Linux 任务作为当前上下文。命令不接受 PID 或任务地址作为参数,因此需要注意用户空间访问将来自当前上下文的地址空间。除非指定 PID 或任务地址作为参数,否则输出将反映当前上下文的数据。原创 2024-11-05 09:46:03 · 70 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.6 -- crash 命令输出语法介绍】
工具的命令输出通常相当详细,为了更好地控制输出并能够向后滚动查看之前的命令输出,默认情况下,超出用户显示屏的命令输出将通过管道传输到。此外,命令输出可以使用标准 shell 重定向语法重定向至管道或文件。,这通常在使用内置 GDB 功能打印格式化数据结构时最为明显。,并附带提示行,告知用户如何向前、向后滚动或退出命令。当命令的输出重定向到管道或文件时,对于该命令的默认。工具用户可以更灵活地查看和处理详细的内核调试信息。这种默认的输出滚动行为可以通过在用户。通过这些命令和配置选项,例如,在实时系统上,原创 2024-11-05 09:45:18 · 70 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.5 -- crash 命令输入语法介绍】
无论使用哪种编辑模式,任何之前输入的命令行可以通过输入模式特定的按键来调出,使用适当的模式编辑命令行,然后通过回车运行。命令使用 GNU Readline 库进行收集,可以利用其命令行历史机制,以及。命令行历史是之前运行过的命令的编号列表。提示符,接着可以交互式输入命令(除非文件中的命令之一是。在上述三种情况下,文件中的命令列表完成后,将出现。可以通过以下方式将包含命令列表的输入文件传递给。数字参数通常被认为是十进制的,除非参数中包含。,一些命令只接受十六进制数字参数。,在这种情况下,不需要前缀。原创 2024-11-05 09:44:09 · 212 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.4 -- Crash 工具调用】
对于 RHEL3、RHEL4、RHEL5 和 RHEL6 内核,访问调试数据的方式在后续章节中描述。工具将读取内核对象文件和转储文件,并开始对内核崩溃进行分析。输出中将显示内核版本信息、加载的模块、进程列表等有用的调试信息,让用户可以深入分析崩溃原因。在 RHEL4、RHEL5 和 RHEL6 系统中,由于在 x86 和 x86_64 系统上限制。指示)匹配的内核对象文件为止。如果找到匹配的内核对象文件,则可以简单地通过以下命令在实时系统上调用。时,如果内核对象文件位于以下任一目录中,则不需要指定。原创 2024-11-04 14:39:51 · 715 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.3 -- Crash工具编译过程】
从 RHEL3 版本开始,如果在系统安装时选择了开发工具包集(Development Tools),根据主机系统的速度,完整构建可能需要几分钟,主要是由于 GDB 部分的构建时间较长。工具的源文件通常以两种典型格式打包:压缩的 tar 映像或源 RPM 文件。工具未预安装,并且目标系统上满足所有依赖项,可以通过以下步骤安装二进制。,或者如果在系统安装时没有选择,需要手动安装二进制 RPM,通过以上步骤,你可以在系统上成功构建和安装。最后,安装生成的二进制 RPM,将。使用包管理工具安装 RPM 包,原创 2024-11-04 14:06:23 · 721 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.2 -- Crash 工具依赖内容】
工具可以在多个平台和内核版本上有效地进行内核分析和调试,为开发人员提供强大的问题解决能力。通过满足上述前提条件,原创 2024-11-04 13:46:47 · 521 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1.1 -- Crash 工具功能概述】
crash工具是一个强大的 Linux 内核调试和分析工具,最初基于 SVR4 UNIX 的crash命令,但经过显著增强,完全与 GNU GDB 调试器结合在一起。这样的结合有效地将传统 UNIXcrash工具的内核特定特性与 GDB 的源代码级调试能力结合在一起。crash实时 Linux 系统:可以在系统运行时进行实时分析。Linux 内核核心转储通过kdump功能创建的转储。通过命令创建的压缩内核核心转储。通过 Red Hat Netdump 和 Diskdump 功能创建的核心转储。原创 2024-11-04 11:16:20 · 1325 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 4 -- 栈分类】
在系统启动阶段一般都是先通过汇编代码进行部分处理,比如 data 段中的数据copy, 及 bss 段的清零,然后一般会跳转到C代码,在使用C代码之前需要设置好栈的地址。代码实现的函数通过反汇编可以看到:在函数之间的调用处会保存一些关键信息,比如 PC/LR/SP/FP,及相关参数到栈中,所以在跳转到 C 代码之前一定要配置好栈的地址。),也即 在多线程系统中,每个线程都是独立的、互不干扰的,所以要为每个线程都分配独立的栈空间。中断的打开也是在调度器启动的第一个线程前打开的。原创 2022-12-02 11:59:06 · 763 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 3 -- 栈溢出】
是一块分配在栈之下的一块内存空间(假设栈stack是向下生长的),如图 2 所示,这样当栈 stack下溢时,就能在保护区留下痕迹 trace。,当子函数调用过程中,并不会去改变这些值的时候,就不需要压栈,说白了,压栈的目的就是为了在使用完的时候能恢复原来的状态。每个进程都会有自己的栈空间,而进程中的各个函数也会维护自己本身的一个栈的区域,这个区域就是。一般栈向下生长,即从高地址到低地址,如果栈空间不足,发生下溢,则栈之下的内存空间被写入。把栈空间填充成固定的值可以检测栈空间的下溢,如在程序开始前填充。原创 2022-12-01 17:58:17 · 1811 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 1 -- Crash 工具简介】
还可以准备好系统,以便在系统崩溃的情况下引导进入另一内核。值得一提的是,crash也可以用来分析实时的系统内存,是一个很强大的调试工具。由于kdump利用kexec启动捕获内核,绕过了 bootloader,所以第一个内核的内存得以保留。将捕获内核的地址传递给生产内核,从而在系统崩溃的时候找到捕获内核的地址并运行。里面的某个寄存器里面写个值,来表明重启的原因,当再次重启的时候,会去读该寄存器,获取重启的原因。系统一旦崩溃,内核就没法正常工作了,这个时候将由 kdump 提供一个用于捕获当前运行信息的内核,原创 2022-12-01 16:03:33 · 2732 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 2 -- Kernel Lockup】
Softlockup用于检测系统调度是否正常,即软锁的情况,当发生Softlockup时,内核不能调度,但还能响应中断,使系统呈现 “软 hung 死的状态”(CPU 上还是有程序在跑着,就是没法让别人来抢占它了而已,所以用户看起来系统不能切换任务了,像 hung 死了一样。主要是发现某个 cpu 因为长期的情况。由于某种原因导致系统处于内核态超过10s导致中断无法运行(hard lockup)。原创 2022-12-01 16:30:35 · 1752 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 13 -- gdb 反汇编 disassemble 命令详细介绍及举例】
llist命令用于显示当前源代码的行列表,包括当前行以及周围的几行代码。这对于查看代码的上下文非常有用。例如,你可以使用llist命令来显示当前行及周围的105 {7101214 }(gdb)这将显示源代码的当前行周围的文本。: 这个命令用于查看汇编代码。或者查看指定函数(gdb)从上面的信息可以看到gdb并没有对函数foo进行反汇编,而是报出错误,然我感到甚是疑惑!!!, 网上搜了一大圈也没找到原因!!后来发现是在使用gdb时没有设置断点。原创 2023-08-21 12:41:29 · 2323 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进12 -- GDB内存查看命令 “x“(examine)】
是GDB中x命令的全称,用于检查内存中的内容。这个命令非常强大,可以以多种格式显示内存内容。表示以字节为单位,显示四个单位,以十六进制格式显示。所以,给定的内存地址。表示以指令为单位,显示一个单位。所以,给定的内存地址。开始的四个字节的值分别是。原创 2023-08-19 11:53:41 · 1121 阅读 · 1 评论 -
【ARM RT-Thread 系统稳定性分析入门及渐进 1 -- ASSERT(0) 流程跟踪】
assert()如果表达式为false (0), 程序将报告错误,并终止执行;如果表达式不为0,则继续执行后面的语句。这个宏通常用来判断程序中是否出现了明显非法的数据,如果出现了,则终止程序以免导致严重后果,同时也便于查找错误。assert 宏定义(EX)) \ {\ }(EX)) \ {\ }(EX)) \ {\ }if(EX)) \ {\ }!原创 2023-01-30 15:41:53 · 1588 阅读 · 2 评论 -
【ARM Linux 系统稳定性分析入门及渐进10 -- GDB 初始化脚本介绍及使用】
这个功能特别有用,特别是当你有一组通常会执行的GDB命令时,你可以将这些命令保存在一个文件中,然后使用source命令来运行这些命令。参数用于指定一个包含GDB命令的文件,GDB会在启动时执行该文件中的命令。是一个GDB的初始化脚本文件,当你启动GDB时,GDB会自动从当前目录打开并读取。文件中的命令在每次GDB启动时都会被执行,这样你就无需每次都手动进行这些设置了。在这个例子中,GDB会在运行时自动在main函数处设置一个断点,并开始运行程序。命令时,你可以将这些命令保存在一个文件中,然后使用。原创 2023-08-19 10:14:19 · 830 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进 5 -- kernel hung task 工作原理】
内核线程使用的 completion, mutex, wait even等同步机制,且超过CONFIG_DEFAULT_HUNG_TASK_TIMEOUT 没被唤醒, 比如嵌套使用 mutex 锁导致内核某进程/线程长期处于D状态,无法唤醒。的每一个进程(任务),统计它们在两次检测之间的调度次数,如果发现有任务在两次监测之间没有发生任何的调度,则可判断该进程。(2) 如果系统已经处于crash状态了,就不在报hung task了;(1) hung task检测的最大进程数,默认为最大的进程号,原创 2023-01-31 18:27:30 · 1277 阅读 · 0 评论 -
【ARM Linux 系统稳定性分析入门及渐进11 -- GDB( print 和 p 的使用| @ 和 ::的使用|ptype|{<type>} <addr> )】
在GDB中,你可以使用的形式来将一个地址转换为特定的类型。这在处理低级别的内存操作时非常有用。在这个例子中,表示将地址0x40063c转换为float*类型的指针,然后运算符获取这个指针指向的值。结果是,这个地址上存储的浮点数3.14159被正确地读取出来。注意,这种形式对于处理复杂的数据类型也非常有用,例如结构体或类。你可以使用这种形式来获取存储在特定地址的数据的成员。$2 = 42在这个例子中,地址0x40063c被转换为MyStruct*类型的指针,然后使用->运算符来获取a成员的值。原创 2023-08-19 11:41:55 · 374 阅读 · 0 评论