MTK system_server 卡死导致手机重启案例分析

05d4a90957f99f8afe6328405867a439.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、MTK AEE Log分析工具
二、AEE Log分析流程
三、system_server 卡死案例分析及解决

本文主要针对 Exception Type: system_server_watchdog , system_server卡死找出的分析以及解决方案。

一、MTK AEE Log分析工具

MTK AEE Log 获取方式:

程序员Android
回复 aee 即可获取解析重启db log的工具。

二、AEE Log分析流程

1. 使用AEE 工具解析 dbg 文件。

3c97631ef0c1e3120b01b15bb1d983d4.jpeg

使用解析db.fatal.02.SWT.dbg

059278b2f9d936e2bc90298da034bdc8.jpeg

AEE Log 解析出来的文件

2.分析解析出来的exp_main等文件

exp_main 文件会记录发生重启时候的 log 打印信息。

部分重启异常 Log信息如下:

$** *** *** *** *** *** *** *** Fatal *** *** *** *** *** *** *** **$
Build Info: 'alps-mp-o1.mp7:alps-mp-o1.mp7:mt6765:S01,ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys'
Flavor Info: 'None'
Exception Log Time:[Thu Mar 14 14:00:03 CST 2019] [38684.729626]

Exception Class: SWT
Exception Type: system_server_watchdog

Current Executing Process: 
system_server


Trigger time:[2019-03-14 14:00:03.711844] pid:1029

Backtrace: 
Process: system_server
Subject: Blocked in handler on ActivityManager (ActivityManager)
Build: ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys

3.exp_main 文件解析

从开头的Log总体信息概览,我们可以看到 发生重启的时间类型触发重启的进程以及PID系统Blocked 的地方

结合exp_main以及 trace分析重启 Log
Log分析如下:

// 1.重启触发时间,以及PID 
Trigger time:[2019-03-14 14:00:03.711844] pid:1029
// 2.Blocked 的进程
Backtrace: 
Process: system_server
Subject: Blocked in handler on ActivityManager (ActivityManager)
// 3.根据PID 查看Trace信息
----- pid 1029 at 2019-03-14 13:59:58 -----
Cmd line: system_server

... ...
// 4.根据Backtrace 查看Blocked的信息
"ActivityManager" prio=5 tid=11 Blocked

... ...
// 5.tid=11 等待 tid=106的线程释放资源锁
  - waiting to lock <0x090691f3> (a android.uti
在Android MTK平台的SELinux (Security Enhanced Linux) 系统中,`system_server.te` 文件是一个Policy Definition语言(Policy DCL) 的模块,它用于定义系统服务 (`system_server`) 的权限策略。要允许 `system_server` 进程访问 vendor 和 system 文件夹,你需要在该文件中设置相应的规则。 首先,确保你了解以下基本概念: - **角色(Role)**:在此场景下,`system_server` 是一个角色。 - **类型(Type)**:代表文件、目录或其他资源的安全类别,如`type system_file_t` 或 `type vendor_file_t`。 - **上下文(Context)**:`system_server`进程的上下文,通常格式为 `role:type:file_context`。 要在 `system_server.te` 文件中允许 `system_server` 读取 `vendor` 和 `system` 文件夹,你需要创建或更新两个相关的类型和相应的规则: 1. 创建或编辑类型: - 对于 `vendor` 目录,可能需要类似这样的声明: ``` type vendor_file_t file_type; ``` - 对于 `system` 目录,同样操作: ``` type system_file_t file_type; ``` 然后,将这两个类型关联到它们各自的实际路径上: ``` file_type:system/* sys_file_type; file_type:vendor/* sys_file_type; ``` 2. 允许 `system_server` 访问: 需要在 `system_server` 角色中添加权限,使其能读取和写入这两种类型的文件: ``` allow system_server system_file_t:read_data; allow system_server system_file_t:write_data; allow system_server vendor_file_t:read_data; allow system_server vendor_file_t:write_data; ``` 完成这些修改后,你需要重启系统的SELinux服务并应用新的政策以使更改生效。你可以通过以下命令行操作: ``` # 使用ADB重启 SELinux 内核模块 adb shell setenforce 0 reboot adb shell setenforce 1 ``` 然后验证 `system_server` 是否可以按预期访问文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值