一、
队伍介绍
本参赛队队名为“第一次参赛队”,报名编号:CICC2483。本篇为蜂鸟E203系列分享第二篇。
本篇介绍的内容是Hbirdv2软件调试工具openocd的编译,该内容不常见,适用于更换QSPI flash或者下载调试时显示当前flash的ID无法识别,如果出现这种情况,那么你可能就需要重新编译适用于自己flash的OpenOCD了。
二、
前言
OpenOCD(全称Open On-Chip Debugger)是一个开源的片上调试器,支持多种架构cpu的调试,可以用来调试和下载代码。官方网站:http://openocd.org/ 最新版本已到0.11.0,该版本与之前的版本相差较大,有少数配置选项已经改变,使用时需注意下,(反正不知道怎么回事,似乎不能直接用OpenOCD进行代码下载了,需要GDB和OpenOCD配合进行下载了,具体原因并没有探究,等知道原因会分享到下面评论区里)。由于OpenOCD是具有flash适配的,只有其库中含有的flash在可以进行下载,主要表现形式为flash的设备ID,如果你的软核使用的flash的ID在OpenOCD中不识别的话那么你就需要下载OpenOCD源码将你所使用的falsh添加到源码中进行编译生成新的OpenOCD。初入E203的时候我们使用的是新一版的荔枝糖,由于当时的OpenOCD并不支持其flash xt25f08b,费时n多天终于找到了解决办法,由于我们现在用的flash是w25q512,所以索性就用这个做示例了,具体方法如下。
三、
编译环境
Ubuntu20.04
┕Docker(版本最新就行)
四、
编译方法
a) 代码源
源码可以在OpenOCD官方网站找到传送门,但是比较推荐的还是去芯来官方Github去下载源码,除许可证不太一样外区别在于前者需要依赖库,后者却不需要且后者会交叉编译出多个平台的xPack版本。
b) 下载编译源码
i.
前期准备:
由于笔者在写这篇文章的时候使用的是Windows10操作系统,所以使用其WSL子系统进行演示,当然如果你是用的是Windows下的编译环境也可以使用此方法进行编译,省掉双系统或者虚拟机等麻烦的操作,如果不熟悉WSL的话就自便了,原理都是一样的。由于WSL没有图形化界面,只有Bash命令行以及Visual Studio Code支持,首先下载安装WSL,并升级到WSL2。
1. 开始菜单搜索“启用或关闭 Windows 功能”将适用于Linux的Window子系统功能和虚拟机平台勾选,没什么用。选择完成后点击确定并重启。
2. 重启后打开Microsoft Store搜索Ubuntu获取并下载(如果对界面美观在意的话可以同时下载Windows Terminal);
3. 开始菜单启动子系统Ubuntu,等待解压安装,完成后会提示输入新建用户名和密码,输入完成后基本安装就完成了。为了后续操作方便,不至于每次使用sudo的时候都要输入密码,我们需要编辑/etc/sudoers文件,使用命令sudo nano
/etc/sudoers回车输入密码进入编辑界面,添加图片中划线处的内容并使用Ctrl+S保存,Ctrl+X退出编辑,一定不要打错,否则就需要cd /etc 进入etc目录使用pkexec
visudo命令进行修复。自此准备工作大功告成,中文语言等其他优化问题自行百度就行,此处不适宜细讲。
4. 关闭WSL,下载WSL2更新包https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi,安装后打开输入 wsl --set-version ubuntu 2等待完成后重新打开WSL,若出现参考的对象类型不支持尝试的操作字样,管理员运行Powershell输入netsh winsock
reset并重启。
5. 更新软件包
sudo apt update
sudo apt upgrade
-y
6. 安装编译所需软件
a) 首先更新软件包并移除旧版的docker,安装必要的软件包给安装docker做准备
i.
sudo apt update
ii.
sudo apt-get remove docker docker-engine
docker.io containerd runc
iii.
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
b) 安装证书并下载docker
i.
curl -fsSL
https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o
/usr/share/keyrings/docker-archive-keyring.gpg
ii.
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
> /dev/null
iii.
sudo apt update
iv.
sudo apt install docker-ce docker-ce-cli
containerd.io
c) 重启docker并检测docker是否运行
i.
sudo service docker start
ii.
sudo docker run hello-world
ii.
下载源码
1. rm -rf
~/Downloads/openocd-xpack.git
2. git clone
--recurse-submodules https://github.com/riscv-mcu/openocd-xpack.git \
~/Downloads/openocd-xpack.git
iii.
编译源码
1. 确定docker的运行状态同时配置docker环境,若出现permission denied则在命令前面加sudo以管理员身份运行。
a) docker info
b) bash ~/Downloads/openocd-xpack.git/scripts/build.sh
preload-images
c) bash
~/Downloads/openocd-xpack.git/scripts/build.sh --develop --without-pdf
--linux64 --linux32 --win64 --win32
d) 在上一步的时候就是开始一站式下载所有源码和编译的脚本了,但是我们需要在编译之前改源码,由于本人对bash脚本编辑能力低,所以并没有去改上面命令里用到的脚本,而是在其开始configure的时候停掉docker,如下图,这个时候依然在克隆阶段,等待其克隆完成之后,log会刷的很快这个时候就可以打开新的窗口运行sudo service
docker restart命令重启docker
e) sudo nano
/root/Work/openocd-0.10.0-14/openocd.git/src/flash/nor/spi.c
nano ~/Work/openocd-0.10.0-14/openocd.git/src/flash/nor/spi.c
如果使用了sudo那么运行第一行的命令,反之用第二行的
f) 根据flash的芯片文档确定出各个命令以及flash ID并按照文档中的注释按顺序将其填入到spi.c中
/* name, read_cmd, qread_cmd, pprog_cmd, erase_cmd, chip_erase_cmd, device_id,*
pagesize, sectorsize, size_in_bytes */
g) 改完后再次执行 bash ~/Downloads/openocd-xpack.git/scripts/build.sh --develop
--without-pdf --linux64 --linux32 --win64 --win32
h) 编译完成后就会在~/Work/openocd-*/deploy或者/root/Work/openocd-*/deploy目录下生成我们自己的OpenOCD了,通过ls -l
~/Work/openocd-*/deploy可以查看生成的所有OpenOCD的xPack。
i) 自此所有步骤就已经完成了。
五、
参考网站
a) Hbirdv1 OpenOCD编译 :https://blog.csdn.net/weixin_42099269/article/details/106560471
b) OpenOCD官网 :http://openocd.org/
c) 编译OpenOCD的前提准备 :https://xpack.github.io/xbb/prerequisites/
d) 芯来GitHub :https://github.com/riscv-mcu/
e) 芯来OpenOCD Github仓库:https://github.com/riscv-mcu/riscv-openocd#the-xpack-openocd-fork
f) 芯来OpenOCD编译方法 :https://github.com/riscv-mcu/openocd-xpack/blob/xpack-nuclei-build/README-BUILD-Nuclei.md
g) WSL安装步骤(参考部分就可以):https://www.tkdcz.top/post/46.html
h) sudoers编辑错误的解决办法:https://blog.csdn.net/shizao/article/details/90240218
i) WSL2安装方法 :https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
j) Ubuntu安装Docker方法 :https://docs.docker.com/engine/install/ubuntu/