[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)

(2012-04-12 02:02:27)

标签:

杂谈

[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)

原文由windxiang发表在http://www.100ask.net/showtopic-1624.aspx

LINUX内核调试过程

LINUX内核调试过程,

多谢南方,让我能够顺利进入内核的调试界面,此教程也是请教南方的,我整理了一下发布上来,我想应该还有地方有错误,不过运行是正常了,希望大家指点。

1、

通过uboot下载linux内核 nfs 0x32000000192.168.0.10:/mnt/disk2/uImage

192.168.0.10是linux内核的IP地址

/mnt/disk2/uImage

是内核所在目录

2、

使用openJTAT telnet上去,

执行以下命令

> halt

暂停开发板,显示如下:

target state: halted

target halted in ARM state due to debugrequest, current mode:

Supervisor

cpsr: 0x40000053 pc: 0x33f9e2f8

MMU: disabled, D-Cache: disabled, I-Cache:enabled

> bp

查看是否有断点,有的话就rbp删除

> arm7_9 sw_bkptsenable

使能软中断,占用1个断点,openOCD中只能有两个断点

software breakpoints enabled

> bp 0x30008000 4 hw

设置30008000处断点

breakpoint added at address 0x30008000

> bp

查看断点是否设置成功

0x30008000, 0x4, 0

> resume

恢复到uboot中继续运行

>

3、在uboot中执行命令

bootm 0x32000000

看见内核停止在这里

Hx>bootm 32000000

## Booting image at 32000000 ...

Image Name:

Linux-2.6.22.6

Created:

2009-02-21

10:53:25 UTC

Image Type:

ARM Linux KernelImage (uncompressed)

Data Size:

1849468 Bytes =

1.8 MB

Load Address: 30008000

Entry Point:

30008000

Verifying Checksum ... OK

OK

Starting kernel ...

停止在这里不动了。

4、进入openOCD 的telnet输入命令:

> resume

target state: halted

target halted in ARM state due tobreakpoint, current mode:

Supervisor

cpsr: 0x400000d3 pc: 0x30008000

MMU: disabled, D-Cache: disabled, I-Cache:enabled

>

这时linux kernel输出信息:

UncompressingLinux............................................................

done, bootingthe kernel.

依然在TELNET中输入命令:

> halt

> rbp 0x30008000

删除断点,因为只能有两个断点,前面已经开了一个软件断点

> bp

查看

> bp 0x30008074 4

hw设置断点,这个断点是根据vmlinux的反汇编代码找到的,

是根据反汇编代码,得知此处是开启MMU

breakpointadded at address 0x30008074

> resume

恢复运行

target state:halted

target haltedin ARM state due to breakpoint, current mode:

Supervisor

cpsr:0x200000d3 pc: 0x30008074

MMU: enabled, D-Cache: enabled, I-Cache:enabled

>

这时已经开启了MMU,如果没有显示MMU:

enabled,可以输入step命令,似乎不显示的原因是:信息没有得到更新,输入STEP后,命令可以得到更新。

开启MMU接下来就可以在eclipse中调试linux内核的第二阶段代码了。

[img=554,187]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg[/img]

[img=553,341]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg[/img]

[img=554,340]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image006.jpg[/img]

target remote localhost:3333

monitor halt

monitor step

monitor rbp 0x30008074

break start_kernel

continue

[img=554,383]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image008.jpg[/img]

以下是我根据vmlinux生成的部分反汇编代码,一共生存了342M,

在LINUX中执行arm-elf-objdump -D -m arm vmlinux >

vmlinux.dis

命令即可生成反汇编代码。

c00086bc :

//这个是start_kernel的地址,是虚拟地址,

c00086bc:

e1a0c00d

mov

ip,sp

c00086c0:

e92dd870

sb

sp!, {r4, r5, r6, fp, ip, lr, pc}

c00086c4:

e24cb004

sub

fp, ip, #4

;0x4

c00086c8:

e24dd008

sub

sp, sp, #8

;0x8

c00086cc:

e59f326c

ldr

