![[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了?](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_lwibxfi.jpg?x-oss-process=style/watermark&x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了?
这篇文章探讨了Linux内核中一种特殊的函数定义方式,作者在阅读代码时遇到了无法找到某些函数定义的问题,如`folio_test_active()`。通过深入研究,作者发现这些函数是通过宏定义如`PAGE_TYPE_OPS()`和`FOLIO_FLAG()`在`/include/linux/page-flags.h`中定义的。文章详细解释了这些宏如何工作,以及如何通过它们生成函数定义。总结部分指出,这种探索过程虽然艰辛,但对于喜欢阅读代码的人来说,发现和理解这些机制是非常有趣且有益的。

【深入内核】ARM64下的内核栈

【深入内核】内核printk原理介绍
printk 是 Linux 内核用于输出调试信息的接口,通过 log buffer 存储日志信息,并在系统出现问题后记录错误信息。文章详细介绍了 printk 内核框架,包括 printk 接口的作用、log buffer 的设计和初始化、log buffer 的数据结构,以及 printk 函数的流程。文章还分析了 printk ring buffer 的写入过程,包括 prb_reserve、printk_sprint 和 prb_commit 等函数的核心作用。最后,文章通过 trace32 读取 printk_ringbuffer 在内存中的数据,并解释了 printk_ringbuffer 在内存中的增长方向,使读者对环形缓冲区的整体印象更加清晰。
![[LRDP2] 解析插件之dmesg](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_cwpagxm.webp?x-oss-process=image/resize,w_800,m_lfit)
[LRDP2] 解析插件之dmesg
Linux ramdump parser工具通过解析离线ramdump文件中的内核日志来诊断系统问题。该工具的核心功能是通过DmesgLib类实现的,该类负责读取和分析内核日志。DmesgLib类首先通过读取内核内存中的printk_ringbuffer结构来定位日志数据,然后初始化环形缓冲区参数,包括描述符数量、数据区大小等。接下来,DmesgLib类遍历描述符,提取日志文本,并解析元数据,如时间戳和调用者ID。最后,DmesgLib类将提取到的日志数据格式化输出,可以是写入文件或返回结构化数据。解析dmesg的核心在于理解printk_ringbuffer结构,该结构是内核日志的存储和管理机制。
![[Linux Ramdump Parser] 解析的核心Ramdump实例类的初始化](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_wgbocis.webp?x-oss-process=image/resize,w_800,m_lfit)
[Linux Ramdump Parser] 解析的核心Ramdump实例类的初始化
本文档介绍了Linux ramdump parser工具Ramdump.py的核心数据结构Ramdump,并详细解释了其常用接口和初始化流程。Ramdump.py定义了一个庞大的类,其中包含多个函数结构,了解这些接口的原理对于后续插件开发至关重要。文档重点介绍了get_kernel_version、address_of、field_offset、container_of、read_cstring、read_structure_field、read_structure_cstring等常用接口的功能和用法,并解释了Ramdump类的初始化过程,包括解析Kconfig、解析kernel symbols table、检测vmlinux和dump是否匹配、加载module symbols等步骤。最后,文档提到了插件解析dump的逻辑角度,并从内核知识点的角度进行了分析。
![[Linux Ramdump Parser] 解析的入口ramparse.py](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_wjoyifw.webp?x-oss-process=image/resize,w_800,m_lfit)
[Linux Ramdump Parser] 解析的入口ramparse.py
这篇文章主要介绍了Linux Ram Dump Parser的运行原理。该工具通过解析ramdumps文件,提取内核和用户空间的信息,并支持动态插件加载。 主要内容包括: 解析参数、动态插件注册、配置GNU工具、RamDump结构体初始化、打印kernel cmdline、插件模块的解析、创建trace32脚本
![[Android稳定性] 第057篇 [方法篇] 高通平台使能ftrace的方法](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_vgzfxyz.webp?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第057篇 [方法篇] 高通平台使能ftrace的方法
本文介绍了Linux内核中的Ftrace工具,用于跟踪和分析内核行为。文章详细讲解了使能Ftrace的方法,包括设置相关开关和打开内核trace相关的defconfig。文章还介绍了如何确认Ftrace是否被使能以及查看Ftrace日志的方法。最后,文章提供了一些参考资料供读者深入了解Ftrace。
![[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗?](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_woensf8.jpg?x-oss-process=style/watermark&x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗?
笔者水平较低,如有错误欢迎各位看官老爷指正,Thanks♪(・ω・)ノ 笔者忽然高产了起来,原因是因为笔者总算是搞明白了一个近几天一直困扰自己的问题,为什么网上一些帖子说do_anonymous_page只用来处理私有匿名映射呢? 看到这个函数,下意识就会觉得其实它是用来处理所有匿名映射的才对啊。
![[Android稳定性] 第056篇 [问题篇] 记一例Kernel panic - not syncing: Attempted to kill init!](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_nkcbuym.png?x-oss-process=style/watermark&x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第056篇 [问题篇] 记一例Kernel panic - not syncing: Attempted to kill init!
问题现场 笔者第一次遇到类似问题,首先查看当时的kernel log,定位到的异常是大量的I/O ERROR以及read ERROR,初步怀疑跟storage访问相关。 继续看log,会发现许多设备在走shutdown流程,比如说第四行开始的log,就是下电时需要把缓存写进storage,在完成一些
![[Android稳定性] 第055篇 从dump信息角度学调度schedule](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/08/halo_1oshjvi.webp?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第055篇 从dump信息角度学调度schedule
本文分析了Linux内核中进程调度的流程和上下文切换的细节。在调度过程中,首先关闭抢占,然后调用核心调度函数__schedule,该函数会关闭抢占,选择下一个任务,切换上下文,并最终切换到下一个任务的执行。上下文切换涉及到保存上一个进程的上下文,加载下一个进程的上下文,并最终切换到下一个任务的执行。
![[Android稳定性] 第054篇 [方法篇] 高通平台如何解析ADSP Crash?](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/07/halo_1qepeee.png?x-oss-process=style/watermark&x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第054篇 [方法篇] 高通平台如何解析ADSP Crash?
本文主要介绍了使用crashman工具解析adsp的方法。首先,需要准备crashman工具、python环境和perl工具。然后,准备解析所需的三个部分:fulldump中的DDRCS0_0.BIN、bp symbols和adsp源码。接下来,通过执行特定的python命令进行解析,并使用ONEMORE集成工具中的adsp crash解析插件来简化解析过程。安装插件前需安装基础工具包。最后,根据工具选项卡中的选项填写相关信息,点击运行即可进行解析。

ONEMORE开源软件插件开发指南
OneMore 是一款高度自定义的集成工具,由 PyQt6 和 fluent-widgets 开发,采用侧边导航栏和新建标签页的方式呈现工具功能。OneMore 框架设计包括通用接口、资源文件、主窗口、界面设计界面、账号登录界面、设置界面、通用工具和插件安装目录等。已实现功能包括登录界面、设置界面、导航栏、标签页、插件执行页面、插件市场和软件在线更新插件功能。插件开发指南包括插件组成元素、插件 interface 和插件上传。OneMore 遵循 GPL 协议,允许二次开发,但必须标注原作者。