|
1 | | -# Milkv-Duo256M 板级支持包说明 |
| 1 | +<!-- TOC --> |
2 | 2 |
|
3 | | -## 1. 简介 |
| 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. 编译](#233-编译) |
| 12 | +- [3. 运行](#3-运行) |
| 13 | + - [3.1. RT-Thread 标准版的例子](#31-rt-thread-标准版的例子) |
| 14 | + - [3.2. RT-Thread Smart 版的例子](#32-rt-thread-smart-版的例子) |
| 15 | +- [4. 联系人信息](#4-联系人信息) |
4 | 16 |
|
5 | | -Milk-V Duo 256M 是 Duo 的升级版本,内存提升至 256M,满足需要更大内存容量的应用。采用 SG2002 计算系列芯片,计算能力提升至 1.0TOPS@INT8。它可以实现 RISC-V/ARM 架构之间的无缝切换,并支持双系统同时运行。此外,它还包含 SPI、UART 等一系列丰富的 GPIO 接口,适合边缘智能监控领域的各种硬件开发,包括 IP 摄像头、智能猫眼锁、可视门铃等。 |
| 17 | +<!-- /TOC --> |
6 | 18 |
|
7 | | -该板级支持包主要是针对**ARM架构的大核**实现的一份移植,支持RT-Thread标准版和Smart版内核。 |
| 19 | +# 1. 概述 |
8 | 20 |
|
9 | | -## 2. 编译说明 |
| 21 | +本文档用于介绍 BSP "cv18xx_aarch64",该 BSP 目前仅支持 Milk-V Duo 256M 的 ARM Cortex A53 大核。支持 RT-Thread 标准版和 RT-Thread Smart 版内核。 |
10 | 22 |
|
11 | | -推荐使用ubuntu20的[env环境](https://github.com/RT-Thread/env),当然也可以使用windows上的[env工具](https://www.rt-thread.org/download.html#download-rt-thread-env-tool)进行编译。下面介绍**标准版**和**Smart版本**的编译流程。 |
| 23 | +## 1.1. 驱动支持列表 |
12 | 24 |
|
13 | | -### 2.1 RT-Thread编译 |
| 25 | +| 驱动 | 支持情况 | 备注 | |
| 26 | +| :---- | :------- | :---------------- | |
| 27 | +| uart | 支持 | 默认波特率115200 | |
14 | 28 |
|
15 | | -**1.menuconfig配置工程:** |
| 29 | +# 2. 构建说明 |
16 | 30 |
|
17 | | -该BSP默认menuconfig支持的就是RT-Thread标准版,无需配置工程。 |
| 31 | +**注:当前 bsp 只支持 Linux 环境下编译,推荐 ubuntu 22.04** |
18 | 32 |
|
19 | | -**2.配置工具链相关环境:** |
| 33 | +## 2.1. Toolchain 下载 |
20 | 34 |
|
21 | | -依次执行下面命令进行环境变量的相关配置: |
| 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`。 |
22 | 38 |
|
23 | 39 | ```shell |
24 | | -export RTT_CC=gcc |
25 | | -export RTT_EXEC_PATH="/opt/tools/gnu_gcc/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/bin" |
26 | | -export RTT_CC_PREFIX=aarch64-none-elf- |
27 | | -export PATH=$PATH:$RTT_EXEC_PATH |
| 40 | +export RTT_CC="gcc" |
| 41 | +export RTT_CC_PREFIX=aarch64-linux-musleabi- |
| 42 | +export RTT_EXEC_PATH=/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin |
28 | 43 | ``` |
29 | 44 |
|
30 | | -**3.编译:** |
| 45 | +## 2.2. 依赖安装 |
31 | 46 |
|
32 | | -```shell |
33 | | -scons -j12 |
34 | | -``` |
| 47 | +参考 [bsp cvitek 的 README.md 文件](../README.md)。 |
| 48 | + |
| 49 | +## 2.3. 执行构建 |
35 | 50 |
|
36 | | -### 2.2 RT-Smart编译 |
| 51 | +这里我们只需要构建 ARM 大核的 OS,进入 `bsp/cvitek/cv18xx_aarch64` 目录下(记为当前工作目录 `$CWD`),依次执行以下步骤: |
37 | 52 |
|
38 | | -**1.menuconfig配置工程:** |
| 53 | +### 2.3.1. 开发板选择 |
39 | 54 |
|
40 | 55 | ```shell |
41 | | -RT-Thread Kernel ---> |
42 | | - [*] Enable RT-Thread Smart (microkernel on kernel/userland) |
| 56 | +$ scons --menuconfig |
43 | 57 | ``` |
44 | 58 |
|
45 | | -**2.配置工具链相关环境:** |
| 59 | +选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m",目前也仅支持了 "milkv-duo256m"。 |
| 60 | + |
| 61 | +### 2.3.2. 开启 RT-Smart |
46 | 62 |
|
47 | | -依次执行下面命令进行环境变量的相关配置: |
| 63 | +目前 ARM 的大核默认没有开启 RT-Smart,默认配置是 RT 标准版,如果要对大核启用 RT-Smart,可以按如下方式设置。 |
48 | 64 |
|
49 | 65 | ```shell |
50 | | -export RTT_CC=gcc |
51 | | -export RTT_EXEC_PATH="/opt/tools/gnu_gcc/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin" |
52 | | -export RTT_CC_PREFIX=aarch64-linux-musleabi- |
53 | | -export PATH=$PATH:$RTT_EXEC_PATH |
| 66 | +RT-Thread Kernel ---> |
| 67 | + [*] Enable RT-Thread Smart (microkernel on kernel/userland) |
54 | 68 | ``` |
55 | 69 |
|
56 | | -**3.编译:** |
| 70 | +### 2.3.3. 编译 |
57 | 71 |
|
58 | 72 | ```shell |
59 | | -scons -j12 |
| 73 | +$ scons |
60 | 74 | ``` |
61 | 75 |
|
62 | | -如果编译正确无误,会产生 `rtthread.elf`, `rtthread.bin` 文件。 |
| 76 | +如果编译正确无误,在 $CWD 下会产生 `rtthread.elf`, `rtthread.bin` 文件。同时在 `$CWD/../output/milkv-duo256m/` 下生成 `boot.sd` 文件,`boot.sd` 中封装了 RT-Thread 的内核 `rtthread.bin`。 |
63 | 77 |
|
64 | | -## 3. 运行 |
| 78 | +# 3. 运行 |
65 | 79 |
|
66 | | -### 3.1 uboot加载rtthread.bin |
| 80 | +1. 将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 `FAT32`,用于存放 `fip.bin` 和 `boot.sd` 文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统。 |
67 | 81 |
|
68 | | -1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`。 |
| 82 | +2. 将 `$CWD/boot/fip.bin` 和编译生成的 `boot.sd` 复制到 SD 卡第一个分区中。`fip.bin` 是预先做好的小核启动固件,后续只需更新大核的固件,即复制 `boot.sd` 文件即可。 |
69 | 83 |
|
70 | | -2. 将bsp的boot目录下的 `fip.bin` 和编译生成的 `rtthread.bin` 复制 SD 卡第一个分区中。后续更新固件只需要复制 `rtthread.bin` 文件即可。 |
| 84 | +3. 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)。 |
71 | 85 |
|
72 | | -配置**串口0**参数: 115200 8N1 ,硬件和软件流控为关。 |
| 86 | +4. 配置 **串口0** 参数: 115200 8N1 ,硬件和软件流控为关。 |
73 | 87 |
|
74 | | -进入uboot命令行后依次输入以下命令。 |
| 88 | +直接上电运行,uboot 会自动调用 bootcmd 解析 boot.sd 文件,然后加载 `rtthread.bin` 运行。 |
75 | 89 |
|
76 | | -```shell |
77 | | -fatload mmc 0:1 0x80200000 rtthread.bin |
78 | | -dcache flush |
79 | | -go 0x80200000 |
80 | | -``` |
81 | | - |
82 | | -> 0x80200000为rtthread.bin加载到内存的位置,可在menuconfig中自己修改,注意不能与小核固件加载位置重叠。 |
83 | | -
|
84 | | -### 3.2 uboot加载boot.sd |
85 | | - |
86 | | -1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`。 |
87 | | - |
88 | | -2. 将bsp的boot目录下的 `fip.bin` 和编译生成的 `boot.sd` 复制 SD 卡第一个分区中。后续更新固件只需要复制 `boot.sd` 文件即可。 |
| 90 | +## 3.1. RT-Thread 标准版的例子 |
89 | 91 |
|
90 | | -配置**串口0**参数: 115200 8N1 ,硬件和软件流控为关。 |
91 | | - |
92 | | -直接上电运行,uboot会自动调用bootcmd解析boot.sd文件,然后加载`rtthread.bin`运行。 |
| 92 | +```shell |
| 93 | +...... |
93 | 94 |
|
94 | | -### 3.3 如何生成fip.bin |
| 95 | +U-Boot 2021.10-ga57aa1f29b (Apr 20 2024 - 23:53:08 +0800)cvitek_cv181x |
95 | 96 |
|
96 | | -在本bsp的boot/milkv-duo256m目录下存放了所有需要构建出fip.bin的一些依赖文件和相关脚本。用户只需要在boot目录下执行`combine.sh`即可生成fip.bin。 |
| 97 | +...... |
97 | 98 |
|
98 | | -> 如何用户编译了小核c906_little的bsp,那么`combine.sh`脚本将会生成带有小核程序的fip.bin。未编译则不会。 |
| 99 | +Starting kernel ... |
99 | 100 |
|
100 | | -完成后可以看到串口的输出信息: |
| 101 | +[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0 |
| 102 | +[I/rtdm.ofw] Machine model: SOPHGO ASIC. ARM. |
| 103 | +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000080000000 - 0x000000008fe00000 |
| 104 | +[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported |
| 105 | +[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported |
| 106 | +[I/mm.memblock] System memory: |
| 107 | +[I/mm.memblock] [0x0000000080000000, 0x000000008fe00000] |
| 108 | +[I/mm.memblock] Reserved memory: |
| 109 | +[I/mm.memblock] [0x0000000080000000, 0x0000000080080000] |
| 110 | +[I/mm.memblock] [0x0000000080200000, 0x00000000802dd000] |
| 111 | +[I/mm.memblock] [0x00000000802dd000, 0x00000000842dd000] |
| 112 | +[I/mm.memblock] [0x00000000842dd000, 0x00000000844dd000] |
| 113 | +[I/mm.memblock] [0x00000000844dd000, 0x00000000844e2000] |
| 114 | +[I/mm.memblock] physical memory region [0x0000000080080000-0x0000000080200000] installed to system page |
| 115 | +[I/mm.memblock] physical memory region [0x00000000844e2000-0x000000008fe00000] installed to system page |
| 116 | +[I/mm.memblock] 195 MB memory installed to system page |
| 117 | +[I/drv.pinmux] Pin Name = "UART0_RX", Func Type = 281, selected Func [0] |
101 | 118 |
|
102 | | -**标准版log信息:** |
| 119 | +[I/drv.pinmux] Pin Name = "UART0_TX", Func Type = 282, selected Func [0] |
103 | 120 |
|
104 | | -```shell |
105 | | -heap: [0x8028f2b0 - 0x84000000] |
| 121 | +[I/osi.psci] Using PSCI v1.0 Function IDs |
| 122 | +[I/rtdm.ofw] Console: uart0 (<no-node>) |
106 | 123 |
|
107 | 124 | \ | / |
108 | 125 | - RT - Thread Operating System |
109 | | - / | \ 5.1.0 build Apr 16 2024 00:05:56 |
| 126 | + / | \ 5.2.0 build Dec 25 2024 14:16:49 |
110 | 127 | 2006 - 2024 Copyright by RT-Thread team |
| 128 | +[I/rtdm.mnt] File system initialization done |
111 | 129 | hello rt-thread! |
112 | 130 | msh /> |
113 | 131 | ``` |
114 | 132 |
|
115 | | -**Smart版log信息:** |
| 133 | +## 3.2. RT-Thread Smart 版的例子 |
116 | 134 |
|
117 | 135 | ```shell |
118 | | -heap: [0x002f62c0 - 0x04000000] |
| 136 | +U-Boot 2021.10-ga57aa1f29b (Apr 20 2024 - 23:53:08 +0800)cvitek_cv181x |
| 137 | + |
| 138 | +...... |
| 139 | + |
| 140 | +Starting kernel ... |
| 141 | + |
| 142 | +[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0 |
| 143 | +[I/rtdm.ofw] Machine model: SOPHGO ASIC. ARM. |
| 144 | +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000080000000 - 0x000000008fe00000 |
| 145 | +[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported |
| 146 | +[E/rtdm.ofw] Allocating reserved memory in setup is not yet supported |
| 147 | +[I/mm.memblock] System memory: |
| 148 | +[I/mm.memblock] [0x0000000080000000, 0x000000008fe00000] |
| 149 | +[I/mm.memblock] Reserved memory: |
| 150 | +[I/mm.memblock] [0x0000000080000000, 0x0000000080080000] |
| 151 | +[I/mm.memblock] [0x0000000080200000, 0x0000000080346000] |
| 152 | +[I/mm.memblock] [0x0000000080346000, 0x0000000084346000] |
| 153 | +[I/mm.memblock] [0x0000000084346000, 0x0000000084546000] |
| 154 | +[I/mm.memblock] [0x0000000084546000, 0x000000008454b000] |
| 155 | +[I/mm.memblock] physical memory region [0x0000000080080000-0x0000000080200000] installed to system page |
| 156 | +[I/mm.memblock] physical memory region [0x000000008454b000-0x000000008fe00000] installed to system page |
| 157 | +[I/mm.memblock] 195 MB memory installed to system page |
| 158 | +[I/drv.pinmux] Pin Name = "UART0_RX", Func Type = 281, selected Func [0] |
| 159 | + |
| 160 | +[I/drv.pinmux] Pin Name = "UART0_TX", Func Type = 282, selected Func [0] |
| 161 | + |
| 162 | +[I/osi.psci] Using PSCI v1.0 Function IDs |
| 163 | +[I/rtdm.ofw] Console: uart0 (<no-node>) |
119 | 164 |
|
120 | 165 | \ | / |
121 | 166 | - RT - Thread Smart Operating System |
122 | | - / | \ 5.1.0 build Apr 16 2024 00:04:47 |
| 167 | + / | \ 5.2.0 build Dec 25 2024 12:10:56 |
123 | 168 | 2006 - 2024 Copyright by RT-Thread team |
124 | | -[E/lwp] lwp_startup: init program not found |
125 | | -Switching to legacy mode... |
| 169 | +[I/drivers.serial] Using /dev/ttyS0 as default console |
| 170 | +[I/rtdm.mnt] File system initialization done |
126 | 171 | hello rt-thread! |
127 | 172 | msh /> |
128 | 173 | ``` |
129 | | -## 4. 注意事项 |
130 | | - |
131 | | -目前RISC-V(Smart版本)支持外设物理地址映射到完全相同的虚拟地址,而ARM(Smart版本)目前是不支持这样搞的,所以在编写驱动的时候应该使用rt_ioremap这样的函数将物理地址映射到可访问的虚拟地址上去。为了保证ARM的Smart版本内核能够成功运行,目前仅对uart和pinctrl的驱动进行了适配。其他驱动可能会因为未进行ioremap(IO口重映射)导致不可用。 |
132 | 174 |
|
133 | | -## 5. 联系人信息 |
| 175 | +# 4. 联系人信息 |
134 | 176 |
|
135 | 177 | 维护人:[liYony](https://github.com/liYony) |
0 commit comments