RISCV开发环境使用指南


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 04/22/2024
    1.1
  • 文档格式修改
  • 04/18/2025

    1. 概述

    RISCV开发环境搭建有两种方式:

    • 基于Makefile的脚本编译。

    • 基于MounRiver Studio。MRS(www.mounriver.com)是一款针对嵌入式项目(RISC-V/ARM)的集成开发环境,提供了包括编辑器、C编译器、宏汇编、链接器、库管理、仿真调试器等在内的完整开发资源。

    推荐使用脚本编译方式

    2. RISCV SDK脚本编译方式

    python 环境用2.7.17

    2.1. RISCV Linux Code的集成编译

    集成编译是指把RISCV的源码放到linux源码路径下,编译project的同时会一起编译RISCV

    2.1.1. 工具链配置

    解压工具链:

    tar -xvf riscv_gcc.tar.xz
    

    本文中工具链解压后的路径为:/tools/toolchain

    export PATH=${PATH}:/tools/toolchain/gcc-10.2.1-20210303-sigmastar-glibc-x86_64_aarch64-linux-gnu/bin:/tools/toolchain/riscv_gcc/bin;
    
    export CROSS_COMPILE=aarch64-linux-gnu-;
    
    export ARCH=arm64
    

    2.1.2. 代码解压

    在Linux Source code的project同级目录创建文件夹 riscv/kernel

    mkdir -p riscv/kernel
    

    将释放的pcupid_riscv_isw.tar.xz使用命令解压到riscv/kernel目录

    cd riscv/kernel
    tar -xvf ~/Pcupid_DLD00V2.2.8-RISCV.tar.xz -C ./
    

    2.1.2. 选择编译defconfig

    cd到Linux编译的文件夹project目录,执行:

    make dispcam_pcupid.spinand.glibc-10.2.1-squashfs.ssm001b.256.dual_sensor.bga_ddr3_riscv_defconfig
    

    这里defconfig里会设定riscv的编译mak文件CONFIG_RISCV_CONFIG="pcupid_riscv_isw"

    2.1.3. 编译整包image

    make clean
    make image -j8
    

    RISCV会根据project/board/riscv/riscv.mk优先使用Source Code进行编译

    编译完成后会自动将riscv/kernel/rtk/proj/build/pcupid_riscv_isw/out/u-pcupid_riscv_isw.bin复制到project/board/riscv/riscfw

    并创建硬链接到project/image/output/images/riscvfw,用于后续制作USB升级二进制文件。

    2.2. RISCV Code的单独编译

    2.2.1. 解压工具链和源码

    解压提供的gcc-sigmastar-7.2.0-riscv64-unknown-elf.tar.xz压缩包和源码pcupid_riscv_isw.tar.xz

    2.2.2. 工具链配置

    export PATH=/users/yongfeng.wu/riscv/gcc-sigmastar-7.2.0-riscv64-unknown-elf/bin/:$PATH
    export CROSS_COMPILE=riscv64-unknown-elf-
    

    2.2.3. 编译代码

    cd rtk/proj
    ./tng/configure.pl pcupid_riscv_isw
    

    执行编译命令

    make clean
    make -j32
    

    2.2.4. 更新固件,打包镜像

    生成的二进制文件位于:

    build/pcupid_riscv_isw/out/u-pcupid_riscv_isw.bin
    

    将生成好的二进制文件复制到project目录下:

    cp build/pcupid_riscv_isw/out/u-pcupid_riscv_isw.bin ../../project/board/riscv/riscfw
    

    重新打包固件:

    cd project
    make image_install -j8
    

    2.3. 新增客户应用模块

    以添加一个test demo为例,客户增加应用模块,主要按如下4个步骤操作即可

    2.3.1. 添加config

    在riscv/kernel/rtk/proj/mak/下的options_pcupid_riscv_isw.mak中添加模块CONFIG配置

    2.3.2. 加入编译路径

    1. 在riscv/kernel/rtk/proj/mak/libs_common.mak文件中添加新增应用的PRODUCT_SC,上一步打开CONFIG后即会编译对应的应用

      注:此处需要用PRODUCT_SC,表示需要编译源码,使用PRODUCT_SC_LIB_REL会报错

    2. 在riscv/kernel/rtk/proj/mak/paths.mak中添加模块路径

    2.3.3. 添加mak编译配置文件,源文件

    test_demo.c 中测试内容

    #include <string.h>
    #include "sys_sys_isw_cli.h"
    #include "cam_os_wrapper.h"
    
    static int MyTestMain(CLI_t *pCli, char *p) {
        CamOsPrintf("demo test\n");
    
        return 0;
    }
    
    SS_RTOS_CLI_CMD(test_demo,
                    "Rest test",
                    "Usage: reset_test [cmd]\n"
                    "Cmd:\n"
                    "   reset_arm: reset arm\n"
                    "   reset_soc: reset soc\n"
                    "   shutdown_soc: shutdown soc\n"
                    "   reset_reason: get last reset reason\n",
                    MyTestMain);
    

    test_demo.mak内容

    PROCESS = lib
    SRC_C_LIST := test_demo.c
    PATH_C := $(PATH_test_demo)/\
    

    2.3.4 编译

    由于修改到了config文件,需要在rtk/proj目录下重新执行指定config命令

    ./tng/configure.pl pcupid_riscv_isw
    make clean
    make -j8
    

    3. MounRiver Studio安装

    3.1. 下载

    从MounRiver官网下载安装包(本文使用的为MounRiver_Studio_Setup_V183.zip):

    http://www.mounriver.com/download

    3.2. 安装

    解压安装包,双击Setup进行安装

    3.3. MounRiver帮助文档

    3.3.1. 在线帮助文档

    http://www.mounriver.com/help

    3.3.2. IDE集成帮助文档

    离线帮助文档打开步骤:

    1. 点击IDE上面Help按钮

    2. 在弹窗中选择“Help Manual”

    3. 在打开的“Help Manual”窗口左边,选择“帮助手册(中文)”

    4. 后边就会显示帮助手册的目录,可以依次或按需浏览。

    3.4. Python环境安装

    3.4.1. 下载

    从python官网下载3.8版本的安装包,推荐3.8.10版本:

    https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe

    3.4.2. 安装

    双击下载好的安装程序进行安装,记得要勾选上”Add Python to PATH”选项

    3.5. 打开工程文件

    解压Pcupid_DLD00V2.2.8-RISCV-MountRiver.tar.xz

    双击PCUPID.wvproj 即可打开RISCV的MountRiver工程

    3.6. 编译

    • 点击按钮1,Build,就可以进行Build了

    • 点击按钮2,Rebuild,会先进行clean操作,然后再执行Build操作

    • Build完成后,就可以在obj目录下生成新的固件PCUPID.fw

    3.7. 更新固件,打包镜像

    • Linux alakid项目: 使用PCUPID.fw替换alkaid中的project/board/riscv/riscfw并重新生成images包,也可以单独把新固件替换烧入images目录中的riscvfw文件,烧入新的images后重新启动,系统会使用新固件启动RISCV。

    4. 系统概述

    架构说明:

    • 物理硬件层:由物理硬件组成,其中包括cpu、ddr、i2c、uart等硬件模块组成;

    • 基础内核层:基础内核层主要包含与硬件相关的驱动代码,cpu相关的中断管理、异常管理、系统时钟,以及操作系统提供的基础的任务管理和内存管理。除此之外内核还提供一系列通讯工具如消息队列、信号量等。任务管理以及通讯相关的组件与FreeRTOS官方的使用方法无异,请参考FreeRTOS官方提供的说明文档;

    • 内核增强:内核增强主要是在基础内核的基础上实现某些系统扩展功能,例如:

      • CLI:提供了用户命令行操作,用户可以通过命令行测试或观察系统运行状态;

      • RPMSG:提供了FreeRTOS和Linux的通信机制;

      • ProxyFS:实现了FreeRTOS端通过虚拟文件系统读写Linux端文件,可用于FreeRTOS标定数据存取;

      • Exception Log:实现了记录系统错误时的最后日志到共享内存中;

      • CamOsWrapper:对不同系统实现了跨系统的统一调用接口,方便代码归一及统一用法;

    • 行业应用:由客户的应用逻辑通过调用底层的接口实现的上层应用。

    5. 目录结构

    目录说明:

    • 目录1,hdrs,是sdk的头文件目录,所有以library形式release的库,其对应的头文件都在这个目录中

    • 目录2,libs/product,是sdk的库文件目录,所有以library形式release的库,都在这个目录下

    • 目录3,obj,是MounRiver编译的输出目录,里面有自动生成的makefile,以及编译结果文件,如PCUPID.fw就是可以烧入到flash上,让RISCV运行的固件。

    • 目录4,sc,是sdk中以源代码形式release的库和app所在的目录,其中application下的是demo程序,而driver目录下的是驱动

    • 目录5,scatter,是link script所在目录

    • 目录6,tools,是存放需要用用到的tools的目录,比如把ELF转换成可以烧入到flash上被执行的固件的脚本(postprocess.py)就在这个目录下面。

    5.1. Demo application介绍

    • 目录1,inc,存放的是模块(module)内部的头文件,不被其他模块使用的头文件

    • 目录2,pub,存放的是会被其他模块使用的头文件

    • 目录3,src,则是模块的源代码文件

    • 函数4,rtos_application_initcall(),用来指定application模块的入口函数,第一个参数是函数名,第二个参数用于设置模块入口函数的执行顺序,一般都配置为0,当存在多个application模块时,可以通过配置参数0,1,2,3来决定application函数的执行顺序,数字越小会越早得到执行

    • Bench模块的入口函数RtosAppMainEntry()只是单纯的调用coremark_main()函数,执行coremark操作