r3,[pc, #620]

; c0008940 <.init>

c00086d0:

e1a0e00f

mov

lr,pc

c00086d4:

e1a0f003

mov

pc,r3

c0008060 <__turn_mmu_on>:

c0008060:

e1a00000

nop

(mov r0,r0)

c0008064:

ee010f10

mcr

15, 0, r0, cr1, cr0, {0}

c0008068:

ee103f10

mrc

15, 0, r3, cr0, cr0, {0}

c000806c:

e1a03003

mov

r3,r3

c0008070:

e1a03003

mov

r3, r3

c0008074:

e1a0f00d

mov

pc, sp

//这个是开启MMU的函数,最早前面我设

//置断点为30008074好像在

//openOCD中不可以设置虚拟地址,

现在的问题就是我取消了顶层目录makefile文件里所有的优化选项,就出现了错误。

但是我没有修改过任何文件

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

linux下jtag命令,[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)相关推荐

  1. linux ifort编译命令,[转载][Linux] icc与ifort编译器

    1.icc Intel C/C++编译器接受遵守ANSI C/C++ , ISO C/C++ standards,GNU inline ASM for IA-32 architecture标准的输入. ...

  2. linux 下显卡优化,[转载]Linux 下 NVIDIA 显卡闭源驱动的一些优化

    完全搬运,原文请猛戳 NVIDIA 对开源驱动开发的支持之差从 Linus Torvalds 那句著名的"Fuck NVIDIA"就可见一斑--几乎没有提供任何开发文档,开源驱动的 ...

  3. linux下kil命令l,linux/centos下使用kill命令的使用教程方法

    kill命令 kill命令用来删除执行中的程序或工作.kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止.若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删 ...

  4. linux下日志rorate,[转载]linux下日志分割logrotate 设置和理解

    对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员能使用logrotate 程式用来管理系统中的最新的事件,对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员能使用 ...

  5. linux下iostat命令无效,linux iostat命令详解

    iostat iostat用于输出CPU和磁盘I/O相关的统计信息. 命令格式: iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ devic ...

  6. linux 下nm命令输出,Linux nm命令介绍

    nm用来列出目标文件的符号清单.下面是nm命令的格式: nm [-a | --debug-syms] [-g | --extern-only] [-B][-C | --demangle] [-D | ...

  7. Linux下查找命令

    转载自  Linux下查找命令 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 more 分页显示一个文件或任何输出结果 /bin less 分页显示一个文件并且可以回头 ...

  8. linux 下搜索的命令,Linux下搜索命令

    linux下用于查找文件的5个命令,有需要的朋友可以参考下.包括find,whereis,locate,which与type. linux下用于查找文件的5个命令,有需要的朋友可以参考下. 包括fin ...

  9. Linux下打包命令tar

    Linux下打包命令tar Linux下最常用的打包程序是tar,用tar命令打成的包文件通常以.tar结尾 1.名词解释 打包:是指将若干文件,目录合成一个文件,可以理解为装到一个文件里去了: 压缩 ...

最新文章

  1. Dora.Interception: 一个为.NET Core度身定制的AOP框架
  2. 变种 背包问题_【朝夕的ACM笔记】动态规划-背包问题
  3. 团队作业8——测试与发布(Beta阶段)
  4. 语言认知偏差_我们的认知偏差正在破坏患者的结果数据
  5. phpmyadmin登陆错误:The requested URL /phpmyadmin was not found on this serve
  6. linux系统软件包依赖关系,Ubuntu解决包依赖关系
  7. 搜索了一下电脑上编程相关的 pdf, 看有你需要的吗?
  8. C ++基础 | 从 理解C++程序结构 到 编写程序_1
  9. Unable to convert MySQL date/time value to System.DateTime
  10. oracle numlist,oracle sql str2numlist numtabletype
  11. raise NotImplementedError
  12. Windows中使用包管理器(类似于apt/yum的) - Chocolatey
  13. 【笔记+总结】Andrew Ng-神经网络和深度学习
  14. SpringMVC工作原理(含案例图解)
  15. 开关稳压器详解(四)-Buck降压型开关稳压器自举电路
  16. 100以内的平方数记忆法
  17. pytorch.chunk
  18. 移动机器人室内定位技术综述
  19. 前端牛客网刷题总结【 JS基础变量、数据类型、数据类型转换、运算符等】
  20. Echarts饼图实现颜色渐变

热门文章

  1. 中国水下充气袋行业市场供需与战略研究报告
  2. 中国检测开关行业市场供需与战略研究报告
  3. 深度揭秘阿里云 Serverless Kubernetes
  4. 资源成本双优化!看 Serverless 颠覆编程教育的创新实践
  5. php封装一个异常类,php封装一个异常的处理类
  6. 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01
  7. 1024程序员节再次引爆星城!千万程序员线上线下互动,共迎新程序员时代
  8. Go的闭包看你犯错,Rust却默默帮你排坑
  9. 写给 3 年内程序开发者的一封信
  10. Flutter 升级 2.0 填坑指导,带你原地起飞