调试内核oops
来源:互联网 发布:淘宝网首页板鞋 编辑:程序博客网 时间:2024/06/05 09:46
第一种方式,通过make menuconfig开启debug选项,利用gdb定位具体出错位置。
cd /kernel_path //内核代码目录
l *0x12345678
字符L,应该回显示出错的地方。
sip地址=12345678
第二种:查看内核的出错信息:
tail /var/log/message
第三种:
通过汇编定位panic的c代码位置
1 根据panic打印出来的栈信息找到出现问题的函数和panic出现的具体位置。
2 找到该函数所在的.o文件,使用命令objdump -D *.o > www ,反编译出汇编代码。
3 根据文件名,找到出现问题的汇编位置,通常这样经过优化的汇编很难跟踪到具体的C代码位置
4 将*.o删除,使用make V=1进行编译,找出编译该文件的具体编译命令,如:
gcc -m32 -Wp,-MD,net/bridge/.br_forward.o.d -nostdinc -isystem /usr b/gcc/i686-pc-linux-gnu/4.3.2/include -D__KERNEL__ -Iinclude -include include nux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Os -pipe -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=pentium4 -mtune=generic -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -Iinclude/asm-x86/mach-generic -Iinclude/asm-x86/mach-default -fomit-frame-pointer -g -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(br_forward)" -D"KBUILD_MODNAME=KBUILD_STR(bridge)" -c -o net/bridge/br_forward.o net/bridge/br_forward.c
5 把"-c -o net/bridge/br_forward.o"改成 -S -g ,进行编译,这样在当前目录下会生成一个br_forward.s的文件
6 这样生成的汇编代码和原来的C代码关联性较强,比如loc 0 111 0中,111表示下面的汇编对应的c代码的行数。
7 针对两个汇编代码进行对比查找到出现问题的代码行。
- Linux内核OOPS调试
- 调试内核oops
- linux内核oops调试文章
- linux 内核oops调试技术
- 转载_Linux内核OOPS调试
- 转载_Linux内核OOPS调试
- 转载_Linux内核OOPS调试
- linux 内核oops调试技术
- 内核调试案例(oops错误)
- 内核调试案例(oops错误)
- linux内核调试工具 oops ksymoops objdump
- 内核调试案例(oops错误)
- 内核调试案例(oops错误)
- Linux内核调试之Oops信息
- Linux内核调试之Oops信息
- LINUX内核调试相关--oops信息的定位
- LINUX内核调试相关--oops信息的定位
- LINUX内核调试相关--oops信息的定位
- 腹部塑形第三阶段:雕刻腹肌
- 数组排序
- 在内核中创建文件 filp_open/sys_open
- VC++------------一些简单的错误(不断更新)
- Struts2学习笔记(五)之异常处理机制
- 调试内核oops
- MQ基本命令
- MFC中获取App,MainFrame,Doc和View类等指针的方法
- 关于大数的操作!!
- redhat5中RAW设备的建立
- Android WebView 加载资源
- SQL中1=1与1<>1的使用
- eclipse导入android项目之后有个红色叹号
- C++中产生随机数的函数