1. 搭建蓝牙开发环境

搭建蓝牙开发环境 学习卡片

任务说明

本案例目标为搭建一套可实际编译并运行蓝牙示例的本地开发环境,并完成可用性验证。考虑到不同平台工具链差异较大,这里以 Ubuntu 22.04 LTS + BlueZ + Zephyr RTOS 为主线(这也是当前嵌入式蓝牙开发最常用的组合),Android SDK 部分仅给出最小安装与验证命令。完成本案例后,你将拥有一个能编译 Zephyr 蓝牙示例、并能通过 BlueZ 与真实蓝牙适配器交互的环境。

1. 系统依赖与基础工具

首先更新系统并安装编译 Zephyr 所需的依赖包:

sudo apt update
sudo apt install -y git cmake ninja-build gperf \
  ccache dfu-util device-tree-compiler wget \
  python3-dev python3-pip python3-setuptools python3-tk \
  xz-utils file make gcc gcc-multilib g++-multilib \
  libsdl2-dev libmagic1

2. 安装 Zephyr SDK 与工具链

Zephyr 使用自定义的 SDK(包含交叉编译器)。安装 west 工具并获取 Zephyr 源码:

# 安装 west
pip3 install --user west
echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc

# 初始化 Zephyr 工作目录(以 ~/zephyrproject 为例)
mkdir ~/zephyrproject && cd ~/zephyrproject
west init
west update

下载并安装 Zephyr SDK(以 v0.16.5-1 为例,其他版本请参考官方文档):

cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.5-1/zephyr-sdk-0.16.5-1_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.5-1_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.5-1
./setup.sh -t all -h ~/zephyr-sdk-0.16.5-1
sudo cp ~/zephyr-sdk-0.16.5-1/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules

在 ~/.bashrc 中追加环境变量:

export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.16.5-1
export ZEPHYR_BASE=~/zephyrproject/zephyr
source ~/zephyrproject/zephyr/zephyr-env.sh

3. 安装与配置 BlueZ

Ubuntu 自带 BlueZ,但版本可能较旧。为获得完整 BT 5.4 支持,建议从源码编译:

sudo apt install -y libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
cd ~
git clone https://github.com/bluez/bluez.git
cd bluez
./bootstrap-configure --disable-android --disable-mesh
make -j$(nproc)
sudo make install

启动蓝牙服务并验证:

sudo systemctl unmask bluetooth
sudo systemctl enable bluetooth
sudo systemctl restart bluetooth
bluetoothd --version   # 预期输出:5.xx(或更高)

4. 最小 Android SDK 安装(可选)

若需进行 Android 蓝牙开发,仅安装命令行工具即可:

cd ~
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip -d android-sdk
cd android-sdk/cmdline-tools
mv tools latest
export ANDROID_HOME=~/android-sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
sdkmanager --install "platform-tools" "platforms;android-34"

5. 环境验证

完成以上步骤后,执行以下验证流程:

# 验证 Zephyr 编译环境
cd ~/zephyrproject/zephyr
west build -b qemu_cortex_m3 samples/bluetooth/beacon -d /tmp/beacon_build

若编译成功,/tmp/beacon_build/zephyr/zephyr.elf 文件将存在。接着验证 BlueZ 能否识别蓝牙适配器:

hciconfig -a   # 应列出 hci0 及适配器信息

最后确认 Android SDK 可用:

adb --version   # 预期输出 Android Debug Bridge 版本信息

6. 判定标准

满足以下条件即视为环境搭建成功:

  1. west build 命令以 exit code 0 结束,且生成 zephyr.elf 文件;
  2. hciconfig -a 能列出至少一个蓝牙接口(hci0);
  3. adb --version 能正常输出版本号。
蓝牙开发环境验证拓扑 Ubuntu 22.04 主机 Zephyr RTOS 工具链 west + SDK 0.16.5 CMake + Ninja 交叉编译器 arm-zephyr → 编译 samples/bluetooth/beacon BlueZ 5.x bluetoothd 服务 hciconfig / bluetoothctl 内核蓝牙子系统 → 管理 hci0 接口 Android SDK platform-tools adb 调试桥 API 34 平台 → 连接 Android 设备 硬件/目标层 QEMU 模拟 Cortex-M3 运行 beacon 示例固件 USB 蓝牙适配器 hci0 接口 Android 手机/开发板 通过 USB 连接 验证观测点 ① west build 编译成功 → 生成 zephyr.elf(exit code 0) ② hciconfig -a 列出 hci0 → BlueZ 与内核蓝牙正常 ③ adb --version 输出版本 → Android SDK 可用

7. 常见问题排查

若 west build 报错找不到 SDK,请确认 ZEPHYR_SDK_INSTALL_DIR 路径正确且已执行 source ~/.bashrc。若 hciconfig 无输出,检查蓝牙适配器是否被识别(lsusb 查看 USB 设备)以及内核模块是否加载(sudo modprobe btusb)。Android SDK 若提示 license 未接受,执行 sdkmanager --licenses 并全部接受即可。