|
5 months ago | |
---|---|---|
.. | ||
c906_little | 5 months ago | |
cv18xx_aarch64 | 5 months ago | |
cv18xx_risc-v | 5 months ago | |
drivers | 5 months ago | |
.gitignore | 7 months ago | |
README.md | 5 months ago | |
board_env.sh | 5 months ago | |
combine-fip.sh | 7 months ago | |
mkimage | 1 year ago | |
mksdimg.sh | 5 months ago |
sg2002_trm_cn.pdf
或者 sg2000_trm_cn.pdf
。支持开发板以及集成 SoC 芯片信息如下
Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如下:
由于大小核的存在,以及不同 SoC 下不同工作模式的存在,bsp/cvitek 提供了三种不同 BSP/OS,需要单独编译。
BSP 名称 | 大小核 | 芯片架构 | 默认串口控制台 | 备注 |
---|---|---|---|---|
cv18xx_risc-v | 大核 | RISC-V C906 | uart0 | 支持 MMU,支持 RT-Thread 标准版 和 RT-SMART 模式,默认运行 RT-SMART 版本 |
c906-little | 小核 | RISC-V C906 | uart1 | 无 MMU,运行 RT-Thread 标准版 |
cv18xx_aarch64 | 大核 | ARM Cortex A53 | uart0 | 支持 MMU, 支持 RT-Thread 标准版 和 RT-SMART 版,默认运行 RT-Thread 标准版本 |
由于开发板默认运行的大核为 "cv18xx_risc-v", 所以本文将主要介绍 "cv18xx_risc-v" 和 "c906-little" 的构建和使用。有关 "cv18xx_aarch64" 的介绍请参考 这里。
驱动 | 支持情况 | 备注 |
---|---|---|
uart | 支持 | 默认波特率115200 |
gpio | 支持 | |
i2c | 支持 | |
adc | 支持 | |
spi | 支持 | 默认 CS 引脚,每个数据之间 CS 会拉高,请根据时序选择 GPIO 作为 CS。若读取数据,tx 需持续 dummy 数据。 |
pwm | 支持 | |
timer | 支持 | |
wdt | 支持 | |
sdio | 支持 | |
eth | 支持 |
不同开发板 uart 输出管脚不同,默认配置可能导致串口无法正常显示,请根据开发板 uart 通过 scons --menuconfig
配置对应 uart 的输出管脚。
$ scons --menuconfig
General Drivers Configuration --->
[*] Using UART --->
[*] Enable UART 1
(IIC0_SDA) uart1 rx pin name
(IIC0_SCL) uart1 tx pin name
开发板 | 大核 uart0 默认管脚 | 小核 uart1 默认管脚 |
---|---|---|
Duo | rx: UART0_RX tx: UART0_TX |
rx: IIC0_SDA tx: IIC0_SCL |
Duo 256M | rx: UART0_RX tx: UART0_TX |
rx: IIC0_SDA tx: IIC0_SCL |
Duo S | rx: UART0_RX tx: UART0_TX |
rx: JTAG_CPU_TCK tx: JTAG_CPU_TMS |
如需配置其他管脚可参考对应型号的开发板信息 https://milkv.io/docs/duo/overview。
注:当前 bsp 只支持 Linux 编译,推荐 ubuntu 22.04
用于编译 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
用于编译 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
正确解压后(假设解压到 /opt
下, 也可以自己设定解压后的目录),导出如下环境变量,建议将这些 export 命令写入 ~/.bashrc
。并注意在使用不同工具链时确保导出正确的一组环境变量。
构建 RT-Thread 标准版时按照以下配置:
export RTT_CC="gcc"
export RTT_CC_PREFIX=riscv64-unknown-elf-
export RTT_EXEC_PATH=/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin
构建 RT-Thread Smart 版时按照以下配置:
export RTT_CC="gcc"
export RTT_CC_PREFIX=riscv64-unknown-linux-musl-
export RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin
$ sudo apt install -y scons libncurses5-dev device-tree-compiler
异构芯片需单独编译每个核的 OS,在大/小核对应的目录下,依次执行:
$ scons --menuconfig
选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m"。
Board Type (milkv-duo) --->
( ) milkv-duo
(X) milkv-duo256m
( ) milkv-duos
目前大核默认启用 RT-Smart,小核不支持 RT-Smart。
如果要对大核启用 RT-Smart,可以按如下方式设置。
RT-Thread Kernel --->
[*] Enable RT-Thread Smart (microkernel on kernel/userland)
注意检查内核虚拟起始地址的配置,确保为 0xFFFFFFC000200000
。
RT-Thread Kernel --->
(0xFFFFFFC000200000) The virtural address of kernel start
RT-Thread Components --->
$ scons
编译成功后,会在 bsp/cvitek/output
对应开发板型号目录下自动生成 fip.bin
和 boot.sd
文件。
fip.bin
:这是一个打包后生成的 bin 文件,包含了 fsbl
、opensbi
、uboot
以及小核的内核镜像文件 rtthread.bin
。boot.sd
:这也是一个打包后生成的 bin 文件,包含了大核的内核镜像文件 rtthread.bin
。将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 FAT32
,用于存放 fip.bin
和 boot.sd
文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统。
将根目录下的 fip.bin
和 boot.sd
复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并替换 SD 卡第一个分区中的 boot.sd
文件即可。
更新完固件文件后, 重新上电可以看到串口的输出信息。
大核启用 RT-Smart 后可以在启动阶段挂载根文件系统。目前 Duo 支持 ext4, fat 文件格式,具体操作说明如下:
首先确保开启 RT-Smart,参考 4.3.2. 可按照以下方式开启 RT-Smart。
在开启 RT-Smart 基础上确保如下配置修改。
BSP_USING_SDH
: Enable Secure Digital Host Controller, 因为使用 sd-card 存放文件系统。BSP_USING_RTC
: Enable RTC, 避免挂载文件系统后执行命令报错:[W/time] Cannot find a RTC device!
BSP_ROOTFS_TYPE_DISKFS
: Disk FileSystems, e.g. ext4, fat ..., 该配置默认已打开。PKG_USING_LWEXT4
(具体 menuconfig 路径是 (Top) -> RT-Thread online packages -> system packages -> lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers.)。如果在菜单中找不到该软件包,可以退出 menuconfig 并执行 pkgs --upgrade
更新软件包索引后再尝试使能软件包。勾选该选项后还需要执行如下操作更新软件并安装源码到 bsp 的 packages 目录下:
source ~/.env/env.sh
pkgs --update
保存后重新编译内核。
这里用 RT-Thread 官方的 userapps 工具制作文件系统。
userapps 仓库地址: https://github.com/RT-Thread/userapps。具体操作参考 《介绍与快速入门》。
制作根文件系统步骤如下,供参考:
cd $WS
git clone https://github.com/RT-Thread/userapps.git
cd $WS/userapps
source ./env.sh
cd apps
xmake f -a riscv64gc
xmake -j$(nproc)
xmake smart-rootfs
xmake smart-image -f fat
在 $WS/userapps/apps/build
路径下生成根文件系统镜像文件 fat.img
。
如果是制作 ext4 格式的文件系统 image,则最后一步换成:
xmake smart-image -f ext4
生成根文件系统镜像文件 ext4.img
。
将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 FAT32
,用于存放 fip.bin
和 boot.sd
文件,第 2 个分区用于存放文件系统,分区格式需要和具体文件系统的格式一致。这里以 fat 为例介绍如何制作 sd-card 上的文件系统分区,ext4 的操作类似。
将 SD 卡插入 PC 主机系统,假设为 Ubuntu,识别为 /dev/sdb
,则第二个分区为 /dev/sdb2
。将第二个分区挂载,假设挂载到 ~/ws/u-disk
。
将上一步生成的 fat.img
文件也挂载到一个临时目录,假设是 /tmp
。
最后将 /tmp 下的文件全部拷贝到 ~/ws/u-disk
中,即完成对 SD 卡中文件系统分区的烧写。
最后不要忘记卸载 SD 卡的分区。
简单步骤示例如下,供参考:
sudo mount -o loop fat.img /tmp
sudo mount /dev/sdb2 ~/ws/u-disk
sudo cp -a /tmp/* ~/ws/u-disk
sudo umount ~/ws/u-disk
sudo umount /tmp
启动完成后, 会看到 [I/app.filesystem] device 'sd1' is mounted to '/' as FAT
的输出,说明文件系统挂载成功。此时 msh
被替换为 /bin/ash
。
\ | /
- RT - Thread Smart Operating System
/ | \ 5.2.0 build Nov 26 2024 09:55:38
2006 - 2024 Copyright by RT-Thread team
lwIP-2.1.2 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/drivers.serial] Using /dev/ttyS0 as default console
[I/SDIO] SD card capacity 30216192 KB.
[I/SDIO] sd: switch to High Speed / SDR25 mode
found part[0], begin: 1048576, size: 128.0MB
found part[1], begin: 135266304, size: 28.707GB
[I/app.filesystem] device 'sd1' is mounted to '/' as FAT
Hello RT-Smart!
msh />[E/sal.skt] not find network interface device by protocol family(1).
[E/sal.skt] SAL socket protocol family input failed, return error -3.
/ # ls
bin etc mnt root sbin tc usr
dev lib proc run services tmp var
启动完成后, 会看到 [I/app.filesystem] device 'sd1' is mounted to '/' as EXT
的输出,说明文件系统挂载成功。此时 msh
被替换为 /bin/ash
。如果 ls /bin -l
,会看到大部分命令程序都是指向 busybox 的符号链接,符号链接是 EXT4 区别于 FAT 的重要特征。
\ | /
- RT - Thread Smart Operating System
/ | \ 5.2.0 build Dec 17 2024 14:04:27
2006 - 2024 Copyright by RT-Thread team
lwIP-2.1.2 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/drivers.serial] Using /dev/ttyS0 as default console
[I/SDIO] SD card capacity 30216192 KB.
[I/SDIO] sd: switch to High Speed / SDR25 mode
found part[0], begin: 1048576, size: 128.0MB
found part[1], begin: 135266304, size: 28.707GB
[I/app.filesystem] device 'sd1' is mounted to '/' as EXT
Hello RT-Smart!
msh />[E/sal.skt] not find network interface device by protocol family(1).
[E/sal.skt] SAL socket protocol family input failed, return error -3.
/ # ls
bin lib proc sbin tmp
dev lost+found root services usr
etc mnt run tc var
/ # ls /bin -l
lrwxrwxrwx 0 0 0 7 Dec 17 2024 arch -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 ash -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 base32 -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 base64 -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 bash -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 bbconfig -> busybox
-rwxr-xr-x 0 0 0 1003000 Dec 17 2024 busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 cat -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 chattr -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 chgrp -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 chmod -> busybox
lrwxrwxrwx 0 0 0 7 Dec 17 2024 chown -> busybox
......
如遇到不能正常编译,请先使用 scons --menuconfig
重新生成配置。
错误:./mkimage: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
可在 http://security.ubuntu.com/ubuntu/pool/main/o/openssl 下载 libssl1.1_1.1.1f-1ubuntu2_amd64.deb
文件后安装即可解决。
或使用以下命令下载安装:
$ wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
$ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
cvi_bootloader
目录,并手工运行 git pull
更新,或删除该目录后重新自动下载。维护人:flyingcys
更多信息请参考 https://riscv-rtthread-programming-manual.readthedocs.io