原文链接:
https://medium.com/@ly.lee/install-meshctl-on-raspberry-pi-51aa1e2579e6
译者注:meshctl是运行在linux平台上的蓝牙Mesh配置管理工具软件。
1. 安装BlueZ
meshctl属于开源蓝牙协议栈BlueZ软件套件的一部分(BlueZ无法在Windows及macOS上安装,所以我们使用树莓派。译者注:实际上BlueZ是Linux官方蓝牙协议栈)。BlueZ在树莓派上应该属于预安装软件,但是默认的安装是缺少meshctl工具的。这篇文章讲解如何安装带有meshctl选项的BlueZ。
开始前,请先参阅蓝牙技术联盟(SIG)的官方指南:
“Developer Study Guide: Deploying BlueZ v5.50 on Raspberry Pi3, Part1 — Deployment”
跟着如下章节中的指示做:
“0. Prerequisite”
“1. Install BlueZ v5.50”
在 “2. Rebuilding the kernel for BlueZ v5.50” 这一章节前停止。
2. 下载树莓派内核源码
我们需要重新编译构建树莓派的内核。为啥呢?因为meshctl需要AEAD-AES_CCM加密套件,这玩意会以一个安全服务的形式运行在内核中。这一步需要超过一小时的时间去完成。
在命令提示符里输入如下命令:
cd ~
sudo apt-get install -y git bc bison flex libssl-dev
uname -a
你应该能看到形似如下的命令输出:
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
看到那个4.19了不?这个很重要——这是你树莓派内核的版本号。我们需要下载对应我们内核版本的内核源代码,否则我们的树莓派在重新构建内核后很可能启动不了。
输入下面的命令:
git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux
注意:将上述命令中的4.19替换成你自己树莓派内核的版本号。
3. 初始化树莓派内核配置
首先,我们将新的树莓派内核初始化为默认设置。
如果你的树莓派是1,zero,zero W,或者Compute Module,输入:
cd linux
KERNEL=kernel
make bcmrpi_defconfig
如果你的树莓派是2,3,3+,或者Compute Module 3,输入:
cd linux
KERNEL=kernel7
make bcm2709_defconfig
如果你的树莓派是4,输入:
cd linux
KERNEL=kernel7l
make bcm2711_defconfig
4. 配置树莓派内核
现在,让我们配置内核并开启meshctl所需要的AEAD-AES_CCM加密套件。输入:
make menuconfig
使用键盘上的方向键将光标移动到Cryptographic API选项:
按回车。
使用键盘上的方向键,在如下模块选项上移动光标,按 S 键进行选择:
Hash Modes → CMAC support
Random Number Generation → User-space interface for hash algorithms
Random Number Generation → User-space interface for symmetric key cipher algorithms
当某个模块被选中的时候,模块前面的<>中会变成 *。
多次点击Esc键直到看到 Do you wish to save your new configuration… 的提示:
选择YES并按下回车,回到命令提示符界面。
5. 构建树莓派内核
在正式构建内核前,我们先把老的内核备份到 /OLDboot 以防新内核启动失败。输入:
sudo cp -r /boot /OLDboot
现在我们正式编译、安装新的内核。输入:
make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo sync
sudo reboot
这个过程估计得要一个多小时才能完成。等上述流程都完成后,我们的树莓派就会以新的内核启动。
6. 测试meshctl
重启后,打开命令行并输入:
meshctl
按下回车键,应该会出现[meshctl]#提示符。
如果你没看到任何错误信息,那么恭喜你成功安装了meshctl!
输入下面这个命令退出meshctl:
exit
注意:请记住永远使用exit命令来正确地退出meshctl,否则的话蓝牙驱动会被锁定,导致你最终不得不重启树莓派来解决这个问题。
如果你看到的是下面这个信息:
Failed to parse provisioning database file prov_db.json
这表明你的内核并没有正确地安装AEAD-AES_CCM套件。仔细阅读,并按本文前面的章节步骤重新做一遍。
参考文献
如果你在配置及构建树莓派内核的过程中遇到任何问题,请参阅官方指导文档:
“Kernel Building”
“Configuring The Kernel”
如果你在配置管理蓝牙Mesh的过程中遇到任何问题,请参阅蓝牙技术联盟的官方指导文档:
“How to Deploy BlueZ v5.50 on Raspberry Pi 3 and Use It, Part 2 — Provisioning”
这里有一个很棒的关于在Zephyr嵌入式OS上的搞蓝牙Mesh的系列文章:
“Patient Monitoring System using 96Boards”