内核异常分析方法

1.通过sysdump/ramdump或者串口抓取内核日记

展讯平台sysdump解析_Android开发-CSDN博客_sysdump

高通平台抓取ramdump并用qcap解析_Android开发-CSDN博客_高通ramdump

mtk平台使用GAT工具分析aee db文件

对于深度休眠后,出现死机情况,测试前需打开串口打印(默认休眠后会关闭串口)

echo 0 > /sys/module/printk/parameters/console_suspend或者直接修改程序

一般还需要调整默认的串口打印等级echo 8 > /proc/sys/kernel/printk

bool console_suspend_enabled = true;
EXPORT_SYMBOL(console_suspend_enabled);

static int __init console_suspend_disable(char *str)
{
	console_suspend_enabled = false;
	return 1;
}
__setup("no_console_suspend", console_suspend_disable);
module_param_named(console_suspend, console_suspend_enabled,
		bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(console_suspend, "suspend console during suspend"
	" and hibernate operations");

 出现深度休眠后死机的情况,有如下的情况

晶体类型配置出错,导致深度休眠后,器件掉电

ddr一致性差,需要降频

空指针问题(驱动没适配好)

2.通过工具分析出错原因

写的一个空指针demo

运行代码,通过串口或者sysdump抓取内核日记

2.1通过arm-eabi-addr2line(将地址转换为行号)

从上面可以看出PC的地址是0xc04e8394,获取出错行号

./arm-eabi-addr2line -e vmlinux 0xc04e8394
/home/w/AndroidP/kernel/drivers/misc/suspend_lock.c:15

2.2通过arm-eabi-objdump反汇编

./arm-eabi-objdump -S vmlinux > vmlinux.txt

grep -rin c04e8394 vmlinux.txt 
1315671:c04e8394:	e5843000 	str	r3, [r4]

2.3通过arm-eabi-gdb定位出错位置

w@server:/home/w/AndroidP$ ./arm-eabi-gdb out/target/product/sp9850ka_1h10_go/obj/KERNEL/vmlinux
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>...
Reading symbols from /home/w/AndroidP/out/target/product/sp9850ka_1h10_go/obj/KERNEL/vmlinux...done.
(gdb) list *0xc04e8394
0xc04e8394 is in null_pointer (/home/w/AndroidP/kernel/drivers/misc/suspend_lock.c:15).
10	static struct miscdevice poll_dev;
11	
12	ssize_t null_pointer(struct device *dev, struct device_attribute *attr,char *buf)
13	{
14		char *p=NULL;
15		memcpy(p, "test", 4);
16		printk("%s\n",__FUNCTION__);
17		return 0;
18	}

如不在代码上运行,结果如下

./arm-eabi-gdb vmlinux
(gdb) list *0xc04e8394
0xc04e8394 is in null_pointer (/home/w/AndroidP/kernel/drivers/misc/suspend_lock.c:15).
10	/home/w/AndroidP/kernel/drivers/misc/suspend_lock.c: 没有那个文件或目录

 不初始化,然后使用互斥锁mutex

 运行后,定屏,触摸没反应(cat /proc/interrupts没看到tp的中断),adb能连上手机,dmesg查看内核缓冲区log,如下图

 根据pc位置调到指定的代码

(gdb) list *0xc0953844
0xc0953844 is in _raw_spin_lock (/home/w/AndroidP/kernel/arch/arm/include/asm/spinlock.h:77).
72		: "r" (&lock->slock), "I" (1 << TICKET_SHIFT)
73		: "cc");
74	
75		while (lockval.tickets.next != lockval.tickets.owner) {
76			wfe();
77			lockval.tickets.owner = ACCESS_ONCE(lock->tickets.owner);
78		}
79	
80		smp_mb();
81	}

3.测试DDR稳定性

Andoird中使用stressapptest测试DDR稳定性_Android开发-CSDN博客_android ddr测试,实际效果不好

或者使用相应平台的DDR稳定性测试工具。

4.更换器件重新测试

对应器件的虚焊,可采取重焊测试。如果还不行,也可以更换器件测试。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows内核是Windows操作系统的核心组件,负责管理计算机的硬件和软件资源,以及为应用程序提供执行环境。情景分析是对系统运行时的特定情况进行分析和评估的一种方法。详细书签版pdf是指对Windows内核情景分析的相关资料进行整理和归纳,并将其以PDF文件的形式进行保存和传播。 Windows内核情景分析的目的是为了理解和解决系统中可能出现的问题,优化系统性能,提高系统的可靠性和稳定性。通过分析内核的行为和运行时的情况,可以得到对系统的整体把握,找出潜在的问题,并提供相应的解决方案。 具体来说,windows内核情景分析主要包括以下几个方面: 1. 进程和线程调度情况分析:通过分析系统中的进程和线程的调度情况,可以了解系统的负载情况、任务切换的开销和频率等,从而优化系统的资源利用和响应速度。 2. 内存管理情况分析:通过分析内存使用情况,可以判断系统中的内存分配和释放是否合理,是否存在泄漏或溢出等问题,以及是否需要进行内存优化和调整。 3. IO操作情况分析:分析系统中的IO操作,包括磁盘读写、网络传输等,可以了解系统的IO负载情况,找出IO瓶颈和优化空间,提高系统的IO性能。 4. 异常和错误处理情况分析:分析系统中的异常和错误处理机制,包括异常处理代码、错误日志等,可以找出潜在的问题和错误处理不当的地方,改进系统的错误检测和处理能力。 通过整理和归纳这些情景分析的内容,制作详细书签版pdf文件,可以方便用户查阅和使用。用户可以根据自己的需求,快速地找到相关的情景分析内容,查看具体的分析方法和案例,帮助他们更好地理解和应用Windows内核情景分析的技术和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值