[Linux Ramdump Parser] 解析的核心Ramdump实例类的初始化 5月前 评论
[Linux Ramdump Parser] 解析的核心Ramdump实例类的初始化

这篇文章主要介绍了Linux ramdump parser工具中的核心数据结构Ramdump类,以及其常用接口和初始化流程。Ramdump类负责解析和分析Linux内核的崩溃转储文件,并提供了一系列函数接口,以便开发人员可以基于它开发自己的插件。文章详细讲解了以下几个方面的内容: 1. **常用接口**:介绍了Ramdump类中一些常用的接口函数,例如`get_kernel_version`、`address_of`、`field_offset`、`container_of`、`read_cstring`、`read_structure_field`、`read_structure_cstring`和`read_elf_memory`等。这些接口函数分别用于获取内核版本号、获取符号地址、获取结构体成员的偏移量、根据指针获取结构体实例、从指定地址读取字符串、从结构体中读取成员变量和从ELF文件中提取字符串信息等。 2. **Ramdump类的初始化**:详细描述了Ramdump类在初始化过程中进行的操作,包括解析Kconfig配置文件、解析内核符号表、检测vmlinux和dump是否匹配以及加载模块符号表等。这些操作为后续的插件开发提供了必要的信息和基础。 3. **模块符号表加载**:介绍了如何加载模块符号表,包括获取模块符号路径、设置模块符号、解析模块符号和输出模块符号表等。这些操作使得开发人员可以方便地访问和分析模块中的函数和变量。 4. **插件开发**:最后,文章提到了如何使用Ramdump类开发插件,并分析了插件解析dump的逻辑。开发人员可以根据自己的需求,利用Ramdump类提供的接口函数,开发出各种功能强大的插件,以深入分析和调试Linux内核。 总而言之,这篇文章为开发Linux ramdump parser插件提供了详细的指导和参考,对于想要深入了解Linux内核和开发相关工具的开发人员来说,具有重要的参考价值。

