11<!-- TOC -->
22
3- - [ 参考文档] ( #参考文档 )
4- - [ 概述] ( #概述 )
5- - [ BSP 支持情况] ( #bsp-支持情况 )
6- - [驱动支持列表](#驱动支持列表)
7- - [ 编译] ( #编译 )
8- - [Toolchain 下载](#toolchain-下载)
9- - [依赖安装](#依赖安装)
10- - [构建](#构建)
11- - [ 运行] ( #运行 )
12- - [ FAQ] ( #faq )
13- - [ 联系人信息] ( #联系人信息 )
3+ - [ 1. 参考文档] ( #1-参考文档 )
4+ - [ 2. 概述] ( #2-概述 )
5+ - [ 3. BSP 支持情况] ( #3-bsp-支持情况 )
6+ - [3.1. 驱动支持列表](#31-驱动支持列表)
7+ - [ 4. 编译] ( #4-编译 )
8+ - [4.1. Toolchain 下载](#41-toolchain-下载)
9+ - [4.2. 依赖安装](#42-依赖安装)
10+ - [4.3. 构建](#43-构建)
11+ - [4.3.1. 开发板选择](#431-开发板选择)
12+ - [4.3.2. 开启 RT-Smart](#432-开启-rt-smart)
13+ - [4.3.3. 编译](#433-编译)
14+ - [ 5. 运行] ( #5-运行 )
15+ - [ 6. 大核 RT-Smart 启动并自动挂载根文件系统] ( #6-大核-rt-smart-启动并自动挂载根文件系统 )
16+ - [6.1. 内核构建配置](#61-内核构建配置)
17+ - [6.2. 构建文件系统](#62-构建文件系统)
18+ - [6.3. 将文件系统写入 sd-card](#63-将文件系统写入-sd-card)
19+ - [6.4. 上电启动](#64-上电启动)
20+ - [ 7. FAQ] ( #7-faq )
21+ - [ 8. 联系人信息] ( #8-联系人信息 )
1422
1523<!-- /TOC -->
1624
17- # 参考文档
25+ # 1. 参考文档
1826
1927- 【参考 1】CV1800B/CV1801B Datasheet(中文版):< https://github.com/milkv-duo/duo-files/blob/main/duo/datasheet/CV1800B-CV1801B-Preliminary-Datasheet-full-zh.pdf >
2028- 【参考 2】SG2002/SG2000 技术参考手册(中文版):< https://github.com/sophgo/sophgo-doc/releases > 。官方定期发布 pdf 形式。可以下载下载最新版本的中文版本技术参考手册:` sg2002_trm_cn.pdf ` 或者 ` sg2000_trm_cn.pdf ` 。
2129
22- # 概述
30+ # 2. 概述
2331
2432支持开发板以及集成 SoC 芯片信息如下
2533
@@ -38,7 +46,7 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如
3846 - 大核(RISC-V C906@1GHz)+ 小核(RISC-V C906@700MHz)。
3947 - 大核(ARM Cortex-A53@1GHz)+ 小核(RISC-V C906@700MHz)。
4048
41- # BSP 支持情况
49+ # 3. BSP 支持情况
4250
4351由于大小核的存在,以及不同 SoC 下不同工作模式的存在,bsp/cvitek 提供了三种不同 BSP/OS,需要单独编译。
4452
@@ -52,7 +60,7 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如
5260
5361> 注:不同开发板 uart 输出管脚不同,默认配置可能导致串口无法正常显示,请根据开发板 uart 通过 ` scons --menuconfig ` 配置对应 uart 的输出管脚。
5462
55- ## 驱动支持列表
63+ ## 3.1. 驱动支持列表
5664
5765| 驱动 | 支持情况 | 备注 |
5866| :---- | :------- | :---------------- |
@@ -67,45 +75,54 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如
6775| sdio | 支持 | |
6876| eth | 支持 | |
6977
70- # 编译
78+ # 4. 编译
7179
72- ## Toolchain 下载
80+ ## 4.1. Toolchain 下载
7381
7482> 注:当前 bsp 只支持 Linux 编译,推荐 ubuntu 22.04
7583
76- 1 . RT-Thread 标准版工具链: ` riscv64-unknown-elf-gcc ` 下载地址 [ https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz ] ( https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz )
84+ 1 . 用于编译 RT-Thread 标准版的工具链是 ` riscv64-unknown-elf-gcc ` 下载地址 [ https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz ] ( https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz )
7785
78- 2 . RT-Smart 版工具链: ` riscv64-unknown-linux-musl-gcc ` 下载地址 [ https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 ] ( https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 )
86+ 2 . 用于编译 RT-Thread Smart 版的工具链是 ` riscv64-unknown-linux-musl-gcc ` 下载地址 [ https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 ] ( https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 )
7987
8088
81- 正确解压后,在` rtconfig.py ` 中将 ` riscv64-unknown-elf-gcc ` 或 ` riscv64-unknown-linux-musl-gcc ` 工具链的本地路径加入 ` EXEC_PATH ` 或通过 ` RTT_EXEC_PATH ` 环境变量指定路径。
89+ 正确解压后,导出如下环境变量,建议将这些 export 命令写入 ` ~/.bashrc ` 。** 并注意在使用不同工具链时确保导出正确的一组环境变量** 。
90+
91+ 构建 RT-Thread 标准版时按照以下配置:
8292
8393``` shell
84- # RT-Thread 标准版按照以下配置:
85- $ export RTT_CC_PREFIX=riscv64-unknown-elf-
86- $ export RTT_EXEC_PATH=/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin
94+ export RTT_CC=" gcc"
95+ export RTT_CC_PREFIX=riscv64-unknown-elf-
96+ export RTT_EXEC_PATH=/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin
97+ ```
98+
99+ 构建 RT-Thread Smart 版时按照以下配置:
87100
88- # RT-Samrt 版按照以下配置:
89- $ export RTT_CC_PREFIX=riscv64-unknown-linux-musl-
90- $ export RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
101+ ``` shell
102+ export RTT_CC=" gcc"
103+ export RTT_CC_PREFIX=riscv64-unknown-linux-musl-
104+ export RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
91105```
92106
93- ## 依赖安装
107+ ## 4.2. 依赖安装
94108``` shell
95109$ sudo apt install -y scons libncurses5-dev device-tree-compiler
96110```
97111
98- ## 构建
112+ ## 4.3. 构建
99113
100114异构芯片需单独编译每个核的 OS,在大/小核对应的目录下,依次执行:
101115
102- 1 . 开发板选择
103- Linux平台下,可以先执行:
116+ ### 4.3.1. 开发板选择
117+
118+ Linux平台下,可以先执行:
119+
104120``` shell
105121$ scons --menuconfig
106122```
107123
108- 选择当前需要编译的目标开发板类型
124+ 选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m"。
125+
109126``` shell
110127Board Type (milkv-duo) --->
111128 ( ) milkv-duo
@@ -115,39 +132,131 @@ Board Type (milkv-duo) --->
115132 ( ) milkv-duos
116133```
117134
118- 2 . 可按照以下方式开启 RT-Smart
135+ ### 4.3.2. 开启 RT-Smart
136+
137+ 目前大核默认启用 RT-Smart,小核不支持 RT-Smart。
138+
139+ 如果要对大核启用 RT-Smart,可以按如下方式设置。
119140
120141``` shell
121142RT-Thread Kernel --->
122143 [* ] Enable RT-Thread Smart (microkernel on kernel/userland)
123144```
124145
125- 并配置内核虚拟起始地址 ` 0xFFFFFFC000200000 `
146+ ** 注意检查内核虚拟起始地址的配置,确保为 ` 0xFFFFFFC000200000 ` 。**
147+
126148``` shell
127149 RT-Thread Kernel --->
128150(0xFFFFFFC000200000) The virtural address of kernel start
129151 RT-Thread Components --->
130152```
131153
132- 3 . 编译
154+ ### 4.3.3. 编译
155+
133156``` shell
134157$ scons
135158```
136159
137- 编译成功后,会在 ` bsp/cvitek/output ` 对应开发板型号目录下自动生成 ` fip.bin ` 和 ` boot.sd ` 文件,其中大核运行文件在 ` boot.sd ` 中,小核的运行文件在 ` fip.bin ` 中 。
160+ 编译成功后,会在 ` bsp/cvitek/output ` 对应开发板型号目录下自动生成 ` fip.bin ` 和 ` boot.sd ` 文件。
138161
139- - fip.bin: fsbl、 opensbi、 uboot、小核运行文件打包后的 bin 文件
140- - boot.sd:大核打包后的 bin 文件
162+ - ` fip.bin ` :这是一个打包后生成的 bin 文件,包含了 ` fsbl ` 、 ` opensbi ` 、 ` uboot ` 以及小核的内核镜像文件 ` rtthread.bin ` 。
163+ - ` boot.sd ` :这也是一个打包后生成的 bin 文件,包含了大核的内核镜像文件 ` rtthread.bin ` 。
141164
142- # 运行
165+ # 5. 运行
143166
144- 1 . 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 ` FAT32 ` 。
167+ 1 . 将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 ` FAT32 ` ,用于存放 ` fip. bin` 和 ` boot.sd ` 文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统 。
145168
146- 2 . 将根目录下的 ` fip.bin ` 和 ` boot.sd ` 复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并复制 ` boot.sd ` 文件即可。
169+ 2 . 将根目录下的 ` fip.bin ` 和 ` boot.sd ` 复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并替换 SD 卡第一个分区中的 ` boot.sd ` 文件即可。
147170
1481713 . 更新完固件文件后, 重新上电可以看到串口的输出信息。
149172
150- # FAQ
173+ # 6. 大核 RT-Smart 启动并自动挂载根文件系统
174+
175+ 大核启用 RT-Smart 后可以在启动阶段挂载根文件系统。目前 Duo 支持 ext4,fat 文件格式,下面以 fat 格式为例,具体操作说明如下:
176+
177+ ## 6.1. 内核构建配置
178+
179+ 首先确保开启 RT-Smart,参考 [ 4.3.2. 可按照以下方式开启 RT-Smart] ( #432-可按照以下方式开启-rt-smart ) 。
180+
181+ 在开启 RT-Smart 基础上确保如下配置修改。
182+
183+ - 使能 ` BSP_USING_SDH ` : Enable Secure Digital Host Controller, 因为使用 sd-card 存放文件系统。
184+ - 使能 ` BSP_USING_RTC ` : Enable RTC, 避免挂载文件系统后执行命令报错:` [W/time] Cannot find a RTC device! `
185+ - 使能 ` BSP_ROOTFS_TYPE_DISKFS ` : Disk FileSystems, e.g. ext4, fat ..., 该配置默认已打开。
186+
187+ 保存后重新编译内核。
188+
189+ ## 6.2. 构建文件系统
190+
191+ 这里用 RT-Thread 官方的 userapps 工具制作文件系统。
192+
193+ userapps 仓库地址: < https://github.com/RT-Thread/userapps > 。具体操作参考 [ 《介绍与快速入门》] ( https://github.com/RT-Thread/userapps/blob/main/README.md ) 。
194+
195+ 制作根文件系统步骤如下,供参考:
196+
197+ ``` shell
198+ cd $WS
199+ git clone https://github.com/RT-Thread/userapps.git
200+ cd $WS /userapps
201+ source ./env.sh
202+ cd apps
203+ xmake f -a riscv64gc
204+ xmake -j$( nproc)
205+ xmake smart-rootfs
206+ xmake smart-image -f fat
207+ ```
208+
209+ 在 ` $WS/userapps/apps/build ` 路径下生成根文件系统镜像文件 ` fat.img ` 。
210+
211+ ## 6.3. 将文件系统写入 sd-card
212+
213+ 将 SD 卡分为 2 个分区,第 1 个分区用于存放 ` fip.bin ` 和 ` boot.sd ` 文件,第 2 个分区用于存放文件系统,分区格式为 ` FAT32 ` 。
214+
215+ 将 SD 卡插入 PC 主机系统,假设为 Ubuntu,识别为 ` /dev/sdb ` ,则第二个分区为 ` /dev/sdb2 ` 。将第二个分区挂载,假设挂载到 ` ~/ws/u-disk ` 。
216+
217+ 将上一步生成的 ` fat.img ` 文件也挂载到一个临时目录,假设是 ` /tmp ` 。
218+
219+ 最后将 /tmp 下的文件全部拷贝到 ` ~/ws/u-disk ` 中,即完成对 SD 卡中文件系统分区的烧写。
220+
221+ 最后不要忘记卸载 SD 卡的分区。
222+
223+ 简单步骤示例如下,供参考:
224+
225+ ``` shell
226+ sudo mount -o loop fat.img /tmp
227+ sudo mount /dev/sdb2 ~ /ws/u-disk
228+ sudo cp -a /tmp/* ~ /ws/u-disk
229+ sudo umount ~ /ws/u-disk
230+ sudo umount /tmp
231+ ```
232+
233+ ## 6.4. 上电启动
234+
235+ 启动完成后, 会看到 ` [I/app.filesystem] device 'sd1' is mounted to '/' as FAT ` 的输出,说明文件系统挂载成功。此时 ` msh ` 被替换为 ` /bin/ash ` 。
236+
237+ ``` shell
238+ \ | /
239+ - RT - Thread Smart Operating System
240+ / | \ 5.2.0 build Nov 26 2024 09:55:38
241+ 2006 - 2024 Copyright by RT-Thread team
242+ lwIP-2.1.2 initialized!
243+ [I/sal.skt] Socket Abstraction Layer initialize success.
244+ [I/drivers.serial] Using /dev/ttyS0 as default console
245+ [I/SDIO] SD card capacity 30216192 KB.
246+ [I/SDIO] sd: switch to High Speed / SDR25 mode
247+
248+ found part[0], begin: 1048576, size: 128.0MB
249+ found part[1], begin: 135266304, size: 28.707GB
250+ [I/app.filesystem] device ' sd1' is mounted to ' /' as FAT
251+ Hello RT-Smart!
252+ msh /> [E/sal.skt] not find network interface device by protocol family(1).
253+ [E/sal.skt] SAL socket protocol family input failed, return error -3.
254+ / # ls
255+ bin etc mnt root sbin tc usr
256+ dev lib proc run services tmp var
257+ ```
258+
259+ # 7. FAQ
151260
1522611 . 如遇到不能正常编译,请先使用 ` scons --menuconfig ` 重新生成配置。
153262
@@ -162,7 +271,7 @@ $ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
162271
1632723 . 如发现切换开发板编译正常,但无法正常打包,请切换至自动下载的 ` cvi_bootloader ` 目录,并手工运行 ` git pull ` 更新,或删除该目录后重新自动下载。
164273
165- # 联系人信息
274+ # 8. 联系人信息
166275
167276维护人:[ flyingcys] ( https://github.com/flyingcys )
168277
0 commit comments