1 HPM5300EVK简介
HPM5300EVK开发板是上海先楫半导体推出的RISC-V开发板,属于HPM5300系列的微控器。
HPM5300系列 RISC-V CPU 主频高达 480 MHz,内置 288KB SRAM 和 1 MB Flash,并提供 48∼100 脚 LQFP 和 QFN 等封装,包含16KB 高速缓存 (I/D Cache) 和高达 256KB 的零等待指令和数据本地存储器 (ILM / DLM),极大避免了低速外部存储器引发的性能损失。
2 开发工具安装
上海先楫半导体提供了HPM系列SoC底层驱动软件包,提供了SoC上所集成P模块底层驱动代码,集成多种中间件与RTOS。
这里需要下载sdk_env工具RISC-V的交叉编译工具链。
当然也可以使用第三方lDE开发Segger Embedded Studio For RISC-V。先楫半导体为开发者购买了商业的license,用户可以通过邮件的方式,在Segger官网申请license即可使用。
关于Segger Embedded Studio For RISC-V安装餐卡Windows版本。
2.1 Cmake安装
查看cmake版本
$cmake –version
如果版本低于3.12.0则需要更新cmake(通过cmake源码编译升级)
具体方法如下:
编译cmake的过程中依赖一些package,通过以下命令安装一下
$ sudo apt-get install libncurses-dev
$ sudo apt-get install libssl-dev
下载cmake源码、解压、配置、编译、安装
$ wget https://cmake.org/files/v3.22/cmake-3.22.0.tar.gz
$ tar -zxvf cmake-3.22.0.tar.gz
$ cd cmake-3.22.0/
$ ./configure
$ make
$ sudo make install
$ sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
$ cmake --version
2.2 工具链安装
编译代码需要编译器,Linux系统的编译器是GCC,而Windows的C/C++编译器是Microsoft Visual C++,那么要想在Windows也能GCC等一系列编译工具,就需要安装MinGW。
MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物一般是原生 Windows 应用,虽然它本身不一定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。说的通俗点,MinGW就是你在Windows下使用GNU工具链的一个编译工具。
MinGW编译的程序只能在X86上运行,不能运行在嵌入式的硬件平台,因为嵌入式平台大都是RISC-V体系结构,因此这就需要一个在Windows环境下能使用GNU编译RISC-V体系结构的编译工具,这也就是交叉编译工具。
所谓交叉编译工具就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以RISC-V为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到RISC-V CPU平台上才能运行。
做过嵌入式开发的朋友都知道,在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。
嵌入式开发流程大致就是在宿主机完成目标的开发工具,使用功能交叉编译工具生成固件,将固件烧写到目标机,在开发初期,还需要在线调试等工作,这就需要诸如J-link等调试工具。
riscv-gnu-toolchain/就是一个基于RISC-V的交叉编译工具链,而且还是开源的,适用于RISC-V的所有处理器,包括GNU编译器(GCC),以及GDB,不仅适用于Windows,还适用于Linux,MacOS上的交叉编译。
可以到先楫半导体下载交叉编译工具链,当然也可以自己编译。
$ mdkir /opt
将先前下载的工具链压缩包拷贝到toolchain目录下解压
$ tar -zxvf riscv-gnu-toolchain_linux_x86-64.tar.gz
解压后目录如下
编辑~/.bashrc文件
$ vi ~/.bashrc
设置工具链的环境变量,具体以解压路径为准,在文件最后增加一行
export PATH=$PATH:/opt/riscv-gnu-toolchain/bin
保存退出
运行 source ~/.bashrc 让文件生效
$ source ~/.bashrc
交叉编译器验证
方法一:在命令行下输入 riscv32- 然后按tab键看会不会自动补全
方法二:输入:riscv32-unknown-elf-gcc -v
表示配置成功!
2.3 OpenOCD工具安装
OpenOCD: https://github.com/hpmicro/riscv-openocd/tree/riscv-hpmicro
准备openocd工具
$ mdkir openocd
将刚才下载openocd压缩包拷贝到openocd目录下然后解压
$ tar -zxvf openocd_linux_x86-64.tar.gz
当然也可使用源码编译安装。
3 实践
1.下载hpm_sdk仓库代码
$ git clone https://github.com/hpmicro/hpm_sdk.git
2.准备必要编译环境
$ sudo apt install build-essential cmake ninja-build libc6-i386 libc6-i386-cross libstdc++6-i386-cross
3.准备环境变量
export GNURISCV_TOOLCHAIN_PATH="/opt/riscv-gnu-toolchain"
export HPM_SDK_TOOLCHAIN_VARIANT=
注意要替换成自己工具链路径
为了避免每次都要导出环境变量,我们将这两行放到.bashrc文件中
4.获取python依赖
cd ~/hpm_sdk
$ source env.sh
pip3 install \-\-user \-r "HPM_SDK_BASE/scripts/requirements.txt"
5.编译
$ cd samples/hello_world/
$ mkdir build
$ cd build
$ cmake -DBOARD=hpm5300evk ..
$ make
如果没有问题的话,输出如下
6.调试下载
查看一下gdb工具是否可用
7.开始调试
笔者这里使用的J-Link。
新开一个terminal调用openocd
cd ~/hpm_sdk/
source env.sh
cd boards/openocd
sudo /home/bruceou/tools/openocd/bin/openocd -f probes/jlink.cfg -f soc/hpm5361.cfg -f boards/hpm5300evk.cfg
如果有以下错误则按提供的方法解决(缺少libhidapi-hidraw.so.0)
sudo apt-get install -y libhidapi-hidraw0
再次执行openocd命令
此时说明openocd已经正常工作,注意GDB Server在端口3333上监听
8.GDB调试
新开一个terminal,执行调试命令
cd ~/hpm_sdk/
source env.sh
cd samples/hello_world/build/output
使用gdb命令。
然后分别执行命令
file demo.elf
target remote localhost:4444
load
当执行target remote localhost:3333时,openocd窗口有如下输出
添加断点
b main
更多关于GDB调试的内容请自行查找。
至此,开发环境搭建完成。