当前 64bit 操作系统下最新版本为 Git-2.41.0.3-64-bit.exe,下载完全后按照正常安装方法安装。
安装完成后,桌面上会显示一个 Git Bash 的软件,双击即可打开 git 命令行。
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install -y git
$ git --version
git version 2.25.1
在 git 命令行中输入:
$ git clone https://github.com/bouffalolab/bouffalo_sdk
仓库有点大,下载需要一些时间。
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 等编译工具。
$ sudo apt-get install -y build-essential cmake ninja-build
安装完成后即可使用。
$ 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.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ ninja --version
1.11.1
$ tar zxvf Xuantie-900-gcc-elf-newlib-mingw-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 命令,或者重新系统。
$ 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)
通过 VSCode 打开已经下载完成的 bouffalo_sdk,并进入我们第一个运行的 example 程序 helloworld,并运行 make 命令开始编译。
$ cd example\helloworld
$ make CHIP=bl616 BOARD=bl616dk
其中:
CHIP:表示当前编译的芯片为bl616。
BOARD:表示当前编译的目标板为bl616dk,可以在根目录 bsp 下获取对应的板子列表。
按住 boot 按钮,重新上电后,芯片即进入 boot 状态,可通过串口烧录程序。
$ make flash CHIP=bl616 COMX=COM20
其中:
CHIP:表示当前编译的芯片为 bl616。
COMX:为当前烧录串口,bl616/bl618 在 boot 模式下,USB 自带 usb-ttl 功能,可用于下载。在 windows 系统下为COM20(根据自己电脑上的串口号填写),Linux 系统下为 /dev/ttyxxx。
打开 bouffalo_sdk\tools\bflb_tools\bouffalo_flash_cube 目录,运行 BLFlashCube.exe 启动 GUI 烧录工具。
烧录完成后,重新上电,即可运行。
____ __ __ _ _ _
| _ \ / _|/ _| | | | | | |
| |_) | ___ _ _| |_| |_ __ _| | ___ | | __ _| |__
| _ < / _ \| | | | _| _/ _` | |/ _ \| |/ _` | '_ \
| |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) |
|____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/
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,可切换到对应目录后按照以上步骤执行。
在 bouffalo_sdk 中默认使用 make 编译,也可以使用 ninja 加快编译速度,只需要替换编译命令即可
$ make ninja CHIP=bl616 BOARD=bl616dk
注:如之前使用 make 已编译过项目,更换为 ninja 编译会报错,需要先执行
make clean
命令。
对 examples/wifi/sta/wifi_udp 项目进行全新编译
系统 | make | ninja |
---|---|---|
Linux | 62秒 | 47秒 |
Windows | 120秒 | 100秒 |