学习armv8,怎么能没有开发板呢?有的小伙伴说,我可以用QEMU啊?笨叔要很负责任的说,QEMU不能100%地模拟armv8的硬件行为,有不少地方QEMU模拟不出来的,所以还是需要一个真实的硬件板子。例如下面的2个例子, QEMU能跑,但是在树莓派上跑却跑飞了。
所以,使用真实的物理板子是有必要的。其中树莓派4就是一个优秀的代表,4核cortext-A72的IP核心,高端上档次。而且价格超级便宜,只需要200~300多块RMB,搭配一个几块钱的USB串口,就可以玩树莓派了。
在树莓派上调试汇编代码,常常有这样的苦恼,汇编代码写错了,机器就挂了,也不知道是执行哪条指令挂了。所以呢,我们需要一个便宜好用的arm仿真器。支持cortext-A系列处理器的arm仿真器有很多,但是大部分都很贵,买一台至少要几万RMB,一般个人学习爱好者很难支付的起。但是JLINK仿真器的价格就比较亲民,JLINK Base版本的价格大概是2000多RMB,也就是一台中档手机的价格。还有一个好消息,在校师生可以通过代理商购买JLINK EDU版本才48欧元,大约人民币500块。(购买正版JLNK,请联系JINLK在中国区的代理商)。
下面教大家如何使用JLINK仿真器来调试树莓派4b。
首先我们需要把树莓派4链接到JLINK上。要在树莓派上使用J-Link仿真器,首先需要把J-Link仿真器的JTAG接口连接到树莓派的扩展板上。树莓派的扩展接口已经内置了JTAG接口。树莓派4b上扩展接口定义。
我们可以使用杜邦线来连接。J-Link仿真器提供20管脚的JTAG接口。
树莓派与J-Link仿真器的连接需要8根线,如表16.3所示。读者可以参考上面两个图来仔细连接线路。
树莓派与J-Link仿真器连接
| JTAG接口 | 树莓派管脚号 | 树莓派排管脚名称 |
|---|---|---|
| TRST | 15 | GPIO22 |
| RTCK | 16 | GPIO23 |
| TDO | 18 | GPIO24 |
| TCK | 22 | GPIO25 |
| TDI | 37 | GPIO26 |
| TMS | 13 | GPIO27 |
| VTref | 01 | 3.3v |
| GND | 39 | GND |
连接完成之后的效果图如下:
笨叔给大家一点小建议:尽量使用不同颜色的杜邦线,这样不容易出错。大家在金工实习的时候连复杂的小锤子和收音机都做出来了,连8根线,对大家是小儿科。
** **
接下来使用openocd来进行调试了,小伙伴可以使用笨叔提供的基于ubuntu20.04做的vmware image v1.2,目前这个vmware image只对订阅了旗舰篇视频课程的小伙伴开放,等奔跑吧第二版图书出版后再public。
使用如下命令来连接树莓派,如图所示。
$sudo openocd -f jlink.cfg -f raspi4.cfg
接下来就可以调试了。在Linux主机中新建一个新终端,输入如下命令来登录OpenOCD的telnet服务。
$ telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
halt
> load_image /home/rlk/rlk/lab01/benos.bin 0x80000
>step 0x80000
**
**
使用GDB来调试代码了,先使用gdb-multiarch命令来启动GDB,并且使用3333的端口号来连接OpenOCD的GDB服务。
$ gdb-multiarch --tuibuild/benos.elf
(gdb) target remotelocalhost:3333 <=连接OpenOCD的GDB服务
第三季ARM64体系结构与编程,已经上线了,笨叔带您玩树莓派,在树莓派上做实验,几十个全球原创的实验,等你哟!我们提供原创实验的参考源代码以及详细的实验讲解视频哟!