Skip to content

概述

在 Linux 上开发 Ai-WB2 是官方最推荐的方式:一条 apt 命令装依赖、一条 git clone 拉 SDK、一条 make 编译,全程无需图形界面。本教程按官方 README 的完整流程(安装依赖 → 克隆 SDK → 工具链授权 → 编译 → 烧录),带你用官方 helloworld 示例跑通第一个程序。

用大白话讲:环境搭建就像「装修厨房」——先备好锅碗瓢盆(依赖软件),再把菜谱(SDK)搬到家里,最后开火试做一道菜(编译并烧录 helloworld)。本教程做完,你的电脑就具备了完整的开发能力,后面的教程都是「照着菜谱做菜」。

本教程基于安信可官方 SDKAi-Thinker-Open/Ai-Thinker-WB2,版本 release_bl_iot_sdk_1.6.40)的官方 README(仓库根目录 README.md)编写,安装流程与官方文档完全一致。

🎯本页目标装好 Linux 开发环境,编译并烧录官方 helloworld 示例,在串口看到 `Hello World.` 输出。
🧰前置条件① Ubuntu/Debian 等 Linux 系统(本教程以 Ubuntu 为例)② Ai-WB2 开发板一块(Type-C 数据线)③ 能访问外网。
🔗相关章节环境概念见 [SDK 简介](./sdk_intro);Windows 用户见 [Windows 平台](./get-start_for_Windows);装好后从 [GPIO输出(点亮LED)](../basic/gpio_led) 开始。

安装依赖软件

打开终端(快捷键 Ctrl + Alt + T),执行官方提供的一行安装命令:

sudo apt install build-essential python3 python3-pip git screen

说明:sudo 表示以管理员权限执行(会提示输入你的开机密码);apt install 是 Ubuntu 的软件安装命令;这里一次装齐 5 个软件——build-essential(C 编译器 gcc/make 等编译工具)、python3(构建脚本依赖)、python3-pip(Python 包管理)、git(拉取代码)、screen(串口查看日志用)。

安装完成后验证是否成功:

make --version && git --version

看到类似 GNU Make 4.xgit version 2.x 的输出即安装成功。

⚠️ 如果 sudo apt install 非常慢或报错,通常是软件源在国外导致,先更换国内软件源(清华/阿里源)再重试。可参考网上「Ubuntu 更换国内源」教程,或直接改用国内 Gitee 镜像(见下一步)。

克隆 SDK 到本地

在终端执行(官方 README 原文,--recursive 必须带上,用于拉取子模块):

git clone --recursive https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2.git

说明:git clone 是「下载仓库」命令,--recursive 表示连同子模块一起下载。国内网络下载 GitHub 慢或失败时,改用官方提供的 Gitee(码云)镜像,内容完全一致:

git clone --recursive https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2.git

下载完成后(进度条走满、回到命令提示符),确认目录存在:

ls ~/Ai-Thinker-WB2

能看到 applicationscomponentstoolchain 等目录即克隆成功。

💡 默认克隆到当前用户主目录(~/home/你的用户名/),后续所有教程的 cd ~/Ai-Thinker-WB2/applications/... 都基于这个位置。想换目录可以自己改,但建议保持默认。

给编译工具链授权

工具链刚下载下来还没有「可执行」权限,需要执行官方提供的授权脚本。在 SDK 根目录执行:

cd ~/Ai-Thinker-WB2/toolchain/riscv/Linux/
. chmod755.sh

说明:cd 是「进入目录」;. chmod755.sh 是「执行当前目录下的授权脚本」(开头的 .source 的简写,表示在本终端里执行),它会把工具链里所有文件加上可执行权限。执行过程没有任何输出是正常的,直接进入下一步。

验证工具链可用:

./riscv64-unknown-elf-gcc --version

说明:此命令直接运行工具链的编译器并打印版本,能输出版本号就说明授权成功。若报 Permission denied(没有权限),说明上一步没有执行成功,回到上一步重试。

