Android稳定性
未读
一、问题分析1.1 dmesg_TZ.txt1234567891011Kernel log:[41525.700710][T23239] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: mi_binder_wait4_hook$835a4498e5ea78c0e09ecbebc9fc5a14+0x2f8/0x2fc [millet_binder][41525.700740][T23239] CPU: 5 PID: 23239 Comm: Recents-TaskRes Tainted: G WC O 5.10.198-android12-9-00085-g226a9632f13d-ab11136126 #1[41525.700753][T23239] Hardware name: Qualcomm Technologies, Inc. Parrot QRD, RUAN based on SM7435 (DT)[41525.700761][T23239] Cal ...
Kdump是Linux的一种内核崩溃捕获机制,Linux内核遇到致命错误崩溃时会触发Kdump机制将崩溃时的现场保存下来,以便后续分析和故障排查。目前市面上有很多分析Kdump的工具,例如trace32, crash tool,本文介绍crash tool在手机领域的应用,并重点介绍一些实用的技巧。然而,本文的重点并不是介绍crash tool的工作原理和基础命令,也不是为了介绍Kdump转储的原理以及其他Kdump解析工具,如果你对这些内容感兴趣,请参考本文末尾提供的参考文档。
一、为什么要用crash在手机领域常用trace32或crash来解析内核dump,选择适合的工具可以大大提高问题定位的效率,但有时候我们不得不使用crash,例如下面场景:
1.1 trace32太占用资源在手机领域中,当机器崩溃时通常会将整个内存现场全部转储下来,使用trace32工具分析这些转储信息时,首先需要将这些转储文件全部加载到本地PC端的内存中。目前市面上手机的内存容量一般为16GB或24GB,使用trace32来分析这些dump文件对PC机器的性能要求就很高了。下图展示了在一个32GB内存的 ...
Code 基于 Android U ssi、kernel-5.10
0. 重启类型本文整理的重启流程有:
adb reboot
power key reboot(弹框确认 or 直接重启)
panic reboot整体框架流程见 总流程图。具体代码流程见 重启前流程处理、重启后 reason 传递。
1. 总流程图
2. 重启前流程梳理2.1 adb reboot执行 adb reboot 后经过 adb client 端和 server 端的一些交互后
电脑侧client端,packages/modules/adb/client/main.cpp的main();
内调commandline.cpp的adb_commandline();
转到adb_connect_command();
内调adb_client.cpp的adb_connect();
内调adb_io.cpp的SendProtocolString(),获取 server端的 fd句柄;
手机侧server端,services.cpp的service_to_fd();
内 ...
0. 问题现象死机,dmesg中日志如下:
1234567891011121314151617181920[ 34.029307][ C0] ------------[ cut here ]------------[ 35.844227][ C0] msm_watchdog f410000.qcom,wdt: QCOM Apps Watchdog bark! Now = 35.844222[ 35.844236][ C0] msm_watchdog f410000.qcom,wdt: QCOM Apps Watchdog last pet at 15.841438[ 35.844243][ C0] msm_watchdog f410000.qcom,wdt: cpu alive mask from last pet ff[ 35.844347][ C0] CPU0 next event is 35840000000[ 35.844350][ C0] CPU1 next event is 34048000000[ 35.8 ...
高通watchdog的分析套路:
检查watchdog执行状态,pet、bark time,expires时间等必要信息,可以自己去看msm_watchdog_data,也可以直接检查rampaser解出来的Watchdog data(Non-secure Watchdog data)
检查msm_watchdog进程在哪个cpu上,是否处于ready?检查runqueue文件,如果ready跳到5
如果没有ready,说明没有被timer wake up,则检查timerlist看看timer是否在list中,却没有被执行
如果timer list没有被执行,检查wake timer在那个cpu,为何没有被执行,再去检查irq_stat,tasklet_vec是否有pending
如果已经ready,却没被调度,检查喂狗时间的RTB log是否有中断风暴、中断是否还能正常接收,tick中断是否正常
检查RTB log中进程调度是否正常,哪个进程一直运行阻碍了watchdog进程
检查当前进程是否禁止抢占task_struct.thread_info.preempt_count &g ...
0. watchdog的概念Watchdog主要应用于嵌入式系统,用于系统出现严重故障(如内核死锁,进入死循环,CPU跑飞等)不能恢复时,在无人为介入的情况下可以自动重新启动系统。在传统Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。Watchdog根据实现方式又可以分为硬件watchdog和软件watchdog。硬件watchdog必须有硬件电路支持,设备节点/dev/watchdog对应真实的物理设备。软件watchdog通过通过内核定时器来实现,/dev/watchdog并不对应真实的物理设备。硬件watchdog比软件watchdog有更好的可靠性。软件watchdog最大的优势是成本低,因此在可靠性要求不是很高一般民用产品被广泛使用。硬件watchdog的优势是可靠性高,因此在对可靠性要求严格 ...
5125d6810bae8c19649ddc12eea8befcf4c65721e37977242e8e28c253999d0c20ffab31cce35014f2e06b7738e608972674efd496c039eba194b269999e1db659c9841e527fd95db23142745c8e581090d12a865d352657adfc980ae4cfc712dbdf8126af50ddaac8b7be1440584182ef4e6fc52d45e74ec91feeee5fcdfe16be5215bce6d4f359bb5c1e2d19eb63d2c247192a97b5520ad534a7db0d1e8dabefd180b72520a092b9b7f695ae0932508a4f6abd9d8fe6cb886088befa102d812f492bd0ca4b6d9c1e719cdf32ee9979de69d866935f69275834df142a16b10b341a46439f623363891715a377fc89c14a3edbd10f7a2495c ...
Linux内存管理
未读
7649effcc1e019670aedcd361e485e818f61272676d72a95a9de1a3a481250084b221d48fbc3672338d1f75a532d691303158b9fe9866e8ef154fce1a3b338f452716c7114a80d99aafc7d1ce82976591ce9255c00d5338e0be2a813a329c695c31797b4378c16754b2a9cf77ea4b965238b56996cda08125c63a846ebb79c052935609b8c8bfd2988f730907136d9c82b24dc08344fb40a1ed61d6549d9b9f6cc0be66e8c138e1e4e2cd6352069cec16c468755ef490e2b9231092a841dfbf867a11af0451f88c0625a33034f3fb8eb340e5c389ebc3348724eac70d2fae5bcd177ee0b3ef228580ce59b1d7f0d6a8e13f47600999d204ce ...
Linux内存管理
未读
d0d24970799a25be2d4e5fd72228e7a097d7aa5e0f629d3955b9b99be9052d638973b8d91c5d0b0f51b3ea92257cd62931e08b7ec455e9e3b9cf32a2b916e98b546a1e9fcef95dd5551c831cfd6b498dccee76416dcab4f82be9a88ca05d983d97507eec6bc5e1cb1939e1dc37f28083b9e6330b892bb8a75ca8d4c53b5f84f1effc8ffbfd7523101d9561d604d37f5ec28a93b27ea796d894bc7aef4fa7b089279b5a1677e768a3d3f3c26916a2c0e46e2204702fdc9350684b28a2e47fc94138daa6f7bc3692e7eabbe1f7079edeb313ee9058bb94a1e446303592e2418eaa61e284e9e4303101890efaf9606c16eed4bb97ac407b01a31 ...
Linux内存管理
未读
0. 前言此节点是显示memblock的这部分内存的具体使用情况的。我们可以看到这部分内存很明显不属于虚拟地址,而是物理地址,和设备树中的地址保持一致!
1234567891011121314151617181920spring:/ # cat /proc/iomem00208000-00208fff : 208000.qcom,ipcc qcom,ipcc@20800000400000-00bfffff : 400000.pinctrl pinctrl@40000001400000-015effff : 1400000.clock-controller clock-controller@140000001628000-01629fff : 1628000.qcom,msm-eud eud_base0162a000-0162afff : 162b000.hsphy eud_enable_reg0162b000-0162b113 : 162b000.hsphy hsusb_phy_base...82a00000-864fffff : System RAM85200000-85effff ...