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  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 ) 101 ↓ 102BL2( b12.bin ) → 加载BLCP → 初始化协处理器 103 | ↓ 104 ↓ BL3.2( empty.bin ) → 加载小核RT-Thread ( rtthread.bin ) 105BL3.1( OpenSBI ) 106 ↓ 107BL3.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