编译官方 helloworld 示例

进入官方入门示例工程,执行编译:

cd ~/Ai-Thinker-WB2/applications/get-started/helloworld
make -j8

说明:make 是「编译」命令(把 C 代码变成开发板能运行的固件),-j8 表示 8 个任务并行编译更快。必须在 helloworld 工程目录内执行(刚才 cd 已进入)。首次编译需要几分钟(要编译整个 SDK 组件),之后增量编译很快。

编译成功后会生成固件 build_out/helloworld.bin,并显示:

✓ Built target helloworld

看到这行即编译成功。

⚠️ 若报 ./riscv64-unknown-elf-gcc: No such file or directoryPermission denied,说明步骤③的授权没做对,回到步骤③重新执行 . chmod755.sh

烧录固件到开发板

开发板用 Type-C 数据线连接电脑,先确认串口设备号:

ls /dev/ttyUSB*

说明:ls 是「列出」命令,/dev/ttyUSB* 是串口设备路径的统称。能看到类似 /dev/ttyUSB0 的输出说明开发板已被识别;什么都看不到说明数据线只能充电不能传数据、或需要装 USB 转串口驱动(Linux 一般免驱,多为线材问题,换线重试)。

然后执行烧录:

make flash p=/dev/ttyUSB0 b=921600

说明:p= 是串口设备号(以你上一步 ls 看到的为准,不一定都是 ttyUSB0);b= 是烧录波特率(传输速度),官方固定 921600

看到 Waiting for download... 之类的提示时,长按开发板上的 EN 键(RST 复位键)约 1 秒后松开,开发板进入下载模式,进度条开始走动。

⏳ 进度条走到 100% 并提示烧录完成即成功。若一直停在等待状态,多半是 EN 键没按对,重按一次试试。

运行验证(串口看日志)

烧录完成后开发板自动重启运行程序。用 screen 打开串口观察输出(官方安装的 screen 就是干这个的):

screen /dev/ttyUSB0 921600

说明:screen 是串口查看工具,/dev/ttyUSB0 换成你的串口号,921600 是波特率——必须和烧录时一致,否则看到的是乱码。

屏幕持续打印启动日志,重点看这几行:

Hello World.
Restarting in 10 seconds...
Restarting in 9 seconds...

看到 Hello World. 和倒计时,说明开发板已经跑起来了——你的第一个程序成功!

💡 官方示例会倒计时 10 秒后自动重启开发板(相当于测试软复位),这是正常的。看完日志按 Ctrl + A 再按 K 退出 screen(提示时按 y 确认)。

💡 进阶验证:日志开头还有 Build Version: release_bl_iot_sdk_1.6.38 之类的一行,那是固件编译时的 SDK 版本号,不同批次可能不同,不影响使用。

代码执行流程

例程从启动到运行的完整流程如下(图中的循环箭头表示反复执行):


本文用到的命令汇总

sudo apt install(软件包列表)

以管理员权限安装 Ubuntu 软件(本教程用于安装编译依赖:build-essential/python3/git/screen)。

参数

  • 软件包列表:空格分隔的软件名,如 build-essential python3 git screen

返回值:安装完成回到提示符即成功;中途报错(网络问题)换源后重试

git clone --recursive(仓库地址)

下载 SDK 仓库及全部子模块到当前目录(国内网络推荐 Gitee 镜像地址)。

参数

  • --recursive:递归拉取子模块,必加(否则部分组件是空的)
  • 仓库地址https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2.git 或 Gitee 镜像

返回值:进度条走满回到提示符即成功

. chmod755.sh

执行工具链授权脚本,给编译器加可执行权限(Linux 下下载的文件默认没有执行权限)。

参数

  • (在 ~/Ai-Thinker-WB2/toolchain/riscv/Linux/ 目录内执行)

返回值:无输出即正常;Permission denied 说明没执行成功

make -j8

在示例工程目录内编译固件(-j8 并行编译更快)。

