前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >迅为2K1000开发板龙芯平台Ejtag 单步调试 PMON 的汇编阶段

迅为2K1000开发板龙芯平台Ejtag 单步调试 PMON 的汇编阶段

原创
作者头像
用户9167207
发布2022-03-21 15:24:59
6080
发布2022-03-21 15:24:59
举报
文章被收录于专栏:嵌入式开发板

迅为2K1000开发板

Ejtag调试器

在 9.6 小节中,我们在汇编节点实现了 led 闪烁的功能,如果您自己写的程序没有成功,我们该如何调 试呢?就可以利用 Ejtag 仿真器进行单步调试。

那我们要如何进行单步调试呢?我们是不是就得先知道每一个指令对应的地址呢?这样我们才可以打断点。我们先来修改一下在 9.6 小节中的代码,我们加一个标签。如下图所示:

然后我们重新编译 pmon 源码生成 pmon 镜像并烧写到开发板,一定要将编译的烧写到开发板!!!接着在 pmon-loongson3/zloader.ls2k 使用命令/opt/gcc-4.9.3-64-gnu/bin/mips64el-linux-objdump -d start.o > 1.txt

将编译得到的 start.o 文件进行反汇编并将结果输出到 1.txt,添加 led3_ctrl 标签的目的是为了反汇编以后更加容易找到 led3 控制相关的指令,如下图所示:

使用命令 vim 1.txt 打开反汇编后的输出文件,找到标签 led3_ctrl 所在的位置,如下图所示:

从上图可以看出,控制 led3 相关的代码是从地址 d60 开始的,而 MIPS 的入口地址是 0xbfc00000,所以我们是不是就可以把断点打的地址为 0xbfc00d84 的地方呢,这个地方对应的指令为点灯操作。

接着我们启动 Ejitag 工具并配置好 Ejtag 工具,在 Ejtag 命令行下输入命令 hb 0xffffffffbfc00d84,注意,此

时开发板并未上电!!!

接着我们给开发板上电,此时 hb 命令会执行成,这时立刻输入 set 命令停止 cpu,如下图所示:

然后我们输入命令 hbls,查看断点是否设置成功,设置成功如下图所示:

接着输入命令 cont,让 cpu 执行到断点出停止,如下图所示:

然后使用命令 unhb 0xffffffffbfc00d84 删除断点,这里一定要删除,不然 si 命令不能往下执行,如下图所示:

接着输入命令 si 1 执行 1 条执行,si 1 的意思就是单步执行 1 条指令,如下图所示:

此时我们可以发现 led3 已经点亮,说明我们之前写的汇编代码是没有问题的。如果大家没有点亮,可以使用 set 命令来查看通用寄存器的值来排查错误。

接着我们将断电打在关灯的指令位置,在反汇编 1.txt 文件中,我们可以发现关灯的指令是在 da0 位置, 如下图所示:

所以我们输入命令 hb 0xffffffffbfc00da0 将断点打在这个位置下,如下图所示:

然后执行 cont 命令运行 cpu,cpu 会执行到这个断点位置,然后停止,如下图所示:

cpu 已经停到这个位置了,我们就可以使用命令 unhb 来删除断点了,这里一定要删除,不然 si 命令不能往下执行,如下图所示:

接着输入命令 si 1 条指令,如果我们写的代码没有问题,可以发现 led3 熄灭,如下图所示:

这样我们就在汇编阶段下调试完成了 led,同理,调试其他的 GPIO 大家也可以使用这种方法,这里就 不在赘述,大家可以自行探索一下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档