快速上手
注:本文介绍的快速上手基于 Ubuntu/Linux 环境。
我们的开发主机(host)为 x86_64,推荐采用 Ubuntu 20 或者以上版本系统。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focalAPT 安装一些依赖的工具
$ sudo apt update
$ sudo apt install git build-essential python3下载本仓库,假设你的工作路径为 $WS, 且下载本仓库的路径为 $WS/bm4duo。
$ cd $WS
$ git clone git@github.com:unicornx/bm4duo.git下载 Sophgo 提供的编译工具链,假设下载后的路径为 $WS/host-tools。
$ cd $WS
$ git clone git@github.com:sophgo/host-tools.git记得修改 $WS/bm4duo/Makefile 中的 TOOL_PATH,确保其指向下载的 Sophgo 编译工具链。因为我们采用交叉构建方式编译,所以选择针对 RISC-V 裸机交叉开发的 GCC:riscv64-elf-x86_64, 举例如下。
TOOL_PATH := $WS/host-tools/gcc/riscv64-elf-x86_64/bin新版本的 $WS/bm4duo/Makefile 中的 TOOL_PATH 默认值已经改为 /opt/bm4duo-toolchain。所以为了尽量不修改原始仓库代码,我们也可以在系统中建立一个 /opt/bm4duo-toolchain 的符号链接,将其指向 $WS/host-tools/gcc/riscv64-elf-x86_64/bin。
$ sudo ln -s $WS/host-tools/gcc/riscv64-elf-x86_64/bin /opt/bm4duo-toolchain记得将以上路径中的 $WS 替换为您本机的实际工作路径。
进入 $WS/bm4duo,执行 build.sh 脚本,注意该文件是一个符号链接,实际执行的文件是 bm4duo 仓库下的 ./scripts/build.sh。
直接运行 build.sh 会打印简单的使用帮助,该脚本比较简单,感兴趣也可以直接阅读脚本内容了解功能:
$ ./build.sh
Usage: [BOARD=board] build.sh '-h'|'-a'|<case>
board: duo/duo256, default is duo256
-h: print this usage
-a: try to build all cases, just used for integrity test and no output created
<case>: build <case>, <case> can be: gpio uart pwm rtc rtc_irq wdt adc i2c timer spi dbg需要注意的是:
- 本仓库支持多个 duo 产品,默认构建 duo256 的程序,如果要切换到其他产品,譬如 duo,可以利用环境变量
BOARD进行指定, 譬如要构建 duo 的程序,可以执行BOARD=duo ./build.sh xxx。 -a仅用于完整性构建测试,即批处理一次性构建所有的用例。- 正常情况下,一次构建只针对一个用例。譬如我们要构建针对 duo256 的 gpio 这个测试用例,可以输入:
./build.sh gpio
构建完成后生成的程序文件在 bm4duo 仓库下的 release_out 目录下,文件名称为 fip.bin
生成 fip.bin 文件后可以将其写入 sd-card 的第一个分区中,然后将 sd-card 插入 duo 开发板的 micro-sd 卡槽中,上电即可工作。可以连接串口观察程序输出。
为方便在 Linux 环境下烧写 sd-card,bm4duo 仓库根目录下提供了一个名为 mkcard.sh 的脚本,如果您使用的是市面上常用的 USB 接口的 sdcard 读写器,可以直接运行该脚本将生成的 fip.bin 文件 写入 sd-card 的第一个分区。该脚本也是一个符号链接,实际执行的文件是 bm4duo 仓库下的 ./scripts/flash_sdcard.sh。使用该脚本时有以下几点注意一下:
- 执行该脚本需要 sudo 权限。
- 该脚本默认您的读卡器连上 Linux 主机后枚举的设备文件名为
/dev/sdb1。如果你的设备枚举名称不同,可以在执行脚本时通过环境变量DEV自行指定。譬如假设您的 sdcard 设备的第一个分区枚举为/dev/sdc1, 则我们可以在 Linux 命令行输入DEV=/dev/sdc1 ./mkcard.sh来烧写程序。 - 该脚本将设备
$DEV挂载到挂载点$UDISK, 如果您使用不同的挂载点路径,可以直接修改mkcard.sh脚本中的环境变量UDISK, 或者和DEV类似在执行脚本命令时指定。譬如假设您的挂载点路径为/mnt/u-disk, 则我们可以在 Linux 命令行输入UDISK=/mnt/u-disk ./mkcard.sh来烧写程序。
有关 Linux 上 sd-card 的制作可以参考《将 RVOS 移植到 MilkV-Duo 上》 的 “sd-card 启动盘的制作” 章节介绍。其他系统(如 Windows 上操作可自行尝试,这里不再给出。)
有关 Linux 上开发板接串口可以参考《将 RVOS 移植到 MilkV-Duo 上》 的 “其他注意事项:串口连接和设置” 章节介绍。其他系统(如 Windows 上操作可自行尝试,这里不再给出。)
调试时,我们需要将调试主机和开发板之间通过特殊的 CKLINK 进行连接,连接示意图如下,具体可以参考 T-Head DebugServer 用户手册。
图 1:调试环境
注意 目前我们发现由于 Duo 开发板的限制,采用平头哥默认的官方 CKLink 反而连接不上,但是我们发现可以采用 Sipeed 开发的一款 四合一功能的设备 SLogic Combo 8 进行连接。具体有关产品的介绍可以访问 SLogic Combo 8 的官网。具体购买可以上淘宝。
图 2:SLogic Combo 8
SLogic Combo 8 是一款兼有逻辑分析仪、CKLink Debugger、DAP-Link Debugger、USB2UART 功能的开发工具。我们这里只用到 CKLink Debugger 的功能。
关于如何将开发板和 Host 主机通过 CKLink 进行连接,具体参考 SLogic Combo 8 作为 CKLink 使用说明。
按下切换按键,确保指示灯切换为黄色。
以 duo 256 为例,具体连线时,参考 duo 256 引脚图。将 CKLink 的 GND/TCK/TDI/TDO/TMS 和 duo 256 的 GND(3)/GP3(5)/GP0(1)/GP1(2)/GP2(4) 分别相连。
CKlink Duo256M
GND <------> GND(3)
TCK <------> GP3(5)
TDI <------> GP0(1)
TDO <------> GP1(2)
TMS <------> GP2(4)
软件环境特指 图 1:调试环境 中 Host 上的软件布署。目前有两种方式:
-
方式一:采用 Windows 上 CDS 集成开发环境,这是一个具有 GUI 的开发环境,具体介绍请阅读 《基于 CDS 集成开发环境进行调试的说明》。其实基于 CDS 环境除了调试,也可以进行开发,有关基于 CDS 开发的内容,这里不做介绍,感兴趣可以自己研究。
-
方式二:采用 Ubuntu/Linux 环境,继续延续了本文前面部分 Linux 下命令行操作的习惯,具体介绍请阅读 《基于 Ubuntu/Linux 进行调试的说明》。

