ARM裸板调试之JTAG调试命令行调试
我们仍然调试之前的nandflash程序,我们用openOCD连接,然后加载程序。
这里是直接下载到片内4KRAM中,然后resume 0发现灯没有亮,程序跑飞了,
这是因为我们的链接地址0x30000000,我们上电后前面的代码要从nandflash里面读取代码然后拷贝到SDRAM中,其中前面的代码要用位置无关码来写,而我们现在的代码不是用位置无关码写的。
我们之前已经知道了memsetup这个函数不是用位置无关码写的,
这个数组是在栈上的这没错,但是他的初始值是在只读数据段的,会去链接地址的地方读这个初始值,但是现在这个地址都还没初始化,所以就错了,现在假设我们不知道程序出错的原因在这里,接下来开始调试。我们现在想一步一步执行。
执行完第一步之后,我们用reg看一下寄存器值,一上电是管理模式,所以我们看一下管理模式中的值,发现sp是0x1000,
然后继续step继续执行,会调到38的位置,这与反汇编文件是一致的。
然后看一下38的位置有什么,再继续执行
然后step单步执行,reg看寄存器值,发现r2 r3的值都是对的。
然后我们看一下0x53000000这里的值是多少,
然后再step执行str r2,[r3]这一行。这时候就把0存到53000000这里了,验证一下
我们再执行若干步,执行到bl memsetup这个函数,
通过分析反汇编文件得到:
我们执行一次step,看一下sp的值
FEC就是4076,和我们分析的值一致。
然后再次step,执行完之后看一下ip的值是多少,ip是一个别名
这个只读数据段就是我们memsetup函数里面数组的初始值。这里就会报错,我们执行完54这行代码,然后看一下r0 r1 r2 r3里面的值,
所以要把memsetup里面数组定义改成
现在我们就找到错误的地方了,但是上面这种jtag命令行的方法我们可以看到,这种方法要求我们对汇编语言比较熟悉才行。
ARM裸板调试之JTAG调试命令行调试相关推荐
- Linux 运行vcs仿真命令,VCS使用以及命令行调试
最近在学习VCS,现将VCS的一些使用心得记录下来. VCS是synopsys的仿真verilog的仿真器.基于linux系统.有命令行模式和图形化模式.图形化模式是用的dve. 以串口verilog ...
- 关于在arm裸板编程时使用printf问题的解决方法
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的.为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不 ...
- 如何使用VS+C#创建,优雅自动化的安装(不使用命令行),调试,更新Windows服务
轻量级,即是服务部署器,又是服务本体,免命令行,免bat.直接部署和调试代码的东西,也就长这样了. 看这一篇文章应该可以把你构建和调试windows服务这些事儿玩儿转. 一.创建服务 1.可以打开VS ...
- Pycharm下运行调试Python项目时,当调试既需要给调试的程序传入命令行参数又需要程序在设置的断点处停下里查看变量时的解决方法
今天在调试了一个复杂的Python项目,其中这个项目的调试需要事先从命令行读取参数,并且在调试期间需要再事先设置的断点处停下来.检查相关的变量. 问题是,在Pycharm的Terminal 输 ...
- ARM:裸板shell编程完善(匹配命令、修复bug)、G-Sensor重力传感器驱动基础
<tips> vi中命令模式下: ' :e main.c // 打开main.c ' :bn // back next 回到下一个文件 ' :bp ...
- 使用GDB命令行调试器调试C/C++程序
编译自:http://xmodulo.com/gdb-command-line-debugger.html 作者: Adrien Brochard 原创:LCTT https://linux.cn/a ...
- python命令行调试django代码_Django shell调试models输出的SQL语句方法
在settings.py里,配置如下logging: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': ...
- php浏览器跟踪调试,Phpstorm怎么在命令行以及浏览器中调试
Phpstorm怎么在命令行以及浏览器中调试 发布时间:2020-12-09 11:07:17 来源:亿速云 阅读:76 作者:小新 小编给大家分享一下Phpstorm怎么在命令行以及浏览器中调试,希 ...
- python命令行调试_Linux 黑乎乎的命令行下,如何调试 Python?
一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行调试. 但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试. 这时该怎么办呢? 今天,就给大 ...
最新文章
- 升级 90天 vs2008 在win2008下。
- python numpy np.fromstring()函数(从字符串文本中提取数字,返回一维数组)(爬虫提取数字挺好用的)
- Linux 串口 gprs at,linux下GPRS模块使用AT命令实现拨接电话,发中英文短信
- java 注解数组初始化_Java 之 注解的定义
- 2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础
- float foo=42e1为什么错_为什么重写了equals()也要重写hashCode()
- Dubbo + RestEasy 实现文件上传与下载
- PHP环境安全性能检查
- linux脚本算术函数,Linux基础之bash脚本编程初级-变量与算术运算
- PC电脑端QQ如何适应电脑端大小
- 广义典型相关分析_一文教你掌握广义估计方程
- 只返回数据表的部分字段(不建类)
- frameset标签设计页面
- C语言例题——密码校验
- ue4序列帧ui_UE4动画序列帧通知机制(二)
- redis可视化工具desktop manager
- 忽现的Mybatis foreach 失效记录.
- qt代码着呢么换行_离我睡觉还早着呢...
- c语言 code table,单片机C语言unsigned char code table是什么意思?
- w i ndows,解释计算 机Windows的学习英语(10页)-原创力文档
热门文章
- 人工智能深入油气领域,百度智能云与石化盈科共建合同智能化应用平台
- 链接文件配置(linux文件目录指向另一个目录,ln -s的用法)
- java sha1_使用Java 进行SHA1加密
- 扑克牌少一张JAVA,纸牌游戏,随机输出三张扑克牌
- 全球及中国电子内容开发工具行业行业需求规模与发展战略建议报告2022-2028年
- 基于SSM实现的演唱会网上订票系统-JAVA【毕业设计、快速开发、源码、开题报告】
- [Nacos] 业务实例如何指定IP注入Nacos
- 2021 Google 开发者大会即将登陆:年度盛会,先睹为快!
- Python收集视频,做自己喜欢的壁纸,不要误会我的用意
- java数字分割的下划线_在Java中使用下划线分隔数的字面值的用法讲解