1.在之前第36章里,我们学习了通过驱动的oops定位错误代码行
第36章的oops代码如下所示:
Unable to handle kernel paging request at virtual address...56000050
//无法处理内核页面请求的虚拟地址56000050
pgd = c3850000
[56000050] *pgd=00000000
Internal error: Oops...接下来,我们便来配置内核,从而打印应用程序的oops
2.首先来搜索oops里的:Unable to handle kernel打印语句,看在哪个函数打印的
如下图所示,找到位于__do_kernel_fault...5.接下来,继续修改内核,使应用程序的oops也打印栈信息出来
在驱动的oops里有"Stack: "这个字段,搜索"Stack: "看看,位于哪个函数
5.1如下图所示, 找到位于__die()函数中...从上面看出,主要是将0x12(r3)放入地址0x00(r2)中
而0x00是个非法地址,所以出错
8.分析Stack栈信息,确定函数调用过程
参考: 37.Linux驱动调试-根据oops的栈信息,确定函数调用过程