0. 前言有时候我们会遇到一些问题,需要去打开内核的一些参数进行一些调试,比如initcall_debug、debug、log_buf_len等等。每次遇到这些问题时,我们都需要去重新打包。这不仅仅浪费时间,而且有时候在遇到问题时重新编译后反而不复现了,妥妥的浪费时间。基于这样的需求,我实现了这样的需求。
1. 原理介绍1.1 fastboot oem bootargs首先扩展fastboot oem指令,接收fastboot模式下输入的内核参数,并写入到devinfo分区中保存起来(重启不会被恢复)。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647diff --git a/QcomModulePkg/Library/FastbootLib/FastbootCmds.c b/QcomModulePkg/Library/FastbootLib/FastbootCmds.cindex 0169b2b..aedb79e 100644--- a/QcomModulePk ...
Android稳定性
未读
0. 问题现象dmesg_TZ.txt
1234567891011121314151617181920212223242526272829[ 14.540023][ C0] print_irq_desc: 550553 callbacks suppressed[ 14.540038][ C0] irq 193, desc: 000000005e8b6ab6, depth: 1, count: 0, unhandled: 0[ 14.540049][ C0] ->handle_irq(): 00000000c765d680, handle_bad_irq.cfi_jt+0x0/0x8 [pinctrl_msm][ 14.540081][ C0] ->irq_data.chip(): 000000004510a501, 0xffffff8004e94370[ 14.540088][ C0] ->action(): 0000000000000000[ 14.540117][ C0] irq 193, desc: ...
0. 问题现象dmesg_TZ.txt
12345678910111213141516171819202122232425262728293031(3)[71:khungtaskd]INFO: task Binder:2848_9:3784 tgid:2848 blocked for 120s in whitelist10707 cpu4Call trace: __switch_to+0x244/0x460 __schedule+0x590/0xac4 schedule+0x64/0x188 __mutex_lock+0x444/0x998 __mutex_lock_slowpath+0x14/0x20 regulator_lock_dependent+0x6c/0x378 regulator_enable+0x3c/0x84 arm_smmu_power_on+0xa8/0x298 [arm_smmu] arm_smmu_runtime_resume+0x18/0x24 [arm_smmu] pm_generic_runtime_resume+0x44/0x80 __rpm_cal ...
Android稳定性
未读
0. 问题现象锁的使用不当往往会导致死机异常:之前碰到过一例
1234567891011121314151617181920212223242526272829[2021:11:18 15:28:05](1)BUG: scheduling while atomic: Binder:1199_2/5201/0x00000002[2021:11:18 15:28:05](1)------------[ cut here ]------------[2021:11:18 15:28:05](1)kernel BUG at kernel/sched/walt/walt_debug.c:16pc : android_rvh_schedule_bug+0x4/0x8 [sched_walt_debug][2021:11:18 15:28:05](1)lr : __schedule_bug+0x100/0x138[2021:11:18 15:28:05](1)Call trace:[2021:11:18 15:28:05](1) android_r ...
Android稳定性
未读
4f0f05ce26d5a43eed29a6768e1af61a411052e7c82e8ce77d6bea88f8a3ca21b842002bb2faee4fb8cc177830b3a670bf0ab1e1f5bb2d01a4b650ec390a261c8681a2f20272a897c4dacb05ea1f38a7d303a1ef944d2225674647138987f7faed531ba671a234502bb61179c2e4c390b4d5c442e4984ed998b57852ac3ff400aa537b0e1f87c85bd365c9d2f5ef71f03957316ad4e50dea13623bd4538a6b8d7d8da296e72d220caec052dd7424f500707a5fbc9a8af834195b48730b30032eb44e421e8812aec87cddec369b30f089da8f8ddac47204df64fd2ec86d5c3d1a5c4f8c7e7f06b9a3488518c614dc5f07bf449050d4b2c4399 ...
Android稳定性
未读
4f0f05ce26d5a43eed29a6768e1af61a411052e7c82e8ce77d6bea88f8a3ca21b842002bb2faee4fb8cc177830b3a670bf0ab1e1f5bb2d01a4b650ec390a261c8681a2f20272a897c4dacb05ea1f38a7d303a1ef944d2225674647138987f7faed531ba671a234502bb61179c2e4c390b4d5c442e4984ed998b57852ac3ff400aa537b0e1f87c85bd365c9d2f5ef71f0fffb071d9870aef294e06812c0f5801f57983bff91ca7d6d20c32556276b99468dcbba2377b1eedd1aa8f214393dafe32c1b73eafad094ab270da9e864fa043ecb069838cd142b3a37bad5f7cc44fcce3c08ce5d11fe221dc1ecd8b1f6658a2ee5bc9670957c6be6e ...
一、什么是SSR?Subsystem:modem、LPASS、Venus、WCNSS、GPU、SLPI等,芯片由APSS处理器和额外处理器运行它们的软件。SSR(Subsystem Restart,子系统重启)是高通的一个feature选项。如果SSR打开,尽管子系统crash了,仍然允许整个系统运行。SSR Feature推荐用于出货设备从而减少子系统异常对整个系统的影响。
二、Subsystem RAMDump当SSR feature打开后,subsystem如果发生crash重启时,整个系统是不会重启进入到dump界面的。此时,当Subsystem RAM dump feature也打开后,子系统发生crash时重启前会收集一份RAM dump到特定的存储路径。
2.1 C3F项目的subsystem ramdump的流程
2.2 xx项目的subsystem ramdump的流程
三、使能SSR3.1 打开驱动宏开关3.1.1 C3F项目kernel中开启SSR的宏开关,比如flame_GKI.config
1CONFIG_MSM_SUBSYSTEM_RESTART=m
3 ...
0. 前言鉴于研发人员当遇到底层稳定性问题时(主要为Linux kernel crash),不知道如何分析或者不知道使用哪些工具进行分析,所以本文主要介绍这方面的基础知识点。
1. 复位类型首先我们需要了解高通pmic的几种复位类型:
复位类型
解释
备注
warm reset
Many power rails are not reset, for example DDR
这种等级的reset将保留DDR memory以及一部分的PMIC寄存器
hard reset
It will not reset digital/analogic power domain inside PMIC,but will reset power rails that are exported externally
将清空DDR memory,以及保留和warm reset一样的部分PMIC寄存器
Dvdd hard reset
It will reset digital power supplied domain inside PMIC
将清空DDR memory,以及保留 ...
Feature
未读
0. 问题背景我司一个android项目中,只有一个devicename的情况下,需要集成两套power_profile.xml。原因是两者的电池参数存在差异。而我们当前的设计逻辑是使用了missi的rro overlay机制来实现的。但是这种机制是依赖于devicename的,也就是说一个devicename只能适配一个power_profile.xml。而且由于一些限制,我们并不能轻易的修改missi侧的java源码!
1. 方案设计missi的代码我们不能轻易修改,所以我决定将这部分的代码放在vnd侧!
切换overlay apk的触发条件设置为一个property属性!
1.1 编译两套overlay apk两种overlay需要分别定义独立的apk文件,例如:
xxx_1_overlay.apk
xxx_2_overlay.apk
Overlay 文件的核心是 res/xml/power_profile.xml,每个 APK 的内容是不同的功耗参数。
123456789101112project/├── overlays/│ ├── xxx_1/ ...
Android
未读
一、什么是RRO?运行时资源叠加层 (RRO) 是一个软件包,可在运行时更改目标软件包的资源值。例如,安装在系统映像上的应用可能会根据资源值更改其行为。安装在不同分区中的 RRO 可能会在运行时更改应用的资源值,而不是在构建时硬编码资源值。
您可以启用或停用 RRO。您可以通过编程方式设置启用/停用状态,以切换 RRO 更改资源值的功能。RRO 默认处于停用状态(但静态 RRO 默认处于启用状态)。
1.1 叠加资源叠加层的工作原理是将叠加层软件包中定义的资源映射到目标软件包中定义的资源。当应用尝试解析目标软件包中资源的值时,系统转而会返回目标资源映射到的叠加层资源的值。
1.1.1 设置清单如果某个软件包包含 <overlay> 标记作为 <manifest> 标记的子项,该软件包将被视为 RRO 软件包。
必要 android:targetPackage 属性的值用于指明 RRO 想要叠加的软件包的名称。
可选 android:targetName 属性的值用于指明 RRO 想要叠加的目标软件包的可叠加资源子集的名称。如果目标未定义可叠加资源集 ...