2024-12-18
[Android稳定性] 第005篇 [问题篇] 原子状态调度引起死机
本文讨论了在多核系统中因锁使用不当导致的死机异常问题。作者通过两个案例说明了当在原子状态下执行调度命令时会出现BUG,并分析了原因,指出使用全局变量来控制加解锁操作是多此一举且易出错的。文章强调应正确使用锁来保护临界区,避免使用全局变量来控制锁状态,以防止并发执行时的问题。
2024-12-18
[Android稳定性] 第004篇 [原理篇] minidump的原理介绍
**minidump** 是一种用于保存系统崩溃信息的机制。当系统发生崩溃时,boot subsystem 会加密并保存注册过的 memory 信息到 RAM EMMC 分区。 **流程**: 1. 开机时,内存中会为 minidump 保留一部分空间,用于存储 kernel log、logcat 和 tz_log。 2. 如果手机触发 dump,在第二次开机时,boot subsystem 会读取 TCSR 寄存器中的 minidump 模式标志。 3. 如果启用 minidump,boot subsystem 会读取 kmsg 和 logcat log,并将其写入 minidump 分区。 4. 开机后,可以使用 dd 指令导出 minidump 分区,并使用 ultraedit 查看 log。 **验证方法**: 1. 将 minidump 设置为 emmc 模式。 2. 触发 dump。 3. 导出 minidump 分区并查看 log。 **总结**: minidump 是一种有效的系统崩溃信息保存机制,可以帮助开发者快速定位问题。
2024-12-18
[Android稳定性] 第002篇 [原理篇] subsystem ramdump的原理介绍
本文介绍了SSR(子系统重启)功能,它是高通的一项特性,允许在子系统崩溃时重启该子系统而不影响整个系统。文章还详细说明了如何启用SSR、抓取子系统RAM dump日志,并介绍了小米对这一功能的改造,即将日志分类整理。此外,文章提供了制造子系统崩溃的指令方法和测试用例,以及如何查看生成的RAM dump日志。
2024-12-15
[Android稳定性] 第001篇 [方法篇] 高通Android平台稳定性分析介绍
本文主要介绍了Linux kernel crash分析的基础知识点,包括高通pmic的几种复位类型、解析dump的工具、Linux ramdump parser的使用、TRACE32工具的应用,以及系统异常的分类及原因。作者详细阐述了每种复位类型的特点和适用场景,列举了多种解析dump的工具及其输出,并通过图表和图片展示了Linux ramdump parser和TRACE32的使用方法。同时,文章还简要介绍了系统异常的分类及原因,为研发人员提供了解决底层稳定性问题的参考。
2024-12-14
如何排查rro资源overlay的问题?
本文介绍了运行时资源叠加层(RRO)的概念、工作原理以及如何构建、解析和配置叠加层。RRO 允许在运行时更改目标软件包的资源值,从而实现更灵活的资源定制。文章详细解释了叠加资源的设置清单、资源映射、构建软件包、解析资源以及启用/停用叠加层的操作。此外,文章还介绍了如何限制可叠加资源、配置叠加层以及排查 RRO 问题。最后,通过一个实例展示了如何在 vendor 侧集成 power_profile.xml 的 overlay。
2024-12-14
如何实现动态切换rro?
在Android项目中,针对单一设备名需适配两套电池参数的问题,提出一种通过vnd侧overlay apk和系统属性切换的解决方案。首先,编译两套独立的overlay apk,每套包含不同的`power_profile.xml`文件。然后,利用系统属性`ro.power.profile`作为触发条件,在rc文件中根据设备特性设置该属性,从而动态切换overlay。此方案避免了修改missi侧代码,确保了项目的灵活性和稳定性。
2024-12-12
[linux内存管理] 第011篇 内存模型之Sparse Memory Model
深入解析Linux内核SPARSEMEM稀疏内存模型的初始化流程,重点剖析bootmem_init及其核心环节,包括mem_section数据结构分配、内存块映射与标记,并结合代码详细说明多NUMA节点和物理内存管理策略。
2024-12-12
[linux内存管理] 第012章 物理内存管理三大结构体之zone
本文探讨了Linux内存管理中的内存域(Zone)概念。内存域是内核内存管理机制的重要组成部分,它根据内存区域的特点对物理内存进行划分,以满足不同类型的内存分配需求。本文详细介绍了Zone的类型、数据结构以及其在内存管理中的作用,并解释了Zone的统计信息、冷热页与Per-CPU上的页面高速缓存等相关概念。最后,通过关系结构图和架构层次图,直观展示了Zone与其他内存管理结构之间的关系。
2024-12-06
记一次uid设置错误导致的adb push失败问题
我司项目无法通过ADB将文件推送至`/vendor/firmware_mnt`目录。分析显示,该目录仅授权给`group`为`system`的读写权限,而`root`用户无权限访问。解决方案为修改`/vendor/etc/fstab.default`文件,将`uid=0`改为`uid=1000`,重新挂载后可成功推送文件。验证结果显示,修改后文件推送正常。
2024-12-05
设备树节点是如何转换成platform_device设备的呢?
你好,我理解你的需求,以下是我为你写的100字左右的摘要: 本文详细介绍了Linux内核中设备树dtb文件转换为platform_device的过程。首先,设备树中的各个节点会转换为device_node结构,然后通过of_platform_populate函数遍历这些节点,并根据节点的compatible属性创建对应的platform_device。对于包含特定compatible属性的节点,其子节点也会被转换为platform_device。此外,设备树中的reg和interrupt属性会被转换为platform_device中的resource结构,而其他属性则通过device_node结构传递给驱动开发者。