linux 内核 addr2line,內核調試 arm-none-linux-gnueabi-addr2line 工具使用
通過OOPS信息中PC寄存器的值可以知道出錯指令的地址,通過棧回朔信息可以知道出錯時的函數調用的關系,根據這兩點可以很快定位錯誤。
修改drivers/net/ethernet/davicom/dm9000.c,在dm9000_probe函數中u32 id_val;下增加下面語句:
int *ptr =NULL;
*ptr=0xff;
編譯內核下載到開發板上,內核啟動會出現如類似下信息:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 805 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.14.0 #11
task: ee8a0000 ti: ee8a4000 task.ti: ee8a4000
PC is at dm9000_probe+0x1c/0x8f0
LR is at platform_drv_probe+0x18/0x48
pc : [] lr : [] psr: 60000153
sp : ee8a5e48 ip : 00000000 fp : 00000000
r10: c052a4fc r9 : 00000000 r8 : c0591e98
r7 : 00000000 r6 : ee97c810 r5 : ee97c800 r4 : 00000000
r3 : 000000ff r2 : 00000000 r1 : ee8a5de8 r0 : ee97c800
Flags: nZCv IRQs on FIQs off Mode SVC_32 ISA ARM Segment kernel
Control: 10c5387d Table: 4000404a DAC: 00000015
Process swapper/0 (pid: 1, stack limit = 0xee8a4240)
Stack: (0xee8a5e48 to 0xee8a6000)
5e40: ee975cf0 00000000 ee1503a8 00000001 c0561afc ee150438
5e60: 00000000 ee97c810 c0591e98 ee97c810 00000000 c0591e98 c0561afc c052a4fc
5e80: 00000000 c0247f7c c0247f64 c05d931c c0591e98 c0246668 ee97c810 c0591e98
5ea0: ee97c844 00000000 c054332c c0246804 c0591e98 c0246778 00000000 c0244fbc
5ec0: ee805478 ee9771c0 c0591e98 eeb73a00 c0590028 c0245e28 c04c3128 c0591e98
5ee0: 00000000 c0591e98 00000000 c054e2ac c059f280 c0246e1c 00000000 ee8a4000
5f00: 00000000 c00087b4 ee903b00 c05c3d50 60000153 c0571c00 60000100 c0571c00
5f20: 00000000 00000000 c0571bfc 00000000 c0505bc8 ef7fc918 00000089 c0034c6c
5f40: c04ca680 c0505338 00000006 00000006 00000000 c054e2c8 c054e2cc 00000006
5f60: c054e2ac c059f280 00000089 c052a4fc 00000000 c052ac4c 00000006 00000006
5f80: c052a4fc c003e0dc 00000000 c03b46ec 00000000 00000000 00000000 00000000
5fa0: 00000000 c03b46f4 00000000 c000e4b8 00000000 00000000 00000000 00000000
5fc0: 0000000000000000 00000000 00000000 00000000 00000000 00000000 00000000
5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ffffffff ffffffff
[] (dm9000_probe) from [] (platform_drv_probe+0x18/0x48)
[] (platform_drv_probe) from [] (driver_probe_device+0x100/0x210)
[] (driver_probe_device) from [] (__driver_attach+0x8c/0x90)
[] (__driver_attach) from [] (bus_for_each_dev+0x58/0x88)
[] (bus_for_each_dev) from [] (bus_add_driver+0xd8/0x1cc)
[] (bus_add_driver) from [] (driver_register+0x78/0xf4)
[] (driver_register) from [] (do_one_initcall+0x30/0x144)
[] (do_one_initcall) from [] (kernel_init_freeable+0xfc/0x1c8)
[] (kernel_init_freeable) from [] (kernel_init+0x8/0xe4)
錯誤分析:
1、第一行,說明是空指針造成的錯誤
Unable to handle kernel NULL pointer dereference at virtual address 00000000
2、寄存器信息主要是PC的值
PC is at dm9000_probe+0x1c/0x8f0
pc : []
方法一、錯誤定位
arm-none-linux-gnueabi-objdump -D vmlinux > vmlinux.dis
文件vmlinux.dis非常大打開需要一定時間
對於大多數情況,從反匯編代碼定位到C代碼並不會如此容易,需要有較強的閱讀匯編代碼的能力。
----------------------------------------------------------------------------------------------------------
方法二、錯誤定位
通過addr2line去定位
arm-none-linux-gnueabi-addr2line 0xc0277cc8-e vmlinux -f
linux 内核 addr2line,內核調試 arm-none-linux-gnueabi-addr2line 工具使用相关推荐
- linux 内核dmesg,linux內核調試kmsg,dmesg
dmesg為我們多用,man dmesg告知dmesg用來顯示和管理kernel ring buffer,那麼後者為何物,以及dmesg顯示何類信息,是本文待闡述的內容. documentation/ ...
- 安裝linux後的內核調優
vi /etc/sysctl.conf 编辑文件,加入以下内容: net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_ ...
- linux内核 sp什么意思,浅析基于ARM的Linux下的系统调用的实现
12: tbl .req r8 @ syscall table pointer 13: why .req r8 @ Linux syscall ...
- linux 内核学习11-内核模块参数
linux 内核学习11-内核模块参数 内核模块作为一个可拓展的动态模块,为Linux内核提供灵活性,所以需要依据不同的场景来传递不同的参数,实现不同的功能 1. 准备工作 #define modul ...
- 嵌入式Linux内核和文件系统,在IXP435上移植嵌入式Linux内核和根文件系统
简要介绍如何在IXP435上移植嵌入式Linux内核和根文件系统 1.安装交叉编译工具 为什么要先安装交叉编译工具?由于我们的Linux操作系统是安装在嵌入式处理器平台上的,需要在主机上编译出开发板需 ...
- Linux内核网络数据包发送(四)——Linux netdevice 子系统
Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- win10支持linux内核,Win10将允许您加载自定义Linux内核
微软正在为Win10添加一个Linux内核,以支持Linux的Windows子系统.但是,猜测一下:你不必使用微软的Linux内核.您可以构建自己的自定义Linux内核供Windows使用. 此功能是 ...
- debian 编译linux内核源码,安装debian总结以及编译linux内核
1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包. 将磁盘进行压缩操作,并且保留出一个 ...
- Linux 内核调试 三:《QEMU ARM guest support》翻译
原文路径:https://wiki.qemu.org/Documentation/Platforms/ARM QEMU通常对ARM客户端有很好的支持.它支持近五十种不同的机器.我们支持这么多的原因是A ...
最新文章
- C进阶 - 内存四驱模型
- 拿下斯坦福和剑桥双offer,00后的算法学习之路
- ARP欺骗防御工具arpon
- fullgc一小时发生一次的原因
- 4.0.13 mysql 注入_Windows2000下整合Mysql4.0.13与Tomcat4.1.24搭建Jsp环境
- Exchanger及其用法
- CF1110F Nearest Leaf
- Android图片缩放方法
- 戴尔服务器哪1顶型号好,戴尔PowerEdge R730xd新一代服务器评测
- Ubuntu安装JDK1.8
- 11G新特性 -- Expression Statistics
- Linux 计算器程序
- midi是计算机合成音乐文件,多媒体音频详解.ppt
- 手机网页如何添加在线客服代码?您的这样做
- Hopfield神经网络的联想记忆——数字识别的一些笔记
- Oracle ERP 模块
- 从大众、福特跟特斯拉的差距看智能电气架构落地的难点与破局点
- OPC 、OPC DA、OPC UA介绍
- EL表达式可以使用indexof方法吗
- 如何搭建自己的cdn
热门文章
- VSCode如何搭建Vue项目?详细步骤
- 不借助 vue-cli 工具自行搭建 vue 项目
- 51单片机 Proteus仿真 身高体重测量 HX711 超声波SR-04
- 天猫达尔文商品管理体系通俗简介
- (二十二)美萍酒店管理系统:系统维护_系统设置_房间设置_其他测试
- 多媒体计算机辅助英语教学,浅谈多媒体计算机辅助英语教学
- 西门子em235模块的功能_玩转西门子S7-200模拟量
- 计算机网络奇偶校验码题目,计算机网络试题(考试必备)分解.doc
- 单片机 最小系统原理图
- BCB中利用剪贴板复制粘贴