rt-thread-official/bsp/cvitek
Z8MAN8 a1b01ee865 bsp: cvitek: fix cv18xx_aarch64 mnt init blocking
The aarch64 core of duo on the master cannot enter the
console interface. It can only print the RT flag and hold it.

Analysis: The latest commit that can work is ae6a328 ("Add
psoc62, 61 config"). This phenomenon will occur after adding
754c59a ("[Feature] DFS mount auto by kernel parameters").
The specific reason is that when aarch bsp enables the device
tree, the current u-boot will pass in bootargs, which contains
"root=/dev/mmcblk0p2 rootwait rw", which means that the
kernel is required to wait until the rootfs in /dev/mmcblk0p2
loaded successfully. However, the current aarch64 bsp default
does not implement sdmmc device mounting, causing the
 kernel file system mounting module (rootfs_mnt_init() of
components/drivers/core/mnt.c) to enter an infinite loop waiting.

Solution: At present, we do not plan to modify the startup
parameters of u-boot. The temporary solution adopted is to
create a pseudo /dev/mmcblk0p2 device during the board
initialization process, and then cancel the pseudo device
after mnt is completed. This allows the kernel boot to be
completed successfully.

Signed-off-by: Shicheng Chu <1468559561@qq.com>
Reviewed-by: Chen Wang <unicorn_wang@outlook.com>
2024-07-25 21:35:48 +08:00
..
c906_little bsp: cvitek: improve documentation 2024-07-22 22:54:56 +08:00
cv18xx_aarch64 bsp: cvitek: fix cv18xx_aarch64 mnt init blocking 2024-07-25 21:35:48 +08:00
cv18xx_risc-v bsp: cvitek: fixed stacksize issue 2024-07-24 23:18:25 +08:00
drivers [feat]添加ioremap兼容定义以适应smart运行 2024-07-24 12:28:50 +08:00
.gitignore support cv181x c906_little (#8680) 2024-03-28 23:35:54 +08:00
README.md bsp: cvitek: improve documentation 2024-07-22 22:54:56 +08:00
board_env.sh [bsp/Cvitek]去除shell脚本中的'\r' (#9097) 2024-06-26 01:21:18 +08:00
combine-fip.sh [bsp/Cvitek]去除shell脚本中的'\r' (#9097) 2024-06-26 01:21:18 +08:00
mkimage support cv181x c906_little (#8680) 2024-03-28 23:35:54 +08:00
mksdimg.sh [bsp/Cvitek]去除shell脚本中的'\r' (#9097) 2024-06-26 01:21:18 +08:00

README.md

参考文档

概述

支持开发板以及集成 SoC 芯片信息如下

Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如下:

  • CV1800B支持一种工作模式
    • 大核RISC-V C906@1GHz+ 小核RISC-V C906@700MHz
  • SG2002原 CV181xC支持两种工作模式通过管脚 GPIO_RTX 的外围电路控制进行切换:
    • 大核RISC-V C906@1GHz+ 小核RISC-V C906@700MHz
    • 大核ARM Cortex-A53@1GHz+ 小核RISC-V C906@700MHz
  • SG2000原 CV181xH支持两种工作模式通过管脚 GPIO_RTX 的外围电路控制进行切换:
    • 大核RISC-V C906@1GHz+ 小核RISC-V C906@700MHz
    • 大核ARM Cortex-A53@1GHz+ 小核RISC-V C906@700MHz

BSP 支持情况

由于大小核的存在,以及不同 SoC 下不同工作模式的存在bsp/cvitek 提供了三种不同 BSP/OS需要单独编译。

BSP 名称 大小核 芯片架构 默认串口控制台 备注
cv18xx_risc-v 大核 RISC-V C906 uart0 支持 MMU支持 RT-Thread 标准版 和 RT-SMART 模式,默认运行 RT-Thread 标准版本
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 支持

编译

Toolchain 下载

注:当前 bsp 只支持 Linux 编译,推荐 ubuntu 22.04

  1. 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

  2. RT-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

正确解压后,在rtconfig.py中将 riscv64-unknown-elf-gccriscv64-unknown-linux-musl-gcc 工具链的本地路径加入 EXEC_PATH 或通过 RTT_EXEC_PATH 环境变量指定路径。

# RT-Thread 标准版按照以下配置:
$ export RTT_CC_PREFIX=riscv64-unknown-elf-
$ export RTT_EXEC_PATH=/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin

# RT-Samrt 版按照以下配置:
$ 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在大/小核对应的目录下,依次执行:

  1. 开发板选择 Linux平台下可以先执行
$ scons --menuconfig

选择当前需要编译的目标开发板类型

Board Type (milkv-duo)  --->
    ( ) milkv-duo
    ( ) milkv-duo-spinor
    (X) milkv-duo256m
    ( ) milkv-duo256m-spinor
  1. 编译
$ scons

编译成功后,会在 bsp/cvitek/output 对应开发板型号目录下自动生成 fip.binboot.sd 文件,其中大核运行文件在 boot.sd 中,小核的运行文件在 fip.bin 中。

  • fip.binfsbl、opensbi、uboot、小核运行文件打包后的 bin 文件
  • boot.sd大核打包后的 bin 文件

运行

  1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 FAT32

  2. 将根目录下的 fip.binboot.sd 复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并复制 boot.sd 文件即可。

  3. 更新完固件文件后, 重新上电可以看到串口的输出信息。

FAQ

  1. 如遇到不能正常编译,请先使用 scons --menuconfig 重新生成配置。

  2. 错误:./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
  1. 如发现切换开发板编译正常,但无法正常打包,请切换至自动下载的 cvi_bootloader 目录,并手工运行 git pull 更新,或删除该目录后重新自动下载。

联系人信息

维护人:flyingcys

更多信息请参考 https://riscv-rtthread-programming-manual.readthedocs.io