-
Notifications
You must be signed in to change notification settings - Fork 23
Home
openocd日常开发和编译会用到如下代码和工具:
- openocd代码仓库 riscv-openocd: https://github.com/riscv-mcu/riscv-openocd
- openocd编译工具仓库 openocd-xpack:https://github.com/riscv-mcu/openocd-xpack
常规的编译步骤参考: https://github.com/riscv-mcu/openocd-xpack/blob/xpack-nuclei-build/README-BUILD-Nuclei.md
一般情况下,我们会告诉你们我们当前使用的分支,例如:
- riscv-openocd: nuclei-develop
- openocd-xpack: xpack_nuclei_next
注意: 这里代码可能会被强制覆盖更新(forced push), 拉取使用时请务必仔细check
首先确保当前环境为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
# 这里切换到 xpack_nuclei_next 分支,并获取最新代码
git switch xpack_nuclei_next
git submodule init
git submodule update --recursive
# 显示基本帮助信息
bash scripts/build.sh --help
# 先运行一次,创建好基本的环境, 这里可能会失败,不影响
# 基于模板scripts/common-source-template.sh创建openocd代码配置文件 scripts/common-source.sh
cp scripts/common-source-template.sh scripts/common-source.sh
# modify this scripts/common-source.sh
bash scripts/build.sh --linux64
# 运行完毕后,会在$HOME目录下创建Work/openocd-build/的文件夹
# 我当前使用的这个xpack,会创建这个目录 ~/Work/openocd-build/openocd.git
# 采用xpack_nuclei_next 分支的编译代码,后面统一会变成~/Work/openocd-build目录方便管理
# 进入到这个目录, 并先重命名已存在的openocd.git目录
cd ~/Work/openocd-build
mv openocd.git openocd.git.bk
# git 克隆最新的代码
git clone https://github.com/riscv-mcu/riscv-openocd.git openocd.git
cd openocd.git
# 这里假设checkout到nuclei-develop分支, 并保证submodule代码下载下来
git switch nuclei-develop
git submodule init
git submodule update --recursive
# 这里就可以修改你的代码,加上你的功能了
## 在这个目录下~/Work/openocd-build/openocd.git就可以进行你的开发工作了
## 如果出现问题,建议先备份好你的代码,然后reset成一个干净的版本,然后运行 git clean -fdx .
# 切回到openocd-xpack后,进行编译
cd ~/openocd-xpack
bash scripts/build.sh --all
上面编译完毕的工具将会放在 ~/Work/openocd-build/deploy
目录下
$ ls -l ~/Work/openocd-build/deploy
total 14428
-rw-r--r-- 1 hqfang nucleisys 3824635 Sep 22 14:56 nuclei-openocd-2021.09-linux-x32.tgz
-rw-r--r-- 1 hqfang nucleisys 103 Sep 22 14:56 nuclei-openocd-2021.09-linux-x32.tgz.sha
-rw-r--r-- 1 hqfang nucleisys 3739862 Sep 22 14:48 nuclei-openocd-2021.09-linux-x64.tgz
-rw-r--r-- 1 hqfang nucleisys 103 Sep 22 14:48 nuclei-openocd-2021.09-linux-x64.tgz.sha
-rw-r--r-- 1 hqfang nucleisys 3588350 Sep 22 15:02 nuclei-openocd-2021.09-win32-x32.zip
-rw-r--r-- 1 hqfang nucleisys 103 Sep 22 15:02 nuclei-openocd-2021.09-win32-x32.zip.sha
-rw-r--r-- 1 hqfang nucleisys 3594359 Sep 22 14:55 nuclei-openocd-2021.09-win32-x64.zip
-rw-r--r-- 1 hqfang nucleisys 103 Sep 22 14:55 nuclei-openocd-2021.09-win32-x64.zip.sha
请参考 riscv-openocd
代码目录下的contrib/loaders/flash/nuspi
请参考 riscv-openocd
代码目录下的src/flash/nor/nuspi.c
请参考 riscv-openocd
代码目录下的src/flash/nor/spi.c
注意: 由于并非所有的Flash型号都做过测试,不能保证代码中列举的Flash均可以正常工作。
请参考 riscv-openocd
这个commit https://github.com/riscv-mcu/riscv-openocd/commit/67c247cb2218b6c5e0a482b0c91cd8d8de789791
请参见编译好的openocd目录下的 doc/pdf/openocd.pdf
push时带上--no-verify
,例如git push --no-verify mcu nuclei-develop
可以使用openocd提供的program filename [preverify] [verify] [reset] [exit] [offset]
功能进行校验,
参见 https://openocd.org/doc/html/Flash-Commands.html#flashprogrammingcommands
假设目前在gdb窗口下,需要下载和校验一个名为helloworld.hex的文件,则可以使用如下命令:
(gdb) monitor program helloworld.hex verify
如下下载校验失败,可以检查一下是否flash被写保护了,这个一般查看对应的Flash的Status Register
可以查到。