rt-thread-official/bsp/cvitek/cv18xx_risc-v
Shell 65c9947225
[libcpu] rv64: support for ARCH_REMAP_KERNEL (#9067)
* [libcpu] support for ARCH_REMAP_KERNEL

These changes introduce support for the ARCH_REMAP_KERNEL configuration,
which isolates kernel space in high virtual address regions. This feature
is necessary to enhance memory protection and management by segregating
user and kernel spaces more effectively.

Changes:
- Updated conditional macros to check for ARCH_REMAP_KERNEL instead of
  ARCH_KERNEL_IN_HIGH_VA in board initialization files to reflect the new
  configuration option.
- Modified qemu-virt64-riscv Kconfig and SConstruct files to include and
  utilize ARCH_REMAP_KERNEL.
- Created a new linker script `link_smart.lds` for smart linking in qemu-virt64-riscv.
- Updated rtconfig.py to use a more flexible execution path setup.
- Enhanced user address space definitions in `lwp_arch.h` to support the
  new virtual address mappings.
- Adjusted kernel memory initialization and mapping logic in `c906/mmu.c`
  and `virt64/mmu.c` to account for high virtual address regions.
- Added Kconfig option to enable ARCH_REMAP_KERNEL for RISCV64 architectures.
- Enhanced memory setup functions to support new mapping scheme, including
  updates to early page table setup and address relocation logic.

These modifications ensure that the system can utilize high memory
addresses for the kernel, improving memory isolation and system stability.

Signed-off-by: Shell <smokewood@qq.com>

* fixup: CI run failed

* bsp: default config without using smart

* fixup: static checks

* restore rt_hw_mmu_kernel_map_init for D1

---------

Signed-off-by: Shell <smokewood@qq.com>
2024-06-18 11:15:59 +08:00
..
applications [bsp/cvitek]update gpio driver (#8946) 2024-05-13 18:20:57 -04:00
board [libcpu] rv64: support for ARCH_REMAP_KERNEL (#9067) 2024-06-18 11:15:59 +08:00
dtb support cvitek bsp spinor flash 2024-04-09 18:09:54 -04:00
.config update gpio driver 2024-05-27 11:26:09 +08:00
.gitignore support cv181x-riscv for RT-SMART (#8724) 2024-04-03 07:37:45 +08:00
Kconfig update gpio driver 2024-05-27 11:26:09 +08:00
README.md support cvitek bsp spinor flash 2024-04-09 18:09:54 -04:00
README_en.md support cvitek bsp spinor flash 2024-04-09 18:09:54 -04:00
SConscript support cv181x-riscv for RT-SMART (#8724) 2024-04-03 07:37:45 +08:00
SConstruct support cv181x-riscv for RT-SMART (#8724) 2024-04-03 07:37:45 +08:00
link.lds support cv181x-riscv for RT-SMART (#8724) 2024-04-03 07:37:45 +08:00
link_stacksize.lds support cv181x-riscv for RT-SMART (#8724) 2024-04-03 07:37:45 +08:00
rtconfig.h update gpio driver 2024-05-27 11:26:09 +08:00
rtconfig.py [bsp/cvitek]update cvitek sdhci drvier (#8874) 2024-04-28 23:07:42 +08:00

README_en.md

中文 | English

Overview

The CV18xx series of chips are high-performance, low-power chips launched for various products in the field of civilian consumer surveillance IP cameras, smart homes, and more. These chips integrate H.264/H.265 video compression encoders, as well as ISP; they support various image enhancement and correction algorithms such as digital wide dynamic range, 3D noise reduction, defogging, and lens distortion correction, providing customers with professional-level video image quality.

  1. Processor Core
  • Main Processor: RISC-V C906 @ 1.0Ghz
    • 32KB I-cache, 64KB D-Cache
    • Integrated Vector and Floating-Point Unit (FPU).
  • Co-processor: RISC-V C906 @ 700Mhz
    • Integrated Floating-Point Unit (FPU)
  1. Storage Interface
  • Built-in DRAM: DDR2 16bitx1, with a maximum speed of 1333Mbps, and a capacity of 512Mbit (64MB)
  • Support for SPI NOR flash interface (1.8V / 3.0V)
    • Supports 1, 2, 4 line modes
    • Maximum support of 256MByte
  • Support for SPI Nand flash interface (1.8V / 3.0V)
    • Supports 1KB/2KB/4KB page (corresponding to maximum capacity of 16GB/32GB/64GB)
    • Utilizes the device's built-in ECC module
  1. Peripherals
  • Up to 26 GPIO pins on the MilkV-Duo 40-pin header provide access to internal peripherals such as SDIO, I2C, PWM, SPI, J-TAG, and UART
  • Up to 3x I2C
  • Up to 5x UART
  • Up to 1x SDIO1
  • Up to 1x SPI
  • Up to 2x ADC
  • Up to 7x PWM
  • Up to 1x RUN
  • Up to 1x JTAG
  • Integrated MAC PHY supports 10/100Mbps full or half duplex mode
  • One USB host/device interface

Toolchain Download

  1. RT-Thread Standard Edition Toolchain: riscv64-unknown-elf-gcc Download Link 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 Edition Toolchain: riscv64-unknown-linux-musl-gcc Download Link https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2

Note: The current bsp only supports Linux compilation, and it is recommended to use Ubuntu 22.04

After correctly extracting, add the local path of the riscv64-unknown-elf-gcc or riscv64-unknown-linux-musl-gcc toolchain to EXEC_PATH in rtconfig.py or specify the path through the RTT_EXEC_PATH environment variable.

# For RT-Thread Standard Edition, use the following configuration:
$ export RTT_CC_PREFIX=riscv64-unknown-elf-
$ export RTT_EXEC_PATH=/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin

# For RT-Smart Edition, use the following configuration:
$ export RTT_CC_PREFIX=riscv64-unknown-linux-musl-
$ export RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin

Compilation

Dependency Installation

$ sudo apt install -y scons libncurses5-dev device-tree-compiler

Modify Current Project Configuration

For the Linux platform, execute:

$ scons --menuconfig
  1. By default, compile as RT-Thread Standard Edition. If you need to compile as RT-Smart Edition, modify as follows:
RT-Thread Kernel  --->
    [*] Enable RT-Thread Smart (microkernel on kernel/userland)

    (0x80000000) The virtual address of kernel start
  1. Select the current target development board type:
Board Type (milkv-duo)  --->
    ( ) milkv-duo
    ( ) milkv-duo-spinor
    (X) milkv-duo256m
    ( ) milkv-duo256m-spinor

It will automatically download relevant scripts to the ~/.env directory, then execute:

$ source ~/.env/env.sh
$ pkgs --update

After updating the software package, execute scons -j10 or scons -j10 --verbose to compile this board support package. If the compilation is successful, an rtthread.elf file will be generated.

After the compilation is complete, the script automatically calls the ./mksdimg.sh script to package and generate boot.sd, which is the kernel file for SD card startup.

Running

  1. Divide the SD card into 2 partitions, with the first partition used to store bin files, and the second partition used as a data storage partition, with FAT32 format.
  2. Copy the fip.bin and boot.sd files from the root directory to the first partition of the SD card. Subsequent firmware updates only require copying the boot.sd file. Where:
  • fip.bin: fsbl, opensbi, and uboot packaged bin file
  • boot.sd: kernel packaged bin file

After updating boot.sd, restart to see the serial port output:

U-Boot 2021.10 (Jun 26 2023 - 14:09:06 +0800)cvitek_cv180x

DRAM:  63.3 MiB
gd->relocaddr=0x82435000. offset=0x2235000
MMC:   cv-sd@4310000: 0
Loading Environment from <NULL>... OK
In:    serial
Out:   serial
Err:   serial
Net:
Warning: ethernet@4070000 (eth0) using random MAC address - 62:80:19:6c:d4:64
eth0: ethernet@4070000
Hit any key to stop autoboot:  0
Boot from SD ...
switch to partitions #0, OK
mmc0 is current device
132692 bytes read in 12 ms (10.5 MiB/s)
## Loading kernel from FIT Image at 81400000 ...
   Using 'config-cv1800b_milkv_duo_sd' configuration
   Trying 'kernel-1' kernel subimage
   Verifying Hash Integrity ... crc32+ OK
## Loading fdt from FIT Image at 81400000 ...
   Using 'config-cv1800b_milkv_duo_sd' configuration
   Trying 'fdt-cv1800b_milkv_duo_sd' fdt subimage
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x8141b590
   Uncompressing Kernel Image
   Decompressing 296768 bytes used 42ms
   Loading Device Tree to 0000000081be5000, end 0000000081becb60 ... OK

Starting kernel ...

heap: [0x802766b0 - 0x812766b0]

 \ | /
- RT -     Thread Operating System
 / | \     5.1.0 build Apr  7 2024 23:33:20
 2006 - 2024 Copyright by RT-Thread team
Hello RISC-V!
msh />