diff --git a/bsp/cvitek/README.md b/bsp/cvitek/README.md index 80a23f1ede3..8a7dffc1a9e 100755 --- a/bsp/cvitek/README.md +++ b/bsp/cvitek/README.md @@ -1,25 +1,33 @@ -- [参考文档](#参考文档) -- [概述](#概述) -- [BSP 支持情况](#bsp-支持情况) - - [驱动支持列表](#驱动支持列表) -- [编译](#编译) - - [Toolchain 下载](#toolchain-下载) - - [依赖安装](#依赖安装) - - [构建](#构建) -- [运行](#运行) -- [FAQ](#faq) -- [联系人信息](#联系人信息) +- [1. 参考文档](#1-参考文档) +- [2. 概述](#2-概述) +- [3. BSP 支持情况](#3-bsp-支持情况) + - [3.1. 驱动支持列表](#31-驱动支持列表) +- [4. 编译](#4-编译) + - [4.1. Toolchain 下载](#41-toolchain-下载) + - [4.2. 依赖安装](#42-依赖安装) + - [4.3. 构建](#43-构建) + - [4.3.1. 开发板选择](#431-开发板选择) + - [4.3.2. 开启 RT-Smart](#432-开启-rt-smart) + - [4.3.3. 编译](#433-编译) +- [5. 运行](#5-运行) +- [6. 大核 RT-Smart 启动并自动挂载根文件系统](#6-大核-rt-smart-启动并自动挂载根文件系统) + - [6.1. 内核构建配置](#61-内核构建配置) + - [6.2. 构建文件系统](#62-构建文件系统) + - [6.3. 将文件系统写入 sd-card](#63-将文件系统写入-sd-card) + - [6.4. 上电启动](#64-上电启动) +- [7. FAQ](#7-faq) +- [8. 联系人信息](#8-联系人信息) -# 参考文档 +# 1. 参考文档 - 【参考 1】CV1800B/CV1801B Datasheet(中文版): - 【参考 2】SG2002/SG2000 技术参考手册(中文版):。官方定期发布 pdf 形式。可以下载下载最新版本的中文版本技术参考手册:`sg2002_trm_cn.pdf` 或者 `sg2000_trm_cn.pdf`。 -# 概述 +# 2. 概述 支持开发板以及集成 SoC 芯片信息如下 @@ -38,7 +46,7 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如 - 大核(RISC-V C906@1GHz)+ 小核(RISC-V C906@700MHz)。 - 大核(ARM Cortex-A53@1GHz)+ 小核(RISC-V C906@700MHz)。 -# BSP 支持情况 +# 3. BSP 支持情况 由于大小核的存在,以及不同 SoC 下不同工作模式的存在,bsp/cvitek 提供了三种不同 BSP/OS,需要单独编译。 @@ -52,7 +60,7 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如 > 注:不同开发板 uart 输出管脚不同,默认配置可能导致串口无法正常显示,请根据开发板 uart 通过 `scons --menuconfig` 配置对应 uart 的输出管脚。 -## 驱动支持列表 +## 3.1. 驱动支持列表 | 驱动 | 支持情况 | 备注 | | :---- | :------- | :---------------- | @@ -67,45 +75,54 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如 | sdio | 支持 | | | eth | 支持 | | -# 编译 +# 4. 编译 -## Toolchain 下载 +## 4.1. 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](https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz) +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](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](https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2) +2. 用于编译 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](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-gcc` 或 `riscv64-unknown-linux-musl-gcc` 工具链的本地路径加入 `EXEC_PATH` 或通过 `RTT_EXEC_PATH` 环境变量指定路径。 +正确解压后,导出如下环境变量,建议将这些 export 命令写入 `~/.bashrc`。**并注意在使用不同工具链时确保导出正确的一组环境变量**。 + +构建 RT-Thread 标准版时按照以下配置: ```shell -# 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 +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 版时按照以下配置: -# 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 +```shell +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 ``` -## 依赖安装 +## 4.2. 依赖安装 ```shell $ sudo apt install -y scons libncurses5-dev device-tree-compiler ``` -## 构建 +## 4.3. 构建 异构芯片需单独编译每个核的 OS,在大/小核对应的目录下,依次执行: -1. 开发板选择 -Linux平台下,可以先执行: +### 4.3.1. 开发板选择 + + Linux平台下,可以先执行: + ```shell $ scons --menuconfig ``` -选择当前需要编译的目标开发板类型 +选择当前需要编译的目标开发板类型,默认是 "milkv-duo256m"。 + ```shell Board Type (milkv-duo) ---> ( ) milkv-duo @@ -115,39 +132,131 @@ Board Type (milkv-duo) ---> ( ) milkv-duos ``` -2. 可按照以下方式开启 RT-Smart +### 4.3.2. 开启 RT-Smart + +目前大核默认启用 RT-Smart,小核不支持 RT-Smart。 + +如果要对大核启用 RT-Smart,可以按如下方式设置。 ```shell RT-Thread Kernel ---> [*] Enable RT-Thread Smart (microkernel on kernel/userland) ``` -并配置内核虚拟起始地址 `0xFFFFFFC000200000` +**注意检查内核虚拟起始地址的配置,确保为 `0xFFFFFFC000200000`。** + ```shell RT-Thread Kernel ---> (0xFFFFFFC000200000) The virtural address of kernel start RT-Thread Components ---> ``` -3. 编译 +### 4.3.3. 编译 + ```shell $ scons ``` -编译成功后,会在 `bsp/cvitek/output` 对应开发板型号目录下自动生成 `fip.bin` 和 `boot.sd` 文件,其中大核运行文件在 `boot.sd` 中,小核的运行文件在 `fip.bin` 中。 +编译成功后,会在 `bsp/cvitek/output` 对应开发板型号目录下自动生成 `fip.bin` 和 `boot.sd` 文件。 -- fip.bin:fsbl、opensbi、uboot、小核运行文件打包后的 bin 文件 -- boot.sd:大核打包后的 bin 文件 +- `fip.bin`:这是一个打包后生成的 bin 文件,包含了 `fsbl`、`opensbi`、`uboot` 以及小核的内核镜像文件 `rtthread.bin`。 +- `boot.sd`:这也是一个打包后生成的 bin 文件,包含了大核的内核镜像文件 `rtthread.bin`。 -# 运行 +# 5. 运行 -1. 将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 `FAT32`。 +1. 将 SD 卡分为 2 个分区,第 1 个分区的分区格式为 `FAT32`,用于存放 `fip.bin` 和 `boot.sd` 文件,第 2 个分区可选,如果有可用于作为数据存储分区或者存放文件系统。 -2. 将根目录下的 `fip.bin` 和 `boot.sd` 复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并复制 `boot.sd` 文件即可。 +2. 将根目录下的 `fip.bin` 和 `boot.sd` 复制到 SD 卡第一个分区中。两个固件文件可以独立修改更新,譬如后续只需要更新大核,只需要重新编译 "cv18xx_risc-v" 并替换 SD 卡第一个分区中的 `boot.sd` 文件即可。 3. 更新完固件文件后, 重新上电可以看到串口的输出信息。 -# FAQ +# 6. 大核 RT-Smart 启动并自动挂载根文件系统 + +大核启用 RT-Smart 后可以在启动阶段挂载根文件系统。目前 Duo 支持 ext4,fat 文件格式,下面以 fat 格式为例,具体操作说明如下: + +## 6.1. 内核构建配置 + +首先确保开启 RT-Smart,参考 [4.3.2. 可按照以下方式开启 RT-Smart](#432-可按照以下方式开启-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 ..., 该配置默认已打开。 + +保存后重新编译内核。 + +## 6.2. 构建文件系统 + +这里用 RT-Thread 官方的 userapps 工具制作文件系统。 + +userapps 仓库地址: 。具体操作参考 [《介绍与快速入门》](https://github.com/RT-Thread/userapps/blob/main/README.md)。 + +制作根文件系统步骤如下,供参考: + +```shell +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`。 + +## 6.3. 将文件系统写入 sd-card + +将 SD 卡分为 2 个分区,第 1 个分区用于存放 `fip.bin` 和 `boot.sd` 文件,第 2 个分区用于存放文件系统,分区格式为 `FAT32`。 + +将 SD 卡插入 PC 主机系统,假设为 Ubuntu,识别为 `/dev/sdb`,则第二个分区为 `/dev/sdb2`。将第二个分区挂载,假设挂载到 `~/ws/u-disk`。 + +将上一步生成的 `fat.img` 文件也挂载到一个临时目录,假设是 `/tmp`。 + +最后将 /tmp 下的文件全部拷贝到 `~/ws/u-disk` 中,即完成对 SD 卡中文件系统分区的烧写。 + +最后不要忘记卸载 SD 卡的分区。 + +简单步骤示例如下,供参考: + +```shell +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 +``` + +## 6.4. 上电启动 + +启动完成后, 会看到 `[I/app.filesystem] device 'sd1' is mounted to '/' as FAT` 的输出,说明文件系统挂载成功。此时 `msh` 被替换为 `/bin/ash`。 + +```shell + \ | / +- 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 +``` + +# 7. FAQ 1. 如遇到不能正常编译,请先使用 `scons --menuconfig` 重新生成配置。 @@ -162,7 +271,7 @@ $ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb 3. 如发现切换开发板编译正常,但无法正常打包,请切换至自动下载的 `cvi_bootloader` 目录,并手工运行 `git pull` 更新,或删除该目录后重新自动下载。 -# 联系人信息 +# 8. 联系人信息 维护人:[flyingcys](https://github.com/flyingcys) diff --git a/bsp/cvitek/cv18xx_risc-v/.config b/bsp/cvitek/cv18xx_risc-v/.config index 290b22b466a..5726c5a1aac 100644 --- a/bsp/cvitek/cv18xx_risc-v/.config +++ b/bsp/cvitek/cv18xx_risc-v/.config @@ -2,10 +2,114 @@ # # RT-Thread Kernel # + +# +# klibc options +# + +# +# ------------rt_memset options------------ +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set + +# +# ------------rt_memcpy options------------ +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set + +# +# ------------rt_memmove options------------ +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set + +# +# ------------rt_memcmp options------------ +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set + +# +# ------------rt_strstr options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set + +# +# ------------rt_strcasecmp options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set + +# +# ------------rt_strncpy options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set + +# +# ------------rt_strcpy options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set + +# +# ------------rt_strncmp options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set + +# +# ------------rt_strcmp options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set + +# +# ------------rt_strlen options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set + +# +# ------------rt_strlen options------------ +# + +# +# ------------rt_strnlen options------------ +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set + +# +# ------------rt_vsscanf options------------ +# +# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set + +# +# ------------rt_vsnprintf options------------ +# +# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set +CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG=y +CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD=y +CONFIG_RT_KLIBC_USING_VSNPRINTF_DECIMAL_SPECIFIERS=y +CONFIG_RT_KLIBC_USING_VSNPRINTF_EXPONENTIAL_SPECIFIERS=y +CONFIG_RT_KLIBC_USING_VSNPRINTF_WRITEBACK_SPECIFIER=y +CONFIG_RT_KLIBC_USING_VSNPRINTF_CHECK_NUL_IN_FORMAT_SPECIFIER=y +# CONFIG_RT_KLIBC_USING_VSNPRINTF_MSVC_STYLE_INTEGER_SPECIFIERS is not set +CONFIG_RT_KLIBC_USING_VSNPRINTF_INTEGER_BUFFER_SIZE=32 +CONFIG_RT_KLIBC_USING_VSNPRINTF_DECIMAL_BUFFER_SIZE=32 +CONFIG_RT_KLIBC_USING_VSNPRINTF_FLOAT_PRECISION=6 +CONFIG_RT_KLIBC_USING_VSNPRINTF_MAX_INTEGRAL_DIGITS_FOR_DECIMAL=9 +CONFIG_RT_KLIBC_USING_VSNPRINTF_LOG10_TAYLOR_TERMS=4 +# end of klibc options + CONFIG_RT_NAME_MAX=8 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set -CONFIG_RT_USING_SMART=y # CONFIG_RT_USING_NANO is not set +CONFIG_RT_USING_SMART=y # CONFIG_RT_USING_AMP is not set # CONFIG_RT_USING_SMP is not set CONFIG_RT_CPUS_NR=1 @@ -15,6 +119,7 @@ CONFIG_RT_THREAD_PRIORITY_32=y # CONFIG_RT_THREAD_PRIORITY_256 is not set CONFIG_RT_THREAD_PRIORITY_MAX=32 CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y # CONFIG_RT_USING_HOOKLIST is not set @@ -28,18 +133,10 @@ CONFIG_RT_TIMER_THREAD_STACK_SIZE=16384 CONFIG_RT_USING_CPU_USAGE_TRACER=y # -# kservice optimization +# kservice options # # CONFIG_RT_USING_TINY_FFS is not set -# end of kservice optimization - -# -# klibc optimization -# -# CONFIG_RT_KLIBC_USING_STDLIB is not set -# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set -CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG=y -# end of klibc optimization +# end of kservice options CONFIG_RT_USING_DEBUG=y CONFIG_RT_DEBUGING_ASSERT=y @@ -47,7 +144,6 @@ CONFIG_RT_DEBUGING_COLOR=y CONFIG_RT_DEBUGING_CONTEXT=y # CONFIG_RT_DEBUGING_AUTO_INIT is not set # CONFIG_RT_DEBUGING_PAGE_LEAK is not set -CONFIG_RT_USING_OVERFLOW_CHECK=y # # Inter-Thread communication @@ -206,6 +302,7 @@ CONFIG_RT_USING_CPUTIME_RISCV=y CONFIG_CPUTIME_TIMER_FREQ=25000000 # CONFIG_RT_USING_I2C is not set # CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_PHY_V2 is not set # CONFIG_RT_USING_ADC is not set # CONFIG_RT_USING_DAC is not set CONFIG_RT_USING_NULL=y @@ -235,6 +332,15 @@ CONFIG_RT_USING_WDT=y # CONFIG_RT_USING_LCD is not set # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_WIFI is not set +CONFIG_RT_USING_BLK=y + +# +# Partition Types +# +CONFIG_RT_BLK_PARTITION_DFS=y +CONFIG_RT_BLK_PARTITION_EFI=y +# end of Partition Types + # CONFIG_RT_USING_VIRTIO is not set CONFIG_RT_USING_PIN=y CONFIG_RT_USING_KTIME=y @@ -601,7 +707,6 @@ CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64 # CONFIG_PKG_USING_JSMN is not set # CONFIG_PKG_USING_AGILE_JSMN is not set # CONFIG_PKG_USING_PARSON is not set -# CONFIG_PKG_USING_RYAN_JSON is not set # end of JSON: JavaScript Object Notation, a lightweight data-interchange format # @@ -812,8 +917,6 @@ CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64 # # STM32 HAL & SDK Drivers # -# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set -# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set # CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set # CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set # CONFIG_PKG_USING_STM32WB55_SDK is not set @@ -1008,7 +1111,6 @@ CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64 # CONFIG_PKG_USING_SYSTEM_RUN_LED is not set # CONFIG_PKG_USING_BT_MX01 is not set # CONFIG_PKG_USING_RGPOWER is not set -# CONFIG_PKG_USING_BT_MX02 is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # end of peripheral libraries and drivers @@ -1124,7 +1226,6 @@ CONFIG_PKG_ZLIB_VER="latest" # CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set # CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1385,5 +1486,5 @@ CONFIG_SOC_TYPE_SG2002=y CONFIG_BOARD_TYPE_MILKV_DUO256M=y # CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINOR is not set # CONFIG_BOARD_TYPE_MILKV_DUOS is not set -CONFIG_BSP_ROOTFS_TYPE_ROMFS=y +CONFIG_BSP_ROOTFS_TYPE_DISKFS=y # CONFIG_BSP_ROOTFS_TYPE_CROMFS is not set diff --git a/bsp/cvitek/cv18xx_risc-v/Kconfig b/bsp/cvitek/cv18xx_risc-v/Kconfig index ba6b0889d23..bb4a2c9b782 100755 --- a/bsp/cvitek/cv18xx_risc-v/Kconfig +++ b/bsp/cvitek/cv18xx_risc-v/Kconfig @@ -84,10 +84,10 @@ endchoice choice BSP_ROOTFS_TYPE prompt "rootfs type" - default BSP_ROOTFS_TYPE_ROMFS + default BSP_ROOTFS_TYPE_DISKFS - config BSP_ROOTFS_TYPE_ROMFS - bool "ROMFS" + config BSP_ROOTFS_TYPE_DISKFS + bool "Disk FileSystems, e.g. ext4, fat ..." select RT_USING_DFS_ROMFS config BSP_ROOTFS_TYPE_CROMFS diff --git a/bsp/cvitek/cv18xx_risc-v/rtconfig.h b/bsp/cvitek/cv18xx_risc-v/rtconfig.h index ef152eb30c3..eb2571320c3 100755 --- a/bsp/cvitek/cv18xx_risc-v/rtconfig.h +++ b/bsp/cvitek/cv18xx_risc-v/rtconfig.h @@ -3,6 +3,63 @@ /* RT-Thread Kernel */ +/* klibc options */ + +/* ------------rt_memset options------------ */ + + +/* ------------rt_memcpy options------------ */ + + +/* ------------rt_memmove options------------ */ + + +/* ------------rt_memcmp options------------ */ + + +/* ------------rt_strstr options------------ */ + + +/* ------------rt_strcasecmp options------------ */ + + +/* ------------rt_strncpy options------------ */ + + +/* ------------rt_strcpy options------------ */ + + +/* ------------rt_strncmp options------------ */ + + +/* ------------rt_strcmp options------------ */ + + +/* ------------rt_strlen options------------ */ + + +/* ------------rt_strlen options------------ */ + +/* ------------rt_strnlen options------------ */ + + +/* ------------rt_vsscanf options------------ */ + + +/* ------------rt_vsnprintf options------------ */ + +#define RT_KLIBC_USING_VSNPRINTF_LONGLONG +#define RT_KLIBC_USING_VSNPRINTF_STANDARD +#define RT_KLIBC_USING_VSNPRINTF_DECIMAL_SPECIFIERS +#define RT_KLIBC_USING_VSNPRINTF_EXPONENTIAL_SPECIFIERS +#define RT_KLIBC_USING_VSNPRINTF_WRITEBACK_SPECIFIER +#define RT_KLIBC_USING_VSNPRINTF_CHECK_NUL_IN_FORMAT_SPECIFIER +#define RT_KLIBC_USING_VSNPRINTF_INTEGER_BUFFER_SIZE 32 +#define RT_KLIBC_USING_VSNPRINTF_DECIMAL_BUFFER_SIZE 32 +#define RT_KLIBC_USING_VSNPRINTF_FLOAT_PRECISION 6 +#define RT_KLIBC_USING_VSNPRINTF_MAX_INTEGRAL_DIGITS_FOR_DECIMAL 9 +#define RT_KLIBC_USING_VSNPRINTF_LOG10_TAYLOR_TERMS 4 +/* end of klibc options */ #define RT_NAME_MAX 8 #define RT_USING_SMART #define RT_CPUS_NR 1 @@ -10,6 +67,7 @@ #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 #define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK #define RT_USING_HOOK #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK @@ -20,19 +78,13 @@ #define RT_TIMER_THREAD_STACK_SIZE 16384 #define RT_USING_CPU_USAGE_TRACER -/* kservice optimization */ - -/* end of kservice optimization */ - -/* klibc optimization */ +/* kservice options */ -#define RT_KLIBC_USING_VSNPRINTF_LONGLONG -/* end of klibc optimization */ +/* end of kservice options */ #define RT_USING_DEBUG #define RT_DEBUGING_ASSERT #define RT_DEBUGING_COLOR #define RT_DEBUGING_CONTEXT -#define RT_USING_OVERFLOW_CHECK /* Inter-Thread communication */ @@ -157,6 +209,13 @@ #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_WDT +#define RT_USING_BLK + +/* Partition Types */ + +#define RT_BLK_PARTITION_DFS +#define RT_BLK_PARTITION_EFI +/* end of Partition Types */ #define RT_USING_PIN #define RT_USING_KTIME #define RT_USING_HWTIMER @@ -495,6 +554,6 @@ #define __STACKSIZE__ 8192 #define SOC_TYPE_SG2002 #define BOARD_TYPE_MILKV_DUO256M -#define BSP_ROOTFS_TYPE_ROMFS +#define BSP_ROOTFS_TYPE_DISKFS #endif diff --git a/bsp/cvitek/drivers/SConscript b/bsp/cvitek/drivers/SConscript index e6333eaddec..27aa3949202 100755 --- a/bsp/cvitek/drivers/SConscript +++ b/bsp/cvitek/drivers/SConscript @@ -40,8 +40,8 @@ if GetDepend('BSP_USING_PWM'): if GetDepend('BSP_ROOTFS_TYPE_CROMFS'): src += ['port/mnt_cromfs.c'] -elif GetDepend('BSP_ROOTFS_TYPE_ROMFS'): - src += ['port/mnt_romfs.c'] +elif GetDepend('BSP_ROOTFS_TYPE_DISKFS'): + src += ['port/mnt_diskfs.c'] if GetDepend('BSP_USING_SDH'): src += ['drv_sdhci.c'] diff --git a/bsp/cvitek/drivers/drv_rtc.c b/bsp/cvitek/drivers/drv_rtc.c index 93f2b070821..65927ab4bb5 100644 --- a/bsp/cvitek/drivers/drv_rtc.c +++ b/bsp/cvitek/drivers/drv_rtc.c @@ -317,7 +317,6 @@ static void rt_hw_rtc_isr(int irqno, void *param) rt_interrupt_leave(); } -#endif static rt_err_t _rtc_get_alarm(struct rt_rtc_wkalarm *alarm) { @@ -367,6 +366,7 @@ static rt_err_t _rtc_set_alarm(struct rt_rtc_wkalarm *alarm) return RT_EOK; } +#endif static const struct rt_rtc_ops _rtc_ops = { diff --git a/bsp/cvitek/drivers/port/mnt_diskfs.c b/bsp/cvitek/drivers/port/mnt_diskfs.c new file mode 100644 index 00000000000..ca80816f5af --- /dev/null +++ b/bsp/cvitek/drivers/port/mnt_diskfs.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include + +#ifdef RT_USING_DFS +#include + +#define DBG_TAG "app.filesystem" +#define DBG_LVL DBG_LOG +#include + +static int _wait_device_ready(const char* devname) +{ + int k; + + for(k = 0; k < 10; k++) + { + if (rt_device_find(devname) != RT_NULL) + { + return 1; + } + rt_thread_mdelay(50); + } + + return 0; +} + +static void sd_mount(const char *devname) +{ + if (!_wait_device_ready(devname)) { + LOG_W("Failed to find device: %s", devname); + return; + } + + if (dfs_mount(devname, "/", "ext", 0, 0) == RT_EOK) + { + LOG_I("device '%s' is mounted to '/' as EXT", devname); + } + else if (dfs_mount(devname, "/", "elm", 0, 0) == RT_EOK) + { + LOG_I("device '%s' is mounted to '/' as FAT", devname); + } + else + { + LOG_W("Failed to mount device '%s' to '/': %d\n", devname, rt_get_errno()); + } +} + +int mount_init(void) +{ +#ifdef BSP_USING_SDH + sd_mount("sd1"); +#endif + + return RT_EOK; +} +INIT_ENV_EXPORT(mount_init); + +#endif /* RT_USING_DFS */ diff --git a/bsp/cvitek/drivers/port/mnt_romfs.c b/bsp/cvitek/drivers/port/mnt_romfs.c deleted file mode 100644 index 799b7c5ccf3..00000000000 --- a/bsp/cvitek/drivers/port/mnt_romfs.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2006-2023, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2022/12/25 flyingcys first version - */ -#include - -#ifdef RT_USING_DFS -#include -#include "dfs_romfs.h" - -#define DBG_TAG "app.filesystem" -#define DBG_LVL DBG_LOG -#include - -static const struct romfs_dirent _romfs_root[] = -{ -#ifdef BSP_USING_ON_CHIP_FLASH - {ROMFS_DIRENT_DIR, "flash", RT_NULL, 0}, -#endif - {ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0} -}; - -const struct romfs_dirent romfs_root = -{ - ROMFS_DIRENT_DIR, "/", (rt_uint8_t *)_romfs_root, sizeof(_romfs_root) / sizeof(_romfs_root[0]) -}; - -static void sd_mount(void *parameter) -{ - while (1) - { - rt_thread_mdelay(500); - - if (rt_device_find("sd0") != RT_NULL) - { - if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) == RT_EOK) - { - LOG_I("sd card mount to '/sdcard'"); - break; - } - else - { - LOG_W("sd card mount to '/sdcard' failed! %d\n", rt_get_errno()); - } - } - } -} - -int mount_init(void) -{ - if(dfs_mount(RT_NULL, "/", "rom", 0, &romfs_root) != 0) - { - LOG_E("rom mount to '/' failed!"); - } - -#ifdef BSP_USING_ON_CHIP_FLASH_FS - struct rt_device *flash_dev = RT_NULL; - - /* 使用 filesystem 分区创建块设备,块设备名称为 filesystem */ - flash_dev = fal_blk_device_create("filesystem"); - if(flash_dev == RT_NULL) - { - LOG_E("Failed to create device.\n"); - return -RT_ERROR; - } - - if (dfs_mount("filesystem", "/flash", "lfs", 0, 0) != 0) - { - LOG_I("file system initialization failed!\n"); - if(dfs_mkfs("lfs", "filesystem") == 0) - { - if (dfs_mount("filesystem", "/flash", "lfs", 0, 0) == 0) - { - LOG_I("mount to '/flash' success!"); - } - } - } - else - { - LOG_I("mount to '/flash' success!"); - } -#endif - -#ifdef BSP_USING_SDH - rt_thread_t tid; - - tid = rt_thread_create("sd_mount", sd_mount, RT_NULL, - 4096, RT_THREAD_PRIORITY_MAX - 2, 20); - if (tid != RT_NULL) - { - rt_thread_startup(tid); - } - else - { - LOG_E("create sd_mount thread err!"); - } -#endif - - return RT_EOK; -} -INIT_APP_EXPORT(mount_init); - -#endif /* RT_USING_DFS */