保姆级教程在Ubuntu 22.04上为嘉楠K230大小核分别编译CoreMark附SConstruct文件详解嵌入式开发领域正迎来RISC-V架构的爆发式增长嘉楠科技推出的K230芯片凭借其独特的双核设计Linux小核与RT-Smart大核成为边缘计算的新宠。本文将带您从零开始在Ubuntu 22.04系统上完成CoreMark基准测试程序的交叉编译全流程深入解析SConstruct构建脚本的每个关键参数帮助开发者掌握RISC-V开发的精髓技巧。1. 环境准备与工具链配置1.1 基础环境搭建首先确保Ubuntu 22.04系统已更新至最新状态sudo apt update sudo apt upgrade -y安装SCons构建工具及其依赖项sudo apt install scons build-essential git wget提示建议使用SSD存储设备SDK下载和编译过程会产生大量临时文件机械硬盘可能导致编译时间显著延长。1.2 工具链获取与配置嘉楠K230采用差异化工具链设计需分别准备核心类型工具链名称C库类型适用场景小核Xuantie-900-gcc-linux-5.10.4-glibcglibcLinux应用开发大核riscv64-linux-musleabimusl实时系统开发下载工具链的两种方式通过SDK自动获取git clone https://github.com/kendryte/k230_sdk.git cd k230_sdk source tools/get_download_url.sh make prepare_sourcecode手动下载备用方案# 小核工具链 wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1659325511536/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0-20220715.tar.gz # 大核工具链 wget https://download.rt-thread.org/rt-smart/riscv64/riscv64-unknown-linux-musl-rv64imafdcv-lp64d-20230222.tar.bz22. CoreMark源码移植与改造2.1 获取基准代码从EEMBC官方仓库克隆最新CoreMarkgit clone https://github.com/eembc/coremark.git cd coremark2.2 关键文件移植复制并修改移植层文件cp simple/core_portme.* .需要修改的核心参数core_portme.h中的CLOCKS_PER_SEC需匹配K230计时器频率core_portme.c需实现以下关键函数void start_time(void) { /* 启动计时器 */ } void stop_time(void) { /* 停止计时器 */ } CORE_TICKS get_time() { /* 获取时钟计数 */ }3. SConstruct构建脚本深度解析3.1 小核Linux构建配置创建SConstruct.linux文件import os # 工具链路径配置 toolchain_path /opt/k230/toolchain/glibc/bin env Environment(ENV{PATH: f{os.environ[PATH]}:{toolchain_path}}) # 编译器设置 env[CC] riscv64-unknown-linux-gnu-gcc env[LINK] $CC # 关键编译参数 env.Append(CCFLAGS[ -O3, -marchrv64imafdcv, -mabilp64d, -mcmodelmedany ]) # 源文件处理 src_files Glob(*.c) env.Program(targetcoremark_linux.elf, sourcesrc_files)参数详解-marchrv64imafdcv启用向量指令扩展-mabilp64d双精度浮点ABI规范-mcmodelmedany4GB地址范围代码模型3.2 大核RT-Smart构建配置创建SConstruct.rt文件env Environment(tools[default, gcc]) # 特殊链接脚本配置 link_script /path/to/k230_sdk/rt-smart/linker_scripts/riscv64/link.lds env.Append(LINKFLAGS[ -T, link_script, -Wl,--whole-archive, -lrtthread, -Wl,--no-whole-archive, -static ]) # 库路径设置 env[LIBPATH] [ #/sdk/rt-thread/lib, #/sdk/lib/risc-v/rv64 ] env.Program(targetcoremark_rt.elf, sourceGlob(*.c))注意RT-Smart需要静态链接RT-Thread内核库--whole-archive确保所有符号被包含4. 编译执行与性能分析4.1 分核编译命令# 小核编译 scons -f SConstruct.linux # 大核编译 scons -f SConstruct.rt4.2 文件部署方式通过USB虚拟磁盘传输cp *.elf /media/$USER/CanMV/串口终端执行示例# 小核执行 chmod x coremark_linux.elf ./coremark_linux.elf # 大核执行 msh /sdcard/app ./coremark_rt.elf4.3 典型性能数据在800MHz小核和1.6GHz大核上的实测结果指标小核(glibc)大核(musl)CoreMark分数34334522CoreMark/MHz4.292.83编译优化级别O3O2性能差异主要来自musl库的轻量级特性牺牲部分性能RT-Smart实时系统的调度开销大核默认运行在低功耗模式
保姆级教程:在Ubuntu 22.04上为嘉楠K230大小核分别编译CoreMark(附SConstruct文件详解)
保姆级教程在Ubuntu 22.04上为嘉楠K230大小核分别编译CoreMark附SConstruct文件详解嵌入式开发领域正迎来RISC-V架构的爆发式增长嘉楠科技推出的K230芯片凭借其独特的双核设计Linux小核与RT-Smart大核成为边缘计算的新宠。本文将带您从零开始在Ubuntu 22.04系统上完成CoreMark基准测试程序的交叉编译全流程深入解析SConstruct构建脚本的每个关键参数帮助开发者掌握RISC-V开发的精髓技巧。1. 环境准备与工具链配置1.1 基础环境搭建首先确保Ubuntu 22.04系统已更新至最新状态sudo apt update sudo apt upgrade -y安装SCons构建工具及其依赖项sudo apt install scons build-essential git wget提示建议使用SSD存储设备SDK下载和编译过程会产生大量临时文件机械硬盘可能导致编译时间显著延长。1.2 工具链获取与配置嘉楠K230采用差异化工具链设计需分别准备核心类型工具链名称C库类型适用场景小核Xuantie-900-gcc-linux-5.10.4-glibcglibcLinux应用开发大核riscv64-linux-musleabimusl实时系统开发下载工具链的两种方式通过SDK自动获取git clone https://github.com/kendryte/k230_sdk.git cd k230_sdk source tools/get_download_url.sh make prepare_sourcecode手动下载备用方案# 小核工具链 wget https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1659325511536/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0-20220715.tar.gz # 大核工具链 wget https://download.rt-thread.org/rt-smart/riscv64/riscv64-unknown-linux-musl-rv64imafdcv-lp64d-20230222.tar.bz22. CoreMark源码移植与改造2.1 获取基准代码从EEMBC官方仓库克隆最新CoreMarkgit clone https://github.com/eembc/coremark.git cd coremark2.2 关键文件移植复制并修改移植层文件cp simple/core_portme.* .需要修改的核心参数core_portme.h中的CLOCKS_PER_SEC需匹配K230计时器频率core_portme.c需实现以下关键函数void start_time(void) { /* 启动计时器 */ } void stop_time(void) { /* 停止计时器 */ } CORE_TICKS get_time() { /* 获取时钟计数 */ }3. SConstruct构建脚本深度解析3.1 小核Linux构建配置创建SConstruct.linux文件import os # 工具链路径配置 toolchain_path /opt/k230/toolchain/glibc/bin env Environment(ENV{PATH: f{os.environ[PATH]}:{toolchain_path}}) # 编译器设置 env[CC] riscv64-unknown-linux-gnu-gcc env[LINK] $CC # 关键编译参数 env.Append(CCFLAGS[ -O3, -marchrv64imafdcv, -mabilp64d, -mcmodelmedany ]) # 源文件处理 src_files Glob(*.c) env.Program(targetcoremark_linux.elf, sourcesrc_files)参数详解-marchrv64imafdcv启用向量指令扩展-mabilp64d双精度浮点ABI规范-mcmodelmedany4GB地址范围代码模型3.2 大核RT-Smart构建配置创建SConstruct.rt文件env Environment(tools[default, gcc]) # 特殊链接脚本配置 link_script /path/to/k230_sdk/rt-smart/linker_scripts/riscv64/link.lds env.Append(LINKFLAGS[ -T, link_script, -Wl,--whole-archive, -lrtthread, -Wl,--no-whole-archive, -static ]) # 库路径设置 env[LIBPATH] [ #/sdk/rt-thread/lib, #/sdk/lib/risc-v/rv64 ] env.Program(targetcoremark_rt.elf, sourceGlob(*.c))注意RT-Smart需要静态链接RT-Thread内核库--whole-archive确保所有符号被包含4. 编译执行与性能分析4.1 分核编译命令# 小核编译 scons -f SConstruct.linux # 大核编译 scons -f SConstruct.rt4.2 文件部署方式通过USB虚拟磁盘传输cp *.elf /media/$USER/CanMV/串口终端执行示例# 小核执行 chmod x coremark_linux.elf ./coremark_linux.elf # 大核执行 msh /sdcard/app ./coremark_rt.elf4.3 典型性能数据在800MHz小核和1.6GHz大核上的实测结果指标小核(glibc)大核(musl)CoreMark分数34334522CoreMark/MHz4.292.83编译优化级别O3O2性能差异主要来自musl库的轻量级特性牺牲部分性能RT-Smart实时系统的调度开销大核默认运行在低功耗模式