立即注册
查看: 1201|回复: 3

[展讯开发资料] 展讯平台Kernel Stability调试指导手册

已绑定手机
发表于 2022-1-22 11:18:57 | 显示全部楼层 |阅读模式 来自 广东省深圳市
本文档介绍了各种kernel crash问题,如bug on,lockup,watchdog panic等问题,以及sysdump的抓取和crash工具命令,串口调试方法。

1、Kernel Stability 问题简介
此章节主要探讨 kernel 的重启问题。Kernel 遇到异常时会重启,但要注意不是所有重启都是由于 kernel引起的。我们可以从重启模式来判断是什么类型的重启。
1.1 重启的模式
如需确认重启模式,可从下面两种 log 中获取:
1. 重启后的 slog 中的 misc/cmdline.log ( 或者 adb 登入后查看 proc/cmdline)中的关键字Androidboot.mode。
2. ylog 中 snapshot/phone.info 中的 ro.bootmode。
具体从关键字来做模式判断方法如下:
● unknown,special 或者没有值,则为正常开机重启,上层触发的重启(如 android 看门狗重启,systemserver 重启,第三方应用发起的重启)或者手动长按 power 键重启。
● panic/ap wdgreboot 等值则是 kernel 发生问题(包括按下组合键)的重启,硬狗重启。
● 从重启前后 kernel log 原始时间戳,如[852605.423283]的连续性上也可以进一步验证,如果它们是连续的,则是上层重启,因为 kernel 重启的话会重置时间戳。

1.2 重启原理
Kernel panic 引起的重启点在:
void panic(const char *fmt, ...) {...
#ifdef CONFIG_SPRD_SYSDUMP
sysdump_enter(0,buf,NULL);
#endif
... emergency_restart();
...}
可以看出如果 sysdump 功能开启的话,会先执行 system_dump,然后重启。
其它如 die 函数,BUG_ON 过程也会有先调用 sysdump_enter 后再做重启的操作。

1.3 panic 函数的调用方式
Kernel panic 函数调用方式比较多,本节主要根据代码情况进行描述其调用方式。具体情况如下面章节所述。
1.3.1 驱动调用
static void __init sirfsoc_prima2_timer_init(struct device_node *np){ ... sirfsoc_timer_base = of_iomap(np, 0);
if (!sirfsoc_timer_base)
panic("unable to map timer cpu registers\n");
... }

1.3.2 组合键调用
对于定屏/黑屏,adb 不可连接的情况,可以尝试组合键(大部分情况下是按住上下侧键,同时点击两下power 键),如果 kernel 没有彻底死,可以触发 panic 流程:
void sprd_debug_check_crash_key(unsigned int code, int value) {... if (volup_p && voldown_p) {
...
if (code == KEY_POWER) { ...
if (loopcount == 2)
panic("Crash Key");
...
} ... }

1.3.3 die 函数调用
由页错误引起 die 函数调用进而触发 panic
static
void __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
struct pt_regs *regs) {... pr_alert("Unable to handle kernel %s at virtual address %08lx\n", (addr < PAGE_SIZE) ? "NULL pointer dereference" : "paging request", addr);
show_pte(mm, addr); die("Oops", regs, fsr);
... }
void die(const char *str, struct pt_regs *regs, int err) {... if (bug_type != BUG_TRAP_TYPE_NONE)
str = "Oops - BUG"; if (__die(str, err, regs))
sig = 0;
...

1.3.4 BUG_ON 过程调用
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) BUG()根据实现不同,有的会是非法指令有的直接调用 panic 函数重启BUG_ON 类型的 log 中直接会有行号输出,一般直接分析出错位置逻辑即可。

1.3.5 hardlockup&softlock 调用
hardlockup 和 softlock 的实现在 kernel/kernel/watchdog.c。
- hardlockup 的原理是检测某 cpu 中断是否长时间被关闭。如果是,则认为发生 hardlockup。
- Softlockup:某 cpu 调度发生异常。判据是每个 cpu 上有一个 watchdog 线程,如果某 cpu 上此线程长时间得不到调度,说明此 cpu 的抢占被长时间关闭。
发生 hardlockup 或者 softlock 不一定会导致重启。它依赖于以下的配置:
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
如果它们被置位,则当它们发生时会触发 panic,否则只是打印一条警告 log。后续有可能调度又恢复正常,但更大可能是发生定屏死机。

1.3.6 Watchdog 调用以及 wdgreboot
上面讲过的 softlock&和 hardlock 用到了 watchdog 线程和定时器。
本节所讲的是另外一种机制。
kernel/drivers/watchdog/sprd_wdt_sys.c
基本思想是有一个喂狗线程(watchdog_feeder)去定期喂狗,并且使能硬狗。狗在特定时间内没能被喂的 话,则触发硬狗中断,如果此时系统能相应中断的话,则触发 panic 调用(重启模式是 panic)。如果此时系统已经响应不了中断,当重启倒计时到期,则由硬狗强制重启机器(重启模式是 ap wdgreboot)。

2、抓取 system dump 流程
2.1 system dump 抓取流程
panic 类型的 system dump 会先走 kernel 流程中 systemdump_enter 函数中,它将更多相关信息存储起 来,以便供后续 Uboot 过程进一步存到 T 卡的 sysdump 文件中。watchdog 超时且系统已经不响应中断时由硬件直接重启后在 uboot 流程中存储 sysdump 到 T 卡。长按 power 键重启同样由硬件直接重启到uboot 抓 sysdump 文件(根据项目配置不同,可能长按 power 键还要外加音量键)。
1.jpg
2.2 system dump 抓取界面
system dump 抓取完成界面如下图 2-2 所示。此时按下除 power 键以外的键即可继续启动机器到idle界面。
2.3 sysdump 文件列表
以下为抓取到的 system dump 文件夹内容 (文件个数和名称根据不同平台,不同 dump 类型可能会有变 化),其中 sysdump.core.*是真正的 dump 文件组成部分:  2017_09_30_14_56_50txt
- sysdump.core.00
- sysdump.core.04_0x15300000-0x5c157fff_dump.lst
- sysdump.core.08_0xe6040000-0xe607ffff_dump.lst
- sysdump.core.01_0x00000000-0x007fffff_dump.lst
- sysdump.core.05_0x5fd00000-0xbfafffff_dump.lst
- sysdump.core.09_0x13900000-0x148fffff_dump.lst
- sysdump.core.02_0x0e000000-0x132fffff_dump.lst
- sysdump.core.06_0x00800000-0x07ffffff_dump.lst vmlinux
- sysdump-checksum.txt
- sysdump.core.03_0x14a01000-0x14afffff_dump.lst
- sysdump.core.07_0x13300000-0x138fffff_dump.lst

更多详细内容请下载附件查看
2022-1-22 11:18 上传
文件大小:
1.77 MB
下载次数:
30
本地下载

16RD supports Paypal , Payment is calculated at the exchange rate of the day. Unable to download please contact 18902843661 (WhatsApp OR wechat number)

关于一牛网在微软浏览器(Microsoft Edge、IE浏览器)警报通告&解决方案!(无法下载直接更换浏览器即可)

*附件为作者发布,与本站无关,如有侵权,请联系客服删除

已绑定手机
发表于 2022-1-22 15:39:16 | 显示全部楼层 来自 上海市
谢谢分享
已绑定手机
发表于 2022-1-23 07:28:49 来自手机 | 显示全部楼层 来自 湖南省株洲市
谢谢分享!
已绑定手机
发表于 2023-11-7 10:28:02 | 显示全部楼层 来自 上海市宝山区
谢谢分享!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表