参数

  • -j8:并行核数,可改成 -j4/-j16

返回值✓ Built target xxx 即成功;报错按提示修复后重试

make flash(p=串口设备 b=波特率)

把固件烧录进开发板(烧录时需按开发板 EN 键进入下载模式)。

参数

  • p=:串口设备号,如 /dev/ttyUSB0(先用 ls /dev/ttyUSB* 确认)
  • b=:波特率,官方固定 921600

返回值:进度条 100% 即成功;一直等待说明没进下载模式

screen(串口设备 波特率)

打开串口查看开发板运行日志。

参数

  • 串口设备:如 /dev/ttyUSB0
  • 波特率:与烧录一致 921600

返回值:实时滚动输出日志;Ctrl + AK 退出


完整代码(参考:helloworld/main.c)

以下为官方 helloworld 示例源码,与官方(applications/get-started/helloworld/helloworld/main.c)完全一致。它打印 Hello World. 后倒计时 10 秒自动重启开发板,是验证环境是否装好的「体检程序」:

📜 点击展开 helloworld/main.c 完整代码
c
/*
 * @Author: xuhongv@yeah.net xuhongv@yeah.net
 * @Date: 2022-10-03 15:02:19
 * @LastEditors: xuhongv@yeah.net xuhongv@yeah.net
 * @LastEditTime: 2022-10-08 14:55:16
 * @FilePath: \bl_iot_sdk_for_aithinker\applications\get-started\helloworld\helloworld\main.c
 * @Description: Hello world
 */
#include <stdio.h>
#include <string.h>
#include <FreeRTOS.h>
#include <task.h>
#include <blog.h>
#include "bl_sys.h"

void main(void)
{

    printf("Hello World.\r\n");
    for (int i = 10; i >= 0; i--)
    {
        printf("Restarting in %d seconds...\r\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\r\n");

    bl_sys_reset_por();
}

常见问题与踩坑提示

⚠️ sudo apt install 很慢或失败
原因:默认软件源在国外,国内网络访问慢
解决:先更换国内软件源(清华/阿里镜像源,网上搜「Ubuntu 换源」有图文教程),换完再重新执行安装命令

⚠️ git clone 卡住或报错
原因:GitHub 在国内网络不稳定,大仓库(SDK 含子模块有几百 MB)容易断
解决:改用 Gitee 镜像 git clone --recursive https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2.git;断线后重新执行即可断点续传

⚠️ 编译报 riscv64-unknown-elf-gcc: No such file or directory 或 Permission denied
原因:工具链没授权(步骤③没做或做错),编译器没有可执行权限
解决:回到 SDK 根目录重新执行 cd toolchain/riscv/Linux/. chmod755.sh,再验证 ./riscv64-unknown-elf-gcc --version 能输出版本

⚠️ make 报 make: command not found
原因:步骤①的 build-essential 没装上
解决:执行 sudo apt install build-essential 补装,再验证 make --version

⚠️ ls /dev/ttyUSB 什么都看不到*
原因:数据线只能充电不能传数据、或开发板没插好
解决:换一根能传数据的 Type-C 数据线;拔插后重试;还不行用 dmesg | tail 看系统日志有没有 USB 识别记录

⚠️ 烧录一直 Waiting for download / 进度条不动
原因:没有按 EN 键进入下载模式,或串口号写错
解决:看到等待提示时长按 EN(RST)键约 1 秒松开;确认 p= 的串口号和 ls /dev/ttyUSB* 看到的一致

⚠️ 串口打开报 Permission denied(权限不足)
原因:当前用户不在 dialout 用户组,无权访问串口
解决:执行 sudo usermod -aG dialout 你的用户名,然后注销重新登录(或重启)使配置生效

运行自检

烧录后在串口看到 Hello World. 以及 Restarting in 10 seconds... 倒计时输出,即 Linux 环境搭建验证通过,可以开始 GPIO输出(点亮LED) 了。

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23