博流RISC-V芯片BL616开发环境搭建

文章目录

    • 1、工具安装
    • 2、代码下载
    • 3、环境变量配置
    • 4、下载交叉编译器
    • 5、编译与下载运行
    • 6、使用ninja编译

本文分别介绍博流RISC-V芯片 BL616 在 Windows和Linux 下开发环境搭建,本文同时适用BL618,BL602,BL702,BL808系列芯片。

1、工具安装

  1. Windows
    我们在日常工作中会经常使用到 git,windows 环境下载 git 安装包安装后即可使用。下载地址:https://git-scm.com/download/win。

当前 64bit 操作系统下最新版本为 Git-2.41.0.3-64-bit.exe,下载完全后按照正常安装方法安装。

安装完成后,桌面上会显示一个 Git Bash 的软件,双击即可打开 git 命令行。

  1. Linux
    Linux 下可直接使用命令行安装
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install -y git
  1. 安装完成后,在命令行中测试是否安装成功
$ git --version
git version 2.25.1

2、代码下载

在 git 命令行中输入:

$ git clone https://github.com/bouffalolab/bouffalo_sdk

仓库有点大,下载需要一些时间。

3、环境变量配置

  • Ninja

Ninja 是一个快速、轻量级的构建系统工具。它使用简单的配置文件来描述构建过程,并且能够高效地执行并行构建。Ninja 的设计目标是提供一种快速的构建工具,尤其适用于大型项目和复杂的构建过程。Ninja 通常与其他构建工具(如 CMake)配合使用。

Ninja 相对于其他构建工具具有以下几个显著的优势:

  • 速度快:Ninja 使用简单的依赖图来确定需要重新构建的目标,因此可以避免不必要的重新构建,提高整体编译速度。

  • 轻量级:Ninja 本身只是一个小型可执行文件,占用资源较少,不会拖慢编译过程。

  • 可扩展:Ninja 支持自定义构建规则和脚本,可以根据项目的需求进行灵活的扩展和定制。

  • CMake

CMake 是一个跨平台的构建工具,用于生成各种不同构建系统(如 Makefile、Ninja 等)所需的构建文件。CMake 通过提供一个简单的跨平台配置语言,使得开发者可以轻松地定义项目的构建规则。CMake 可以自动生成适用于不同操作系统和编译器的构建文件,简化了跨平台项目的构建过程。

CMake用于定义项目的构建规则和依赖关系,并生成相应的构建文件(如 Makefile 或 Ninja文件)。然后,使用 Ninja 等构建工具来实际执行构建过程,编译源代码、链接库文件等。CMake 和 Ninja 的配合使用可以提供灵活、高效的项目构建解决方案,并且支持跨平台开发。

bouffalo_sdk 编译需要 make、cmake、ninja 等编译工具。

  1. Windows
    windows 默认不支持 make 类编译工具,bouffalo_sdk/tools目录下已经带了这些工具的 Windows 版本,Windows 下需要配置对应的路径至系统环境配置,即可正常使用。
  • make:bouffalo_sdk\tools\make
  • cmake:bouffalo_sdk\tools\cmake\bin
  • ninja:bouffalo_sdk\tools\ninja

在这里插入图片描述

  1. Linux
    Linux 下可直接使用命令行安装
$ sudo apt-get install -y build-essential cmake ninja-build

安装完成后即可使用。

  1. 安装、配置完成后,在命令行中测试是否安装成功
$ make -v
GNU Make 4.2.1
Built for x86_64-w64-mingw32
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.$ cmake --version
cmake version 3.25.1CMake suite maintained and supported by Kitware (kitware.com/cmake).$ ninja --version
1.11.1

4、下载交叉编译器

  1. windows
    https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663141789688/Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz
  • 下载解压
    由于 Windows 默认不支持直接解压 .tar.gz 后缀的文件,可以使用上诉下载的 git 命令行工具用命令解压。在 Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz 所在的文件夹下点击右键,选择 Git Bash Here,在弹出的命令行中输入
$ tar zxvf Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz
  • 系统环境变量配置
    在这里插入图片描述
  1. Linux
    https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1663142243961/Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1-20220906.tar.gz

下载后解压至 /opt 目录下

$ sudo tar zxvf Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1-20220906.tar.gz -C /opt

