Ubuntu 下使用 Scons 交叉编译嘉楠堪智 CanMV K230 大小核 Coremark 程序

在Ubuntu下使用SCons进行交叉编译玄铁C908(或其他任何目标平台)的C程序需要几个步骤。这里假设你已经有了针对C908的交叉编译工具链(如交叉编译器、链接器、库等)。

以下是一般步骤的概述:

安装SCons

如果尚未安装SCons,可以使用apt包管理器进行安装:

sudo apt update

sudo apt install scons

准备交叉编译工具链

你需要确保已经安装了针对C908的交叉编译工具链。这通常包括交叉编译器(如arm-none-eabi-gcc或特定于C908的类似工具)、交叉链接器和其他必要的工具。

准备Coremark程序

1. 下载代码

        git clone https://github.com/eembc/coremark.git

        cd coremark/

2. 移植代码

编写SConstruct文件

SConstruct文件是SCons的构建脚本。你需要为你的项目编写一个SConstruct文件,指定源文件、构建目标、编译器和其他构建选项。

小核SConstruct文件如下所示:

# 引入SCons的环境  
import os  
  
# 交叉编译工具链的路径  
toolchain_path = 'k230_sdk/toolchain/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.6.0/bin'  
  
# 设置环境变量  
env = Environment(ENV={'PATH' : os.environ['PATH'] + ':' + toolchain_path})  
  
# 设置交叉编译器  
env['CC'] = 'riscv64-unknown-linux-gnu-gcc'  
env['LINK'] = '$CC'  
  
# 添加编译和链接选项(根据你的需要调整)  
env['CFLAGS'] = '-mcmodel=medany -march=rv64imafdc -mabi=lp64'  
env['LINKFLAGS'] = env['CFLAGS']  
  
# 假设你的CoreMark源文件在'src'目录下  
src_dir = 'src'  
src_files = Glob(os.path.join(src_dir, '*.c'))  
  
# 构建程序(假设你的目标文件名为'coremark')  
env.Program(target='coremark', source=src_files)

大核SConstruct文件如下所示:

# 引入SCons的环境  
import os  
  
# 交叉编译工具链的路径  
toolchain_path = 'k230_sdk/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin'  
  
# 初始化环境变量  
env = Environment(tools=['default', 'gcc'], ENV={'PATH' : os.environ['PATH'] + ':' + toolchain_path})  
  
# 设置交叉编译器  
env['CC'] = 'riscv64-unknown-linux-musl-gcc'  
env['LINK'] = '$CC'  
env['LINKFLAGS'] = '-mcmodel=medany -march=rv64imafdcv -mabi=lp64d -T k230_sdk/src/big/mpp/userapps/sample/linker_scripts/riscv64/link.lds -n --static'  
env['CPPPATH'] = ['#']  # 如果有头文件路径需要添加  
env['LIBPATH'] = [  
    'k230_sdk/src/big/rt-smart/userapps/sdk/rt-thread/lib',  
    'k230_sdk/src/big/rt-smart/userapps/sdk/lib/risc-v/rv64',  
    'k230_sdk/src/big/rt-smart/userapps/sdk/rt-thread/lib/risc-v/rv64'  
]  
env['LIBS'] = ['rtthread']  
env['RPATH'] = []  # 如果有需要添加的运行时搜索路径  
  
# 添加源文件  
src_files = Glob('src/*.c')  # 假设CoreMark源文件在'src'目录下  
  
# 设置链接选项(针对-Wl, --whole-archive 和 -Wl, --no-whole-archive)  
env.Append(LINKFLAGS=['-Wl,--whole-archive', '-lrtthread', '-Wl,--no-whole-archive'])  
env.Append(LINKFLAGS=['-Wl,--start-group', '-lrtthread', '-Wl,--end-group'])  
  
# 构建程序  
env.Program(target='coremark.elf', source=src_files)  
  
# 如果需要额外的构建步骤或目标,可以在这里添加

运行Scons编译:

进入 k230_sdk/src/big/rt-smart/userapps 目录,编译程序:

canaan@develop:~/k230_sdk/src/big/rt-smart/userapps$ scons --directory=coremark
scons: Entering directory `/home/canaan/k230_sdk/src/big/rt-smart/userapps/coremark'
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build/coremark
CC build/coremark/coremark.o
LINK coremark.elf
/home/canaan/k230_sdk/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/../lib/gcc/riscv64-unknown-linux-musl/12.0.1/../../../../riscv64-unknown-linux-musl/bin/ld: warning: coremark.elf has a LOAD segment with RWX permissions
scons: done building targets.

运行 coremark:


msh /sdcard/app/coremark>./coremark.elf
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 116797479
Total time (secs): 116.797479
Iterations/Sec   : 856.182863
Iterations       : 100000
Compiler version : GCC12.0.1 20220505 (prerelease)
Compiler flags   : -o2
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xd340
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 856.182863 / GCC12.0.1 20220505 (prerelease) -o2 / STACK

                                                                                         老徐,2024/5/8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/605366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能家居2 -- 实现网络控制模块

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 socket_interface.c #include <pthread.h>#include "socket_interface.h" #include "control.h" #include "socke…

【教程】超简单!如何将“在VSCode中打开”添加到右键菜单中

按照以下步骤进行操作&#xff1a; 打开注册表编辑器&#xff1a; 按下 Win R 组合键打开运行对话框。输入 regedit 并按下 Enter 键打开注册表编辑器。 导航到适当的注册表项&#xff1a; 转到以下注册表项&#xff1a;HKEY_CLASSES_ROOT\Directory\Background\shell 创建…

26版SPSS操作教程(高级教程第十九章)

目录 前言 粉丝及官方意见说明 第十九章一些学习笔记 第十九章一些操作方法 树模型、随机森林与最近邻元素法 树模型 数据准备 具体操作 结果解释 对案例的进一步分析 结果解释 考虑应用模型时的成本与收益 保存新数据 在选项中看错误分类成本和利润 结果解释…

【管理篇】如何管理情绪?

目录标题 为什么要特别关注激动和愤怒两种情绪呢&#xff1f;管理自己的情绪大致的步骤三层脑结构爬行脑情绪脑视觉脑 大家说的情绪管理&#xff0c;基本上都是对于情绪激动、生气甚至是愤怒的管理&#xff1b;日常所说的情绪化&#xff0c;一般也是指某个人特别容易情绪激动&a…

Gitlab自动化测试的配置

1. 代码分支命名规范检测 Setting → Repository → Push rules → Branch name&#xff0c;添加分支命名规范对应的正则表达式。如&#xff1a; ^(Release|Tag|Develop|Feature)_._.|Main$ 表示分支名只能以以下关键字之一开头&#xff1a;Release、Tag、Develop和Feature。 …

基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真。 2.系统仿真结果 输入的V&#xff0c;Ac&#xff0c;a 输出的档位&#xff1a; 3.核心程序与模型 版…

【BST】Behavior Sequence Transformer for E-commerceRecommendation in Alibaba

一、提出背景 传统的Embedding&MLP模型结构将原始特征嵌入到低维向量中&#xff0c;然后将其concat后输入MLP进行最终推荐。DIN提出使用注意力机制来捕获候选项与用户先前点击的项之间的相似性。 然而&#xff0c;大多数这些工作只是连接不同的特征&#xff0c;而没有捕获用…

通过 Java 操作 redis -- hash 哈希表基本命令

目录 使用命令 hset&#xff0c;hget 使用命令 hexists 使用命令 hdel 使用命令 hkeys&#xff0c;hvals 使用命令 hmget&#xff0c;hmset 关于 redis hash 哈希表类型的相关命令推荐看Redis - hash 哈希表 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务…

AVL Cruise与Simulink联合仿真(通过MATLAB DLL方式)

最近毕业设计需要用到AVL Cruise与Simulink进行联合仿真&#xff0c;分析汽车模型的经济性。下面介绍一下我所知的AVL Cruise与Simulink联合仿真的几种方式&#xff0c;它们各自的优缺点&#xff0c;以及DLL方式联合仿真的具体配置过程。我这里用的MATLAB软件版本是2021a&#…

运行Spring Boot项目失败?显示java: 无法访问org.springframework.boot.SpringApplication,让我来看看~

idea项目运行报错截图&#xff1a; &#xff08;1&#xff09;查看错误提示“类文件具有错误的版本 61.0, 应为 52.0”&#xff0c;61.0对应的是jdk17&#xff0c;52.0对应1.8。 通过这个网址可以查询版本&#xff1a; https://stackoverflow.com/questions/9170832/list-of-ja…

Linux文本三剑客

文章目录 一、文本搜索工具--grep1、简介2、工作原理3、语法格式4、选项介绍5、实例测试5.1、-i选项5.2、-v选项5.3、-n选项5.4、-c选项5.5、-o选项5.6、-B选项5.7、-A选项5.8、-C选项5.9、-w选项5.10、-E选项5.11、-e选项 二、流编辑器--sed1、简介2、工作原理3、语法格式4、选…

AI换脸原理(6)——人脸分割介绍

一、介绍 人脸分割是计算机视觉和图像处理领域的一项重要任务,它主要涉及到将图像中的人脸区域从背景或其他非人脸区域中分离出来。这一技术具有广泛的应用场景,如人脸识别、图像编辑、虚拟背景替换等。 在计算机视觉(CV)领域,经典的分割技术可以主要划分为三类:语义分…

程序员侠李飞

李飞&#xff0c;这位程序员侠&#xff0c;肩负着消灭黑暗势力的使命。他的代码如同一把利剑&#xff0c;切割着虚拟世界中的恶意程序&#xff0c;保护着数字领域的和平。他的键盘敲击声如同战鼓的轰鸣&#xff0c;警示着那些企图侵入系统的黑客。在代码的世界里&#xff0c;他…

【离散数学】集合上二元关系性质判定的实现(c语言实现)

实验要求 关系矩阵的初始化和打印 我们将关系矩阵存入一个二维数组中&#xff0c;因为集合元素个数不会超过5个所以就用一个5行5列二维数组来表示。 在我们得到了集合元素个数之后我们就可以对数组进行0,1随机赋值 //初始关系矩阵 void init_matrix(int array[][5], int n) {…

后端开发面经系列 -- 地平线C++一面

地平线C一面 公众号&#xff1a;阿Q技术站 来源&#xff1a;https://www.nowcoder.com/discuss/608452700895711232 1、分布式事务是否了解&#xff1f; 分布式事务是指涉及多个数据库或应用之间的事务操作&#xff0c;需要确保这些操作要么全部成功&#xff0c;要么全部失败…

Dynamic Extraction of Subdialogues for Dialogue Emotion Recognition

对话情感识别的子对话动态提取 摘要1. 介绍2 相关工作2.1 对话上下文建模2.2 常识知识 3 方法3.1 问题定义3.2 模型概述3.3 特征提取模块3.4 依赖性建模3.5 交互式子对话提取模块3.6 重要性增强的多头自注意力模块3.7 子对话框主题提取模块3.8. 分类模块 四、实验4.1 数据集4.1…

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择&#xff1a; Open in Terminal 在生成的控制台输入&#xff1a; mvn idea:module 回车便自动生成iml文件啦&#xff01; 双击下主目录就可以看见啦

javax.net.ssl.SSLException: Received fatal alert: protocol_version已经解决

起因&#xff1a; 在帮别人讲解项目时&#xff0c;将项目的tomcat配置完&#xff0c;点击运行后&#xff0c;报错&#xff0c;信息如标题。 解决办法&#xff1a; 在csdn百度问题&#xff0c;得到的方法主要有几个&#xff1a; 1.jdk要配置在1.8以上&#xff1b; 2.数据库地…

【MySQL】ON WHERE 和 ON AND 的区别

1. 查询语句语法规则 “[ ]” 包含的内容可以省略&#xff1b; “{ }” 包含的内容必须存在&#xff1b; DISTINCT&#xff1a; 设定 **distinct** 可以去掉重复记录&#xff1b; AS&#xff1a; 表明或字段名过长时&#xff0c;可以用 **AS** 关键字起别名&#xff0c;也可…

06.配置邮件报警

配置邮件报警 我的授权码&#xff1a;HCHNVOAENURLOACG 1.定义发件人 密码是163邮箱的授权码 2.配置收件人 我就配置收件人是qq邮箱了 3.启动动作 验证邮件发送成功
最新文章