[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗? 5月前 1 条
[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗?

文章摘要:本文探讨了Linux内核中do_anonymous_page()函数的作用,解释了它为什么只处理私有匿名映射。通过分析do_pte_missing()、vma_is_anonymous()、vma_set_anonymous()等函数,以及mmap_region()函数中的逻辑,文章得出结论:在mmap()流程中,只有私有匿名映射的vm_ops会被设置为NULL,从而被do_anonymous_page()处理。其他类型的映射,如共享匿名映射和文件映射,其vm_ops不为空,因此不会被该函数处理。

[Android稳定性] 第056篇 [问题篇] 记一例Kernel panic - not syncing: Attempted to kill init! 5月前 2 条
[Android稳定性] 第056篇 [问题篇] 记一例Kernel panic - not syncing: Attempted to kill init!

**问题现场**:系统出现大量I/O和read ERROR,初步怀疑与storage访问相关,进一步分析发现系统正在进行shutdown流程。 **初步分析**:系统当时正在走低电关机流程,且尝试访问磁盘数据时出现IO ERROR,怀疑是下电时序导致storage先下电,导致上层进程访问失败。 **平台回复**:charger相关函数检测到低电后直接调用kernel_power_off执行下电关机,跳过上层shutdown流程,导致上层访问存储设备失败,引发异常。 **解决方法**:删除底层shutdown操作,先走上层关机流程,避免问题发生。 **代码浅析**:正常情况下,上层先走完shutdown流程,再通过syscall让底层继续shutdown。 **补充**:在系统下电流程中,做好时序上的同步非常重要,避免出现竞态访问导致异常。

[Android稳定性] 第055篇 从dump信息角度学调度schedule 5月前 4 条
[Android稳定性] 第055篇 从dump信息角度学调度schedule

本文分析了Linux内核中进程调度的流程和上下文切换的细节。在调度过程中,首先关闭抢占,然后调用核心调度函数__schedule,该函数会关闭抢占,选择下一个任务,切换上下文,并最终切换到下一个任务的执行。上下文切换涉及到保存上一个进程的上下文,加载下一个进程的上下文,并最终切换到下一个任务的执行。

[Android稳定性] 第054篇 [方法篇] 高通平台如何解析ADSP Crash? 5月前 评论
[Android稳定性] 第054篇 [方法篇] 高通平台如何解析ADSP Crash?

本文主要介绍了使用crashman工具解析adsp的方法。首先,需要准备crashman工具、python环境和perl工具。然后,准备解析所需的三个部分:fulldump中的DDRCS0_0.BIN、bp symbols和adsp源码。接下来,通过执行特定的python命令进行解析,并使用ONEMORE集成工具中的adsp crash解析插件来简化解析过程。安装插件前需安装基础工具包。最后,根据工具选项卡中的选项填写相关信息,点击运行即可进行解析。

ONEMORE开源软件插件开发指南 5月前 1 条
ONEMORE开源软件插件开发指南

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

高通以及MTK平台内核单独编译ko的原理 5月前 评论
高通以及MTK平台内核单独编译ko的原理

这篇文章主要讨论了在Android项目开发中,如何进行内核模块(ko)的编译和打包到image中。文章首先介绍了ko编译原理,包括树外驱动和树内驱动的编译过程,并分别以高通平台和MTK平台为例进行了详细说明。 对于树外驱动,文章提到了高通平台中使用的ko编译模板`Build_external_kernelmodule.mk`,并解释了其核心指令`build_module.sh`的使用方法。同时,文章也提到了MTK平台的ko编译模板`build_ko.mk`,并指出了MTK项目中目前仍然使用make进行编译。 对于树内驱动,文章以高通平台为例,展示了如何使用bazel进行内核编译,并解释了相关指令的含义。同时,文章也提到了向内核编译时传递参数的方法。 接下来,文章讨论了ko如何打包到image中。文章指出,ko会被打包到`vendor_dlkm.img`中,并最终merge到`super.img`中。文章还介绍了如何通过`make vendor_dlkmimage`命令编译`vendor_dlkm.img`,并通过fastboot命令将其刷入设备。 最后,文章提醒读者注意,由于Android版本和kernel版本的变化,编译方式和产物路径可能会有所差异,因此本文仅供参考。

[Linux进程调度] 第001篇 一篇文章全面了解Linux进程调度 6月前 评论
[Linux进程调度] 第001篇 一篇文章全面了解Linux进程调度

进程调度是操作系统确保进程高效运行的核心机制,决定哪个处于运行状态的进程能够投入运行以及运行时间。Linux 2.6内核引入了内核抢占特性,允许多个执行流交叉执行。进程和线程的生命周期包括创建、就绪、执行、阻塞和终止状态。多任务操作系统分为非抢占式和抢占式,后者如Unix系统允许调度程序强制挂起进程,分配执行机会给其他进程。Linux进程调度围绕`task_struct`数据结构,包含进程状态、优先级、时间片、调度策略等信息。调度器类负责管理不同类型的进程,如完全公平调度(CFS)、实时调度等。CFS使用红黑树组织进程队列,根据虚拟运行时间调度,保证公平性。实时调度类包括循环进程和先进先出进程,分别采用时间片轮转和先进先出机制。内核抢占允许在特定条件下中断当前进程,执行更高优先级的任务。SMP调度支持负载均衡、CPU亲和性设置、进程迁移等功能。

任务调度器:从入门到放弃(二) 6月前 评论
任务调度器:从入门到放弃(二)

这篇文章主要讨论了Linux内核中的线程调度策略,特别是针对多核异构架构(如Big.Little)的任务分配问题。作者分析了CFS(完全公平调度器)的工作原理,包括如何根据线程的优先级和虚拟运行时来分配CPU资源。文章指出,调度器是基于事件驱动的,而不是实时监控所有线程的状态,这导致了调度策略的实际效果与理论模型之间存在差异。 此外,文章还介绍了两种负载跟踪模型:PELT和WALT。PELT考虑了所有过去运行时间的负载,而WALT则将时间划分为窗口,通过统计线程在每个窗口的运行时间来计算负载。两种模型各有优缺点,PELT可能对非周期性负载不够敏感,而WALT可能会因为窗口划分而低估某些负载。 最后,作者提出了一个关于任务分配的问题:在Big.Little架构下,是否应该严格遵循“大任务跑大核,小任务跑小核”的原则。文章指出,这取决于任务的负载和CPU的能效曲线,并非所有情况下都适用。

从泡泡马特看“消费” 6月前 1 条
从泡泡马特看“消费”

本文主要探讨了泡泡玛特的成功案例,从创始人王宁的个人特质、泡泡玛特的市场策略、以及结构性机会三个方面进行了深入分析。王宁展现出了“狠、软、灵、巧”的复合特质,泡泡玛特通过“盲盒+IP”的玩法,将潮玩从小众文化变成了大众消费品,并成功抓住了中国市场的实验性和中国制造的丰饶两个结构性机会。文章还分析了情绪消费的心理机制,认为泡泡玛特的成功在于其将“低门槛+高不确定性”的心理机制设计成了一套令人欲罢不能的上瘾模型,并将这个“液态时代”的集体焦虑,升华为一种可供消费和展示的身份符号。