然后将交叉编译器路径添加至编译变量中,使用 zsh 的可以编辑 ~/.zshrc 文件;使用 bash 的可以编辑 ~/.bash 文件。

$ vim ~/.zshrc
# 在空白处加入一行
export PATH=$PATH:/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1/bin

保存后,使用 source 命令让配置生效。

$ source ~/.zshrc

注: source 命令只能在当前终端下使环境变量生效,新开的终端需要再次使用 source 命令,或者重新系统。

  1. 配置完成后,在命令行中测试是否安装成功
$ riscv64-unknown-elf-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=d:/bl618/toolchain_gcc_t-head_windows/bin/../libexec/gcc/riscv64-unknown-elf/10.2.0/lto-wrapper.exe
Target: riscv64-unknown-elf
Configured with: /mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/./source/riscv/riscv-gcc/configure --target=riscv64-unknown-elf --host=i686-w64-mingw32 --with-gmp=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/lib-for-gcc-mingw --with-mpfr=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/lib-for-gcc-mingw --with-mpc=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/lib-for-gcc-mingw --with-libexpat-prefix=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/lib-for-gcc-mingw --with-libmpfr-prefix=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/build-Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/lib-for-gcc-mingw --with-pkgversion='Xuantie-900 elf newlib gcc Toolchain V2.6.1 B-20220906' CXXFLAGS='-g -O2 -DTHEAD_VERSION_NUMBER=2.6.1 ' --enable-libgcctf --prefix=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/Xuantie-900-gcc-elf-newlib-mingw-V2.6.1 --disable-shared --enable-threads=posix --enable-languages=c,c++ --without-system-zlib --enable-tls --with-newlib --with-sysroot=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/build-gcc-riscv64-unknown-elf/Xuantie-900-gcc-elf-newlib-mingw-V2.6.1/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --disable-tm-clone-registry --src=/mnt/ssd/jenkins_iotsw/slave/workspace/Toolchain/build-gnu-riscv/./source/riscv/riscv-gcc --enable-multilib --with-abi=lp64d --with-arch=rv64gcxthead 'CFLAGS_FOR_TARGET=-Os   -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-Os   -mcmodel=medany'
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.0 (Xuantie-900 elf newlib gcc Toolchain V2.6.1 B-20220906)

5、编译与下载运行

  1. 编译

通过 VSCode 打开已经下载完成的 bouffalo_sdk,并进入我们第一个运行的 example 程序 helloworld,并运行 make 命令开始编译。

$ cd example\helloworld 
$ make CHIP=bl616 BOARD=bl616dk

其中:

CHIP:表示当前编译的芯片为bl616。

BOARD:表示当前编译的目标板为bl616dk,可以在根目录 bsp 下获取对应的板子列表。

  1. 烧录

按住 boot 按钮,重新上电后,芯片即进入 boot 状态,可通过串口烧录程序。

  • 命令烧录:
    在命令行中输入以下命令,即可
$ make flash CHIP=bl616 COMX=COM20

其中:

CHIP:表示当前编译的芯片为 bl616。

COMX:为当前烧录串口,bl616/bl618 在 boot 模式下,USB 自带 usb-ttl 功能,可用于下载。在 windows 系统下为COM20(根据自己电脑上的串口号填写),Linux 系统下为 /dev/ttyxxx。

  • GUI工具烧录

打开 bouffalo_sdk\tools\bflb_tools\bouffalo_flash_cube 目录,运行 BLFlashCube.exe 启动 GUI 烧录工具。

  • 点击 Port,选择正确的串口
  • 点击 Browse,选择当前需要烧录的项目下的 ini文件

在这里插入图片描述

  1. 运行

烧录完成后,重新上电,即可运行。

 ____               __  __      _       _       _     |  _ \             / _|/ _|    | |     | |     | |    | |_) | ___  _   _| |_| |_ __ _| | ___ | | __ _| |__  |  _ < / _ \| | | |  _|  _/ _` | |/ _ \| |/ _` | '_ \ | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) ||____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/ Build:22:36:13,Aug 20 2023
