• Home
  • Annotate
  • current directory
Name Date Size #Lines LOC

..21-Aug-2025-

applications/21-Aug-2025-

board/21-Aug-2025-

.config A D21-Aug-202549.4 KiB1,5161,404

.gitignore A D21-Aug-20255 11

Kconfig A D21-Aug-2025851 4835

README.md A D21-Aug-20258.6 KiB198141

SConscript A D21-Aug-2025311 1511

SConstruct A D21-Aug-20251.6 KiB5139

rtconfig.h A D21-Aug-202511.2 KiB511169

rtconfig.py A D21-Aug-20251.7 KiB5042

switchto-arm.png A D21-Aug-2025225.8 KiB

README.md

1<!-- TOC -->
2
3- [1. 概述](#1-概述)
4	- [1.1. 驱动支持列表](#11-驱动支持列表)
5- [2. 构建说明](#2-构建说明)
6	- [2.1. Toolchain 下载](#21-toolchain-下载)
7	- [2.2. 依赖安装](#22-依赖安装)
8	- [2.3. 执行构建](#23-执行构建)
9		- [2.3.1. 开发板选择](#231-开发板选择)
10		- [2.3.2. 开启 RT-Smart](#232-开启-rt-smart)
11		- [2.3.3. 编译大核固件 `boot.sd`](#233-编译大核固件-bootsd)
12- [3. 运行](#3-运行)
13	- [3.1. RT-Thread 标准版的例子](#31-rt-thread-标准版的例子)
14	- [3.2. RT-Thread Smart 版的例子](#32-rt-thread-smart-版的例子)
15- [4. 联系人信息](#4-联系人信息)
16
17<!-- /TOC -->
18
19# 1. 概述
20
21本文档用于介绍 BSP "cv18xx_aarch64",该 BSP 目前仅支持 Milk-V Duo 256M 的 ARM Cortex A53 大核。支持 RT-Thread 标准版和 RT-Thread Smart 版内核。
22
23## 1.1. 驱动支持列表
24
25| 驱动  | 支持情况 | 备注              |
26| :---- | :------- | :---------------- |
27| uart  | 支持     | 默认波特率115200  |
28
29# 2. 构建说明
30
31**注:当前 bsp 只支持 Linux 环境下编译,推荐 ubuntu 22.04**
32
33## 2.1. Toolchain 下载
34
35用于编译 RT-Thread 标准版和 RT-Thread Smart 版的工具链可以通用,下载地址:<https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2>。
36
37正确解压后(假设解压到 `/opt` 下, 也可以自己设定解压后的目录),导出如下环境变量,建议将这些 export 命令写入 `~/.bashrc`。
38
39```shell
40export RTT_CC="gcc"
41export RTT_CC_PREFIX=aarch64-linux-musleabi-
42export RTT_EXEC_PATH=/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
43```
44
45## 2.2. 依赖安装
46
47参考 [bsp cvitek 的 README.md 文件](../README.md)。
48
49## 2.3. 执行构建
50
51首先确保 RISC-V 小核已经构建完成并生成了 `rtthread.bin` 。Duo 256m 的小核是一个 RISC-V 的 core,对应的 bsp 是 `bsp/cvitek/c906_little`。具体构建的说明参考 [bsp cvitek 的 README.md 文件](../README.md)。构建过后会生成小核的内核镜像文件 `rtthread.bin`,在使用 `rttpkgtool` 制作ARM架构`fip.bin`固件时会使用到。
52
53 `rttpkgtool` 目录下有对应开发板和架构制作固件时所需使用的预编译文件,也可以在 `rttpkgtool` 目录下运行 `./prebuild.sh` 命令来重新制作预编译文件 参考[ rttpkgtool 的 README.md 文件](../rttpkgtool/README.md)。
54
55### 2.3.1. 开发板选择
56
57```shell
58$ scons --menuconfig
59```
60
61选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m",目前也仅支持了 "milkv-duo256m"。
62
63### 2.3.2. 开启 RT-Smart
64
65目前 ARM 的大核默认没有开启 RT-Smart,默认配置是 RT 标准版,如果要对大核启用 RT-Smart,可以按如下方式设置。
66
67```shell
68RT-Thread Kernel  --->
69    [*] Enable RT-Thread Smart (microkernel on kernel/userland)
70```
71
72### 2.3.3. 编译固件
73
74```shell
75$ scons
76```
77
78scons 会执行如下步骤的工作:
79
80- 如果编译正确无误,在 `$CWD` 下会产生 `rtthread.bin` 文件。
81- 通过运行 `../build.sh -a` ,利用 rttpkgtool 下提供的可以在 ARM 核上运行的 `fsbl`、`uboot` 等预编译文件,打包生成可供 ARM 大核解析和运行的 `fip.bin`。`fip.bin` 会生成在 `$CWD/../output/milkv-duo256m/` 下。
82- 在 `$CWD/../output/milkv-duo256m/` 下生成 `fip.bin`和`boot.sd` 文件,`fip.bin`中封装了RISCv小核对应的`rtthread.bin`, `boot.sd` 中封装了 ARM 大核对应的 `Image` (与`rtthread.bin`等同)。
83
84# 3. 运行
85
861. 将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 `FAT32`,用于存放 `fip.bin` 和 `boot.sd` 文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统。
87
882. 将 `fip.bin` 和 `boot.sd` 复制到 SD 卡第一个分区中。`fip.bin` 是小核启动固件,如果只关注 ARM 大核系统,后续只需更新大核的固件,即更新 `boot.sd` 文件即可。
89
903. Duo256M 的大核可以选择使用 RISC-V 或者 ARM,默认使用的是 RISC-V 核,所以这里需要通过短接物理引脚 35(Boot-Switch)和 GND 来切换到 ARM 核,如下图所示。具体参考 [Milk-V Duo 256M 的官方说明](https://milkv.io/zh/docs/duo/getting-started/duo256m#risc-v-%E4%B8%8E-arm-%E5%88%87%E6%8D%A2)91
92   ![](./switchto-arm.png)
93
944. 配置 **串口0** 参数: 115200 8N1 ,硬件和软件流控为关。
95
96开发板上电运行后会先执行BL1 BootROM程序,这段程序是芯片厂烧写在芯片内部,它会加载我们制作的 Fip.bin 固件,也就是从BL2开始往后的代码,运行到BLCP代码段后加载小核的 `rtthread.bin` 运行,运行到 uboot 代码段后会自动调用 bootcmd 解析 `boot.sd` 文件,然后大核加载 `rtthread.bin`运行。
97
98SOC双核启动流程如下:
99```shell
100BL1( BootROM )
101102BL2( b12.bin )    →   加载BLCP   →  初始化协处理器
103  |                       ↓
104  ↓                  BL3.2( empty.bin )  →  加载小核RT-Thread ( rtthread.bin )
105BL3.1( OpenSBI )
106107BL3.3( U-Boot )  →  加载大核RT-Thread ( Boot.sd )
108```
109
110## 3.1. RT-Thread 标准版的例子
111
112```shell
113......
114
115U-Boot 2021.10-ga57aa1f29b (Apr 20 2024 - 23:53:08 +0800)cvitek_cv181x
116
117......
118
119Starting kernel ...
120
121[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0
122[I/rtdm.ofw] Machine model: SOPHGO ASIC. ARM.
123[I/rtdm.ofw] Memory node(1) ranges: 0x0000000080000000 - 0x000000008fe00000
124[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported
125[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported
126[I/mm.memblock] System memory:
127[I/mm.memblock]                    [0x0000000080000000, 0x000000008fe00000]
128[I/mm.memblock] Reserved memory:
129[I/mm.memblock]                    [0x0000000080000000, 0x0000000080080000]
130[I/mm.memblock]                    [0x0000000080200000, 0x00000000802dd000]
131[I/mm.memblock]                    [0x00000000802dd000, 0x00000000842dd000]
132[I/mm.memblock]                    [0x00000000842dd000, 0x00000000844dd000]
133[I/mm.memblock]                    [0x00000000844dd000, 0x00000000844e2000]
134[I/mm.memblock] physical memory region [0x0000000080080000-0x0000000080200000] installed to system page
135[I/mm.memblock] physical memory region [0x00000000844e2000-0x000000008fe00000] installed to system page
136[I/mm.memblock] 195 MB memory installed to system page
137[I/drv.pinmux] Pin Name = "UART0_RX", Func Type = 281, selected Func [0]
138
139[I/drv.pinmux] Pin Name = "UART0_TX", Func Type = 282, selected Func [0]
140
141[I/osi.psci] Using PSCI v1.0 Function IDs
142[I/rtdm.ofw] Console: uart0 (<no-node>)
143
144 \ | /
145- RT -     Thread Operating System
146 / | \     5.2.0 build Dec 25 2024 14:16:49
147 2006 - 2024 Copyright by RT-Thread team
148[I/rtdm.mnt] File system initialization done
149Hello AARCH64 !
150msh />
151```
152
153## 3.2. RT-Thread Smart 版的例子
154
155```shell
156U-Boot 2021.10-ga57aa1f29b (Apr 20 2024 - 23:53:08 +0800)cvitek_cv181x
157
158......
159
160Starting kernel ...
161
162[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0
163[I/rtdm.ofw] Machine model: SOPHGO ASIC. ARM.
164[I/rtdm.ofw] Memory node(1) ranges: 0x0000000080000000 - 0x000000008fe00000
165[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported
166[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported
167[I/mm.memblock] System memory:
168[I/mm.memblock]                    [0x0000000080000000, 0x000000008fe00000]
169[I/mm.memblock] Reserved memory:
170[I/mm.memblock]                    [0x0000000080000000, 0x0000000080080000]
171[I/mm.memblock]                    [0x0000000080200000, 0x0000000080346000]
172[I/mm.memblock]                    [0x0000000080346000, 0x0000000084346000]
173[I/mm.memblock]                    [0x0000000084346000, 0x0000000084546000]
174[I/mm.memblock]                    [0x0000000084546000, 0x000000008454b000]
175[I/mm.memblock] physical memory region [0x0000000080080000-0x0000000080200000] installed to system page
176[I/mm.memblock] physical memory region [0x000000008454b000-0x000000008fe00000] installed to system page
177[I/mm.memblock] 195 MB memory installed to system page
178[I/drv.pinmux] Pin Name = "UART0_RX", Func Type = 281, selected Func [0]
179
180[I/drv.pinmux] Pin Name = "UART0_TX", Func Type = 282, selected Func [0]
181
182[I/osi.psci] Using PSCI v1.0 Function IDs
183[I/rtdm.ofw] Console: uart0 (<no-node>)
184
185 \ | /
186- RT -     Thread Smart Operating System
187 / | \     5.2.0 build Dec 25 2024 12:10:56
188 2006 - 2024 Copyright by RT-Thread team
189[I/drivers.serial] Using /dev/ttyS0 as default console
190[I/rtdm.mnt] File system initialization done
191Hello AARCH64 !
192msh />
193```
194
195# 4. 联系人信息
196
197维护人:[liYony](https://github.com/liYony)
198