RISC-V MCU中文社区

【分享】 【分享】Hbirdv2 OpenOCD的编译

发表于 全国大学生集成电路创新创业大赛 2021-04-25 18:41:09
1
3586
9

一、   队伍介绍

本参赛队队名为“第一次参赛队”,报名编号:CICC2483。本篇为蜂鸟E203系列分享第二篇。

本篇介绍的内容是Hbirdv2软件调试工具openocd的编译,该内容不常见,适用于更换QSPI flash或者下载调试时显示当前flashID无法识别,如果出现这种情况,那么你可能就需要重新编译适用于自己flashOpenOCD了。

二、   前言

OpenOCD(全称Open On-Chip Debugger)是一个开源的片上调试器,支持多种架构cpu的调试,可以用来调试和下载代码。官方网站:http://openocd.org/ 最新版本已到0.11.0,该版本与之前的版本相差较大,有少数配置选项已经改变,使用时需注意下,(反正不知道怎么回事,似乎不能直接用OpenOCD进行代码下载了,需要GDBOpenOCD配合进行下载了,具体原因并没有探究,等知道原因会分享到下面评论区里)。由于OpenOCD是具有flash适配的,只有其库中含有的flash在可以进行下载,主要表现形式为flash的设备ID,如果你的软核使用的flashIDOpenOCD中不识别的话那么你就需要下载OpenOCD源码将你所使用的falsh添加到源码中进行编译生成新的OpenOCD。初入E203的时候我们使用的是新一版的荔枝糖,由于当时的OpenOCD并不支持其flash xt25f08b,费时n多天终于找到了解决办法,由于我们现在用的flashw25q512,所以索性就用这个做示例了,具体方法如下。

三、   编译环境

Ubuntu20.04

Docker(版本最新就行)

四、   编译方法

a)     代码源
源码可以在OpenOCD官方网站找到传送门,但是比较推荐的还是去芯来官方Github去下载源码,除许可证不太一样外区别在于前者需要依赖库,后者却不需要且后者会交叉编译出多个平台的xPack版本。

b)     下载编译源码

                i.          前期准备:
   
由于笔者在写这篇文章的时候使用的是Windows10操作系统,所以使用其WSL子系统进行演示,当然如果你是用的是Windows下的编译环境也可以使用此方法进行编译,省掉双系统或者虚拟机等麻烦的操作,如果不熟悉WSL的话就自便了,原理都是一样的。由于WSL没有图形化界面,只有Bash命令行以及Visual Studio Code支持,首先下载安装WSL,并升级到WSL2

1.     开始菜单搜索“启用或关闭 Windows 功能”将适用于LinuxWindow子系统功能和虚拟机平台勾选,没什么用。选择完成后点击确定并重启。


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可以查看生成的所有OpenOCDxPack

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/

 

喜欢9
用户评论 (1)
  • Sheep.

    2024-01-09 14:08:21 Sheep. 1#

    你好,按照您的步骤来Flash能被正常识别,但是功能有问题,报错


    Error: TODO: debug_execution is true

    Error: Failed to execute algorithm at 0x80000000: -4

    Error: error writing to flash at address 0x20000000 at offset 0x00000000


    您知道是什么原因吗?请求帮忙解答一下

youngsea

youngsea 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板