@@ -12,12 +12,10 @@ CanMV-K230 Board Support Package 使用说明
12
12
- [3.2.3. Env](#323-env)
13
13
- [3.3. 下载 RT-Thread 并更新依赖的软件包](#33-下载-rt-thread-并更新依赖的软件包)
14
14
- [3.4. 构建](#34-构建)
15
- - [ 4. 烧写] ( #4-烧写 )
16
- - [4.1. 制作启动 SD 卡](#41-制作启动-sd-卡)
17
- - [4.1.1. 编译固件](#411-编译固件)
18
- - [4.1.2. 烧录固件](#412-烧录固件)
19
- - [4.2. 单独更新 RT-Thread 内核](#42-单独更新-rt-thread-内核)
20
- - [ 5. 上电启动] ( #5-上电启动 )
15
+ - [ 4. 采用 rttpkgtool 对内核打包] ( #4-采用-rttpkgtool-对内核打包 )
16
+ - [ 5. 制作基础 SD 卡] ( #5-制作基础-sd-卡 )
17
+ - [ 6. 单独更新 RT-Thread 内核] ( #6-单独更新-rt-thread-内核 )
18
+ - [ 7. 上电启动] ( #7-上电启动 )
21
19
22
20
<!-- /TOC -->
23
21
@@ -105,19 +103,64 @@ $ scons -j$(nproc)
105
103
106
104
此时在 ` $WS/rt-thread/bsp/k230 ` 下会看到生成了 ` rtthread.bin ` , 这个就是我们构建出来的内核二进制文件。
107
105
106
+ # 4. 采用 rttpkgtool 对内核打包
108
107
109
- # 4. 烧写
108
+ 直接构建生成的 ` rtthread.bin ` 并不能直接用于启动,我们采用 rttpkgtool 对 ` rtthread.bin ` 进行二次打包生成符合开发板能够识别的格式。
110
109
111
- ` rtthread.bin ` 并不能直接运行。目前我们基于 Canaan 官方的 RTOS-only SDK 制作 SD 卡,并基于 SD 卡启动内核。
110
+ 可以从以下网站获取 rttpkgtool( ** 注意需要切换到 ` for-k230 ` 分支 ** ):
112
111
113
- ## 4.1. 制作启动 SD 卡
112
+ - 主站(github):< https://github.com/plctlab/rttpkgtool >
113
+ - 中国区镜像(gitee):< https://gitee.com/unicornx/rttpkgtool/ >
114
114
115
- ### 4.1.1. 编译固件
115
+ 为方便使用,在本 bsp 下提供了一份封装脚本 ` build.sh ` ,可以直接执行后打包生成最终可以烧录的 ` opensbi_rtt_system.bin ` 文件。
116
116
117
- 参考 K230 RTOS Only 用户指南中的 “如何编译固件”: < https://developer.canaan-creative.com/k230_rtos/zh/dev/userguide/how_to_build.html > 。
117
+ 但需要注意是, ` build.sh ` 只负责下载 rttpkgtool 并运行 rttpkgtool,但不会自动安装 rttpkgtool 依赖的工具软件,所以在使用 ` build.sh ` 前请仔细阅读 rttpkgtool 仓库的 “for-k230” 分支上的 ` README.md ` 文件。提前安装好一些额外的依赖和用于编译 opensbi 的交叉工具链( ** 注意这个编译 opensbi 的交叉工具链和编译 RTT 的 工具链是不同的 ** ) 。
118
118
119
- 假设 sdk 安装的路径在 ` $WS/rtos_k230 `
120
- 注意事项如下:
119
+ 以上依赖和交叉工具链安装好后,可以执行如下命令进行打包:
120
+
121
+ ``` shell
122
+ $ cd rt-thread/bsp/k230 # 确保在本 bsp 目录下
123
+ $ ./build.sh
124
+ BSP_PATH: /home/u/ws/canaan/rt-thread/bsp/k230
125
+ rttpkgtool does not exist, clone it from https://gitee.com/unicornx/rttpkgtool.git
126
+ Cloning into ' /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool' ...
127
+ ......
128
+ Trying to download the opensbi source code ......
129
+ /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool/output/src/opensbi does not exist, clone it from https://gitee.com/canmv-k230/opensbi.git
130
+ Cloning into ' /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool/output/src/opensbi' ...
131
+ ......
132
+ AS-DEP platform/kendryte/fpgac908/firmware/fw_payload.dep
133
+ ......
134
+ CC lib/sbi/riscv_asm.o
135
+ ......
136
+ OBJCOPY platform/kendryte/fpgac908/firmware/fw_payload.bin
137
+ ~ /ws/canaan/rt-thread/bsp/k230/rttpkgtool
138
+ Image Name: rtt
139
+ Created: Sun Apr 27 15:26:23 2025
140
+ Image Type: RISC-V RISC-V OpenSBI Multi-File Image (gzip compressed)
141
+ Data Size: 391973 Bytes = 382.79 KiB = 0.37 MiB
142
+ Load Address: 00000000
143
+ Entry Point: 00000000
144
+ Contents:
145
+ Image 0: 391965 Bytes = 382.78 KiB = 0.37 MiB
146
+ the magic is: b' K230'
147
+ ----- NO ENCRYPTION + HASH-256 -----
148
+ the encryption type: 0
149
+ mesg_hash: b' 7c469067ab0e5c3f9701f8dbd67ffe90f0213d14aa3ac262f7d9fdeff0343377'
150
+ /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool
151
+ Generate the image file successfully!
152
+ The image file is located at /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool/output/k230_rtos_01studio_defconfig/images/opensbi/opensbi_rtt_system.bin
153
+ ```
154
+
155
+ 第一次执行 ` build.sh ` 会自动 clone 下载 rttpkgtool 以及 opensbi 源码,并完整编译 opensbi 后再执行打包。以后执行 ` build.sh ` 只会增量打包。
156
+
157
+ 如果希望重新下载 rttpkgtool 以及 opensbi,可以删除 ` rt-thread/bsp/k230 ` 下的 ` rttpkgtool ` 目录后重新执行 ` build.sh ` 脚本即可。
158
+
159
+ # 5. 制作基础 SD 卡
160
+
161
+ 在单独更新内核镜像之前,我们需要先制作一个基础的 SD 卡。可以参考 K230 RTOS Only SDK 用户指南中的 “如何编译固件”:< https://developer.canaan-creative.com/k230_rtos/zh/dev/userguide/how_to_build.html > 生成一个完整的 image。
162
+
163
+ 假设 sdk 安装的路径在 ` $WS/rtos_k230 ` 。注意事项如下:
121
164
122
165
- 目前用户指南的环境只在 Ubuntu 20.04 LTS (x86_64) 上验证过,* 其他 Linux 发行版未经充分测试,可能存在兼容性问题* 。为避免和 BSP 构建环境冲突,建议在另外一台机器或者虚拟机中搭建此环境。
123
166
@@ -140,56 +183,33 @@ $ scons -j$(nproc)
140
183
141
184
为简单起见,这里选择 “ k230_rtos_01studio_defconfig” 。
142
185
143
- 最后在 ` $WS/rtos_k230/output/k230_rtos_01studio_defconfig/ ` 下生成 ` RtSmart-K230_01Studio_rtsmart_local_nncase_v2.9.0.img `
144
-
145
- ### 4.1.2. 烧录固件
186
+ 构建完成后在 ` $WS/rtos_k230/output/k230_rtos_01studio_defconfig/ ` 下生成 ` RtSmart-K230_01Studio_rtsmart_local_nncase_v2.9.0.img `
146
187
147
- 参考 K230 RTOS Only 用户指南中的 “如何烧录固件”:< https://developer.canaan-creative.com/k230_rtos/zh/dev/userguide/how_to_flash.html > , 通过 SD 卡烧录。熟悉 Windows 平台的可以使用 balenaEtcher。
188
+ 然后参考 K230 RTOS Only SDK 用户指南中的 “如何烧录固件”:< https://developer.canaan-creative.com/k230_rtos/zh/dev/userguide/how_to_flash.html > , 通过 SD 卡烧录。熟悉 Windows 平台的可以使用 balenaEtcher。烧录后,SD 卡上会自动分区和格式化 。
148
189
149
- ## 4.2. 单独更新 RT-Thread 内核
190
+ ** 注意本小节的操作只要做一次 ** 。以后只要单独更新 RT-Thread 内核的镜像即可。
150
191
151
- 在开发 BSP 过程中每次更新内核都烧写整个 SD 卡是一件非常麻烦的事情。以下操作只更新内核所在分区。
152
-
153
- 首先前面构建生成的 ` rtthread.bin ` 并不能直接用,而是需要和 opensbi 的 image 打包后才能被 u-boot 加载。我们这里利用 K230 RTOS Only SDK 来打包。具体步骤如下:
154
-
155
- 先将前面生成的 ` rtthread.bin ` 拷贝到 ` $WS/rtos_k230/output/k230_rtos_01studio_defconfig/images/rtsmart ` 下。
156
-
157
- 修改 ` rtos_k230/Makefile ` :
158
-
159
- ``` diff
160
- diff --git a/Makefile b/Makefile
161
- index 45a3f0c..39a017b 100644
162
- --- a/Makefile
163
- +++ b/Makefile
164
- @@ -93,13 +93,20 @@ rtsmart-menuconfig:
165
- @$(MAKE) -C $(SDK_RTSMART_SRC_DIR) menuconfig
166
-
167
- .PHONY: opensbi opensbi-clean opensbi-distclean
168
- - opensbi: .autoconf rtsmart
169
- + opensbi: .autoconf
170
- @$(MAKE) -C $(SDK_OPENSBI_SRC_DIR) all
171
- opensbi-clean:
172
- @$(MAKE) -C $(SDK_OPENSBI_SRC_DIR) clean
173
- opensbi-distclean:
174
- @$(MAKE) -C $(SDK_OPENSBI_SRC_DIR) distclean
175
- ```
176
- 然后执行:
177
-
178
- ``` shell
179
- $ make opensbi
180
- ```
192
+ # 6. 单独更新 RT-Thread 内核
181
193
182
- 会在 ` $WS/rtos_k230/output/k230_rtos_01studio_defconfig/images/opensbi ` 下生成一个新的 ` opensbi_rtt_system.bin ` ,这也是我们要烧写的最终文件 。
194
+ 我们可以利用 rttpkgtool 提供的脚本 ` sdcard.sh ` 快速更新打包后生成的内核镜像 ` opensbi_rtt_system.bin ` 。
183
195
184
- 将 SD卡通过 USB 读卡器接入 Ubuntu 机器。假设枚举为 ` /dev/sdb ` 。执行如下命令烧写:
196
+ 先将 SD 卡通过 USB 读卡器接入 Ubuntu 机器。以下假设 USB 读卡器设备枚举为 ` /dev/sdb ` 。如果不同请阅读 ` sdcard.sh ` 脚本代码。
185
197
186
198
``` shell
187
- $ sudo dd if=$WS /rtos_k230/output/k230_rtos_01studio_defconfig/images/opensbi/opensbi_rtt_system.bin of=/dev/sdb seek=20480
199
+ $ cd rt-thread/bsp/k230 # 确保在本 bsp 目录下
200
+ $ ./rttpkgtool/script/sdcard.sh
201
+ SRC: /home/u/ws/canaan/rt-thread/bsp/k230/rttpkgtool/output/k230_rtos_01studio_defconfig/images/opensbi/opensbi_rtt_system.bin
202
+ DEST: /dev/sdb
203
+ [sudo] password for u:
204
+ 766+1 records in
205
+ 766+1 records out
206
+ 392569 bytes (393 kB, 383 KiB) copied, 0.0886941 s, 4.4 MB/s
207
+ Done!
188
208
```
189
209
190
- # 5 . 上电启动
210
+ # 7 . 上电启动
191
211
192
- 将 SD 卡插入 01Studo 开发板的 SD 卡槽。
212
+ 将 SD 卡插入 01Studio 开发板的 SD 卡槽。
193
213
194
214
连接 USB 转 UART 串口线到 “CPU0 调试口”,具体见下图:
195
215
0 commit comments