Skip to content
Huaqi Fang edited this page May 26, 2021 · 19 revisions

Nuclei OpenOCD编译开发流程

OpenOCD代码和编译工具

openocd日常开发和编译会用到如下代码和工具:

常规的编译步骤参考: https://github.com/riscv-mcu/openocd-xpack/blob/xpack-nuclei-build/README-BUILD-Nuclei.md

一般情况下,我们会告诉你们我们当前使用的分支,例如:

  • riscv-openocd: riscv-upstream-staging
  • openocd-xpack: nuclei_internal/release/0.10.0-15

基本环境依赖

首先确保当前环境为Linux 64位,最好为Ubuntu 20.04 LTS,并且安装好docker等依赖,参考 Prerequisites for building xPack binaries

编译开发一般步骤

这里先git下载好openocd-xpack的代码(里面包含submodule,请确保submodule代码也一并下载),然后切换到对应的分支,假设编译工具代码位于 ~/openocd-xpack目录,并且进入到了这个目录下。

## 确保所有的环境依赖都已装好
# 进入HOME目录
cd ~
# git clone xpack的代码
git clone https://github.com/riscv-mcu/openocd-xpack.git openocd-xpack
cd openocd-xpack
# 这里切换到 nuclei_internal/release/0.10.0-15 分支,并获取最新代码
git checkout nuclei_internal/release/0.10.0-15
git submodule init
git submodule update --recursive
# 显示基本帮助信息
bash scripts/build.sh --help
# 先运行一次,创建好基本的环境
bash scripts/build.sh --linux64
# 运行完毕后,会在$HOME目录下创建Work/openocd-xxx/的文件夹
# 我当前使用的这个xpack,会创建这个目录 ~/Work/openocd-0.10.0-15/openocd.git
# 注意 openocd-0.10.0-15 可能会根据不同的xpack版本不一样,请自己注意
# 进入到这个目录, 并先重命名已存在的openocd.git目录
cd ~/Work/openocd-0.10.0-15
mv openocd.git openocd.git.bk
# git 克隆最新的代码
git clone https://github.com/riscv-mcu/riscv-openocd.git openocd.git
cd openocd.git
# 这里假设checkout到riscv-upstream-staging分支, 并保证submodule代码下载下来
git checkout riscv-upstream-staging
git submodule init
git submodule update --recursive
# 这里就可以修改你的代码,加上你的功能了
## 在这个目录下~/Work/openocd-0.10.0-15/openocd.git就可以进行你的开发工作了
## 如果出现问题,建议先备份好你的代码,然后reset成一个干净的版本,然后运行 git clean -fdx .
# 切回到openocd-xpack后,进行编译
cd ~/openocd-xpack
bash scripts/build.sh --all

上面编译完毕的工具将会放在 ~/Work/openocd-0.10.0-15/deploy目录下

$ ll -lh ~/Work/openocd-0.10.0-15/deploy
total 14M
-rw-r--r-- 1 hqfang nucleisys 3.7M May  8 17:34 nuclei-openocd-0.10.0-15-linux-x32.tgz
-rw-r--r-- 1 hqfang nucleisys  105 May  8 17:34 nuclei-openocd-0.10.0-15-linux-x32.tgz.sha
-rw-r--r-- 1 hqfang nucleisys 3.6M May  8 16:47 nuclei-openocd-0.10.0-15-linux-x64.tgz
-rw-r--r-- 1 hqfang nucleisys  105 May  8 16:47 nuclei-openocd-0.10.0-15-linux-x64.tgz.sha
-rw-r--r-- 1 hqfang nucleisys 3.5M May  8 17:58 nuclei-openocd-0.10.0-15-win32-x32.zip
-rw-r--r-- 1 hqfang nucleisys  105 May  8 17:58 nuclei-openocd-0.10.0-15-win32-x32.zip.sha
-rw-r--r-- 1 hqfang nucleisys 3.5M May  8 17:04 nuclei-openocd-0.10.0-15-win32-x64.zip
-rw-r--r-- 1 hqfang nucleisys  105 May  8 17:04 nuclei-openocd-0.10.0-15-win32-x64.zip.sha

常见问题

如何开发自己的Flash Loader

请参考 riscv-openocd代码目录下的contrib/loaders/flash/fespi

如何添加自己的SPI驱动支持

请参考 riscv-openocd代码目录下的src/flash/nor/fespi.c

如何添加一个新的Flash支持

请参考 riscv-openocd这个commit https://github.com/riscv-mcu/riscv-openocd/commit/67c247cb2218b6c5e0a482b0c91cd8d8de789791

OpenOCD如何使用

请参见编译好的openocd目录下的 doc/pdf/openocd.pdf

常见问题搜索渠道

代码pre-commit check报错推送不上去

push时带上--no-verify,例如git push --no-verify mcu riscv-upstream-staging

Clone this wiki locally