Skip to content

Commit 2061490

Browse files
committed
bsp: cvitek: update README for cv18xx_aarch64
Re-write README.md for aarch64. Signed-off-by: Chen Wang <[email protected]>
1 parent 16915de commit 2061490

File tree

1 file changed

+113
-71
lines changed

1 file changed

+113
-71
lines changed
Lines changed: 113 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,135 +1,177 @@
1-
# Milkv-Duo256M 板级支持包说明
1+
<!-- TOC -->
22

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-联系人信息)
416

5-
Milk-V Duo 256M 是 Duo 的升级版本,内存提升至 256M,满足需要更大内存容量的应用。采用 SG2002 计算系列芯片,计算能力提升至 1.0TOPS@INT8。它可以实现 RISC-V/ARM 架构之间的无缝切换,并支持双系统同时运行。此外,它还包含 SPI、UART 等一系列丰富的 GPIO 接口,适合边缘智能监控领域的各种硬件开发,包括 IP 摄像头、智能猫眼锁、可视门铃等。
17+
<!-- /TOC -->
618

7-
该板级支持包主要是针对**ARM架构的大核**实现的一份移植,支持RT-Thread标准版和Smart版内核。
19+
# 1. 概述
820

9-
## 2. 编译说明
21+
本文档用于介绍 BSP "cv18xx_aarch64",该 BSP 目前仅支持 Milk-V Duo 256M 的 ARM Cortex A53 大核。支持 RT-Thread 标准版和 RT-Thread Smart 版内核。
1022

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. 驱动支持列表
1224

13-
### 2.1 RT-Thread编译
25+
| 驱动 | 支持情况 | 备注 |
26+
| :---- | :------- | :---------------- |
27+
| uart | 支持 | 默认波特率115200 |
1428

15-
**1.menuconfig配置工程:**
29+
# 2. 构建说明
1630

17-
该BSP默认menuconfig支持的就是RT-Thread标准版,无需配置工程。
31+
**注:当前 bsp 只支持 Linux 环境下编译,推荐 ubuntu 22.04**
1832

19-
**2.配置工具链相关环境:**
33+
## 2.1. Toolchain 下载
2034

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`
2238

2339
```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
2843
```
2944

30-
**3.编译:**
45+
## 2.2. 依赖安装
3146

32-
```shell
33-
scons -j12
34-
```
47+
参考 [bsp cvitek 的 README.md 文件](../README.md)
48+
49+
## 2.3. 执行构建
3550

36-
### 2.2 RT-Smart编译
51+
这里我们只需要构建 ARM 大核的 OS,进入 `bsp/cvitek/cv18xx_aarch64` 目录下(记为当前工作目录 `$CWD`),依次执行以下步骤:
3752

38-
**1.menuconfig配置工程:**
53+
### 2.3.1. 开发板选择
3954

4055
```shell
41-
RT-Thread Kernel --->
42-
[*] Enable RT-Thread Smart (microkernel on kernel/userland)
56+
$ scons --menuconfig
4357
```
4458

45-
**2.配置工具链相关环境:**
59+
选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m",目前也仅支持了 "milkv-duo256m"。
60+
61+
### 2.3.2. 开启 RT-Smart
4662

47-
依次执行下面命令进行环境变量的相关配置:
63+
目前 ARM 的大核默认没有开启 RT-Smart,默认配置是 RT 标准版,如果要对大核启用 RT-Smart,可以按如下方式设置。
4864

4965
```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)
5468
```
5569

56-
**3.编译:**
70+
### 2.3.3. 编译
5771

5872
```shell
59-
scons -j12
73+
$ scons
6074
```
6175

62-
如果编译正确无误,会产生 `rtthread.elf`, `rtthread.bin` 文件。
76+
如果编译正确无误,在 $CWD 下会产生 `rtthread.elf`, `rtthread.bin` 文件。同时在 `$CWD/../output/milkv-duo256m/` 下生成 `boot.sd` 文件,`boot.sd` 中封装了 RT-Thread 的内核 `rtthread.bin`
6377

64-
## 3. 运行
78+
# 3. 运行
6579

66-
### 3.1 uboot加载rtthread.bin
80+
1. 将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 `FAT32`,用于存放 `fip.bin``boot.sd` 文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统。
6781

68-
1.SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`
82+
2.`$CWD/boot/fip.bin` 和编译生成的 `boot.sd` 复制到 SD 卡第一个分区中。`fip.bin` 是预先做好的小核启动固件,后续只需更新大核的固件,即复制 `boot.sd` 文件即可
6983

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)
7185

72-
配置**串口0**参数: 115200 8N1 ,硬件和软件流控为关。
86+
4. 配置 **串口0** 参数: 115200 8N1 ,硬件和软件流控为关。
7387

74-
进入uboot命令行后依次输入以下命令
88+
直接上电运行,uboot 会自动调用 bootcmd 解析 boot.sd 文件,然后加载 `rtthread.bin` 运行
7589

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 标准版的例子
8991

90-
配置**串口0**参数: 115200 8N1 ,硬件和软件流控为关。
91-
92-
直接上电运行,uboot会自动调用bootcmd解析boot.sd文件,然后加载`rtthread.bin`运行。
92+
```shell
93+
......
9394

94-
### 3.3 如何生成fip.bin
95+
U-Boot 2021.10-ga57aa1f29b (Apr 20 2024 - 23:53:08 +0800)cvitek_cv181x
9596

96-
在本bsp的boot/milkv-duo256m目录下存放了所有需要构建出fip.bin的一些依赖文件和相关脚本。用户只需要在boot目录下执行`combine.sh`即可生成fip.bin。
97+
......
9798

98-
> 如何用户编译了小核c906_little的bsp,那么`combine.sh`脚本将会生成带有小核程序的fip.bin。未编译则不会。
99+
Starting kernel ...
99100

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]
101118

102-
**标准版log信息:**
119+
[I/drv.pinmux] Pin Name = "UART0_TX", Func Type = 282, selected Func [0]
103120

104-
```shell
105-
heap: [0x8028f2b0 - 0x84000000]
121+
[I/osi.psci] Using PSCI v1.0 Function IDs
122+
[I/rtdm.ofw] Console: uart0 (<no-node>)
106123

107124
\ | /
108125
- 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
110127
2006 - 2024 Copyright by RT-Thread team
128+
[I/rtdm.mnt] File system initialization done
111129
hello rt-thread!
112130
msh />
113131
```
114132

115-
**Smart版log信息:**
133+
## 3.2. RT-Thread Smart 版的例子
116134

117135
```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>)
119164

120165
\ | /
121166
- 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
123168
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
126171
hello rt-thread!
127172
msh />
128173
```
129-
## 4. 注意事项
130-
131-
目前RISC-V(Smart版本)支持外设物理地址映射到完全相同的虚拟地址,而ARM(Smart版本)目前是不支持这样搞的,所以在编写驱动的时候应该使用rt_ioremap这样的函数将物理地址映射到可访问的虚拟地址上去。为了保证ARM的Smart版本内核能够成功运行,目前仅对uart和pinctrl的驱动进行了适配。其他驱动可能会因为未进行ioremap(IO口重映射)导致不可用。
132174

133-
## 5. 联系人信息
175+
# 4. 联系人信息
134176

135177
维护人:[liYony](https://github.com/liYony)

0 commit comments

Comments
 (0)