Copyright (c) 2022 Bouffalolab team
======== flash cfg ========
flash size 0x00800000
jedec id     0xC84017
mid              0xC8
iomode           0x04
clk delay        0x01
clk invert       0x01
read reg cmd0    0x05
read reg cmd1    0x35
write reg cmd0   0x01
write reg cmd1   0x31
qe write len     0x01
cread support    0x01
cread code       0x20
burst wrap cmd   0x77
===========================
dynamic memory init success, ocram heap size = 409 Kbyte 
sig1:ffffffff
sig2:0000f32f
cgen1:9f7ffffd
[F][MAIN] hello world fatal
[E][MAIN] hello world error
[W][MAIN] hello world warning
[I][MAIN] hello world information
hello world fatal raw
hello world error raw
hello world warning raw
hello world information raw

如需要编译其他功能 example,可切换到对应目录后按照以上步骤执行。

6、使用ninja编译

在 bouffalo_sdk 中默认使用 make 编译,也可以使用 ninja 加快编译速度,只需要替换编译命令即可

$ make ninja CHIP=bl616 BOARD=bl616dk

注:如之前使用 make 已编译过项目,更换为 ninja 编译会报错,需要先执行 make clean 命令。

  • make 和 ninja 编译速度对比

对 examples/wifi/sta/wifi_udp 项目进行全新编译

系统makeninja
Linux62秒47秒
Windows120秒100秒

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商数据接口API:品牌价格监控与数据分析的重要工具

一、引言 随着电子商务的快速发展&#xff0c;传统品牌企业越来越重视在线销售市场。为了在竞争激烈的市场环境中取得成功&#xff0c;企业需要实时掌握市场动态&#xff0c;了解自身产品的销售情况、价格趋势以及竞品信息。为了实现这一目标&#xff0c;各大电商平台&#xf…

每天 26,315 美元罚款?交通安全局要求特斯拉提供 Autopilot数据

根据美国国家公路交通安全管理局&#xff08;NHTSA&#xff09;最近的特别命令&#xff0c;特斯拉公司被要求提供关于其自动驾驶功能Autopilot的相关信息。这一命令是继NHTSA于2021年8月启动初步评估后&#xff0c;在2022年6月升级为正式调查的一部分&#xff0c;NHTSA近期对特…

自学设计模式(类图、设计原则、单例模式 - 饿汉/懒汉)

设计模式需要用到面向对象的三大特性——封装、继承、多态&#xff08;同名函数具有不同的状态&#xff09; UML类图 eg.—— 描述类之间的关系&#xff08;设计程序之间画类图&#xff09; : public; #: protected; -: private; 下划线: static 属性名:类型&#xff08;默认值…

NPM 管理组织包

目录 1、关于组织范围和包 1.1 管理无作用域的包 2、使用组织设置配置npm客户端 2.1 配置您的npm客户端以使用您组织的范围 为所有新包设置组织范围 为单个包设置组织范围 2.2 将默认包可见性更改为public 将单个包的包可见性设置为public 将所有包的包可见性设置为pu…

C++新经典 | C语言

目录 一、基础之查漏补缺 1.float精度问题 2.字符型数据 3.变量初值问题 4.赋值&初始化 5.头文件之<> VS " " 6.逻辑运算 7.数组 7.1 二维数组初始化 7.2 字符数组 8.字符串处理函数 8.1 strcat 8.2 strcpy 8.3 strcmp 8.4 strlen 9.函数 …

深度思考计算机网络面经之二

HTTP2和1.1的区别 HTTP 2.0 和 HTTP 1.1 相比有哪些优势呢&#xff1f; HTTP1.1的队头阻塞问题 服务器必须按照请求接收的顺序来响应&#xff0c;为什么 是因为传统的1.1中没有特定字段来区分一个请求属于哪个&#xff0c;只能按照请求的物理顺序返回&#xff0c; HTTP2解…

WPF 查看绑定错误——Snoop 的基本使用

关于 可以通过 Snoop 查看 WPF 程序的 Visual Tree&#xff0c;更多介绍请看 snoopwpf 快速开始 一、下载 snoopwpf.msi 安装后打开&#xff0c;选择自己的程序&#xff0c;点击 snoop&#xff08;望远镜&#xff09; 二、筛选 点击左侧下拉列表&#xff0c;选择 Show onl…

Mysql的information_schema数据库

