前言
驱动开发中,经常会遇见如下场景:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
本文记录一下,如何在rk平台下,定位到具体的行号。
1.分析 log 中的 栈回溯信息 和pc 寄存器
由此可以看出,空指针发生在sgm37864_i2c_probe 函数中,那么在函数中的那一行呢?在+0x118 的地方。
2.利用addr2line 工具定位行号
2.1 查看sgm37864_i2c_probe 的函数基地址
先在代码路进行搜一下System.map 文件在哪里
找到sgm37864_i2c_probe 的基地址 ffffffc0110154e0
因此发生错误的地址 是0xffffffc0110154e0 + 0x118 = 0xffffffc0110155f8
2.2 addr2line 工具命令
查看addr2line 工具在哪
输入如下命令: addr2line -C -f -e vmlinux 0xffffffc0110155f8。其中 将addr2line 和vmlinux 换成对应的路径:
由此可以定位到在文件 的 645 行发生了空指针。