information_schema是信息数据库&#xff0c;其中保存着关于mysql服务器所维护的所有其他数据库的信息。在information_schema中&#xff0c;有数个只读表。它们实际上是视图&#xff0c;而不是基本表&#xff0c;因此&#xff0c;你将无法看到与之相关的任何文件&#xff0c;也…

docker desktop安装es 并连接elasticsearch-head:5

首先要保证docker安装成功&#xff0c;打开cmd&#xff0c;输入docker -v&#xff0c;出现如下界面说明安装成功了 下面开始安装es 第一步&#xff1a;拉取es镜像 docker pull elasticsearch:7.6.2第二步&#xff1a;运行容器 docker run -d --namees7 --restartalways -p 9…

【C++】使用 nlohmann 解析 json 文件

引言 nlohman json GitHub - nlohmann/json: JSON for Modern C 是一个为现代C&#xff08;C11&#xff09;设计的JSON解析库&#xff0c;主要特点是 易于集成&#xff0c;仅需一个头文件&#xff0c;无需安装依赖 易于使用&#xff0c;可以和STL无缝对接&#xff0c;使用体验…

Maven入门教程(二):idea/Eclipse使用Maven

视频教程&#xff1a;Maven保姆级教程 Maven入门教程(一)&#xff1a;安装Maven环境 Maven入门教程(二)&#xff1a;idea/Eclipse使用Maven Maven入门教程(三)&#xff1a;Maven语法 Maven入门教程(四)&#xff1a;Nexus私服 Maven入门教程(五)&#xff1a;自定义脚手架 4.开发…

forlium 笔记 Map

用于创建交互式地图 1 主要参数 1.1. location 地图位置 地图的经纬度 import foliumm folium.Map(location[31.186358, 121.510256],zoom_start15)m 1.2 tiles 内置样式 默认是OpenStreetMap 1.2.1 Stamen Terrain 它强调了地形特征&#xff0c;如山脉、河流和道路 m …

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization Segment Any Anomaly without Training via Hybrid Prompt Regularization PDF: https://arxiv.org/pdf/2305.10724.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch Py…

57. 插入区间(C++题解)

57. 插入区间 插入区间 给你一个无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 示例 1&#xff1a; 输入&#x…

SQL实际开发学习

注意&#xff01;&#xff01;&#xff01; select (很长的查询做表) 之后要设置别名不要加引号&#xff01; 错误select table.column1 from (xxxxxx) "table1" 正确select table.column1 from (xxxxx) table1 group by&#xff0c;distinct 如何去重&#xff1f; …

Ubuntu 23.10 将首次推出基于 Flutter 的新 Ubuntu 商店

导读Ubuntu 正在升级其软件商店以提供顺滑的体验&#xff01; 随着不断发展&#xff0c;Canonical 似乎全力以赴&#xff0c;将基于 Flutter 的元素整合到 Ubuntu 中。 在前段时间 Ubuntu 23.04 发布后&#xff0c;我们见到了基于 Flutter 的安装程序 &#xff0c;现在&#x…

[element-ui] el-tree全部展开与收回

shrinkTreeNode () {// 改变一个全局变量this.treeStatus !this.treeStatus;// 改变每个节点的状态this.changeTreeNodeStatus(this.$refs.attrList.store.root); },// 改变节点的状态 changeTreeNodeStatus (node) {node.expanded this.treeStatus;for (let i 0; i < no…

vim命令大全,非常详细,强烈建议收藏!

1、前言 Vim是一款常用的文本编辑器&#xff0c;具有强大的功能和高度的可定制性。在本文中&#xff0c;我们将详细介绍Vim的常用命令&#xff0c;并提供相关的示例。如果您是初学者或已经熟练使用Vim&#xff0c;这篇文章都能为您提供帮助。 2、基本命令 以下是一些基本的Vi…

hyperf 十四 国际化

一 安装 composer require hyperf/translation:v2.2.33 二 配置 1、设置语言文件 文件结构&#xff1a; /storage/languages/en/messages.php /storage/languages/zh_CH/messages.php // storage/languages/en/messages.php return [welcome > Welcome to our applicat…

使用awvs进行web安全扫描

1、安装 docker pull secfa/docker-awvs docker run -it -d -name awvs -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs2、账号密码 # https://ip:13443/ # 用户名:adminadmin.com # 密码:Admin1233、使用 ps:需要征得甲方的同意