zephyr_polling rtthread移植平台说明

本文详细介绍了如何在RT-Thread操作系统上移植和配置蓝牙功能,包括在Ubuntu平台上使用QEMU模拟蓝牙,配置NimBLE软件包,以及通过btproxy和串口方式实现蓝牙通信。此外,还提到了在ArtPi硬件平台下与AP6212蓝牙的集成方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rtthread移植平台说明

rtthread_uart

rtthread平台下通用uart接口实现。

Ubuntu平台下利用qemu实现蓝牙功能

搭建 RT-Thread QEMU 环境

参考 文档:在 Ubuntu 平台开发 RT-Thread 完成 RT-Thread qemu 环境的搭建。目前我们使用qemu-vexpress-a9的bsp环境。

配置 NimBLE 软件包

1、在 qemu-vexpress-a9 BSP 根目录输入:

scons --menuconfig

2、进入 RT-Thread online packages → IoT - internet of things 目录即可看到 zephyr_polling软件包,勾选软件包。

image-20230324162232170

3、配置 zephyr_polling项目的参数,如下述配置chipset选common,example选beacon,platform选rtthread_uart。

image-20230324162304667

4、选择HCI接口参数

这里 The uart for HCI Transport 默认输入 “uart1” 就好

image-20230324162430691

保存后退出。

下载软件包

使用 scons --menuconfig 命令后会安装及初始化 Env 工具,并在 home 目录下面生成 “.env” 文件夹,此文件夹为隐藏文件夹,切换到 home 目录,使用 ls 命令可查看所有目录和文件。

$ ls ~/.env
env.sh  local_pkgs  packages  tools

运行 env.sh 会配置好环境变量,让我们可以使用 pkgs 命令来更新软件包,执行

$ source ~/.env/env.sh

使用 pkgs --update 命令下载 NimBLE 软件包到 BSP 目录下的 packages 文件夹里。

$ pkgs --update
btproxy方式

本节是参考:QEMU BLE (rt-thread.org)

如果你手头有一个USB蓝牙dongle。只要Ubuntu能识别的都可以使用。

环境介绍

本次搭建环境所使用的资源和版本为:

  • Ubuntu 18.04
  • Bluez - v5.55
  • ell - v0.35
  • qemu - v2.11.1
  • RT-Thread - v5.0.0
  • 一个蓝牙适配器
环境搭建

环境搭建主要分为两部分,

  1. bluez 的编译
  2. Ubuntu里 RT-Thread QEMU 环境的搭建

首先需要更新源:

sudo apt update
sudo apt upgrade

安装所需要的依赖:

sudo apt install git automake libtool libelf-dev elfutils libdw-dev libjson-c-dev libical-dev libreadline-dev libglib2.0-dev libdbus-1-dev libudev-dev libncurses5-dev python3 python3-pip qemu
bluez 编译安装

bluez 里有许多实用的工具,例如 btproxy,但是 Ubuntu 自带的 bluez 并未将这些工具都编译出来,因此需要我们重新编译 bluez。

在相同目录下克隆获取 0.35 版本的 ell,5.55 版本的 bluez 。

git clone -b 0.35 git://git.kernel.org/pub/scm/libs/ell/ell.git
git clone -b 5.55 https://github.com/bluez/bluez.git

最终 ell 和 bluez 应该在同一个目录级别下,目录结构为:

.
    |--- ell
    |    |--- ell
    |    |--- unit
    |--- bluez
    |    |--- src
    |    |--- tools

然后输入下述命令编译 bluez:

cd bluez
./bootstrap-configure --disable-android --disable-midi --disable-mesh
make

注意,这个时候会报错,但是不用管,tools目录下已经有所需的btproxy

image-20230324161225919

image-20230324161324577

QEMU 运行 BLE

qemu 运行 BLE 时,本质上还是在和物理机的蓝牙设备通信,下面介绍如何在 qemu 环境中使用蓝牙设备。

首先输入 hciconfig 查看本机的蓝牙设备,

image-20230324161621296

我这里是 hci0 蓝牙设备,需要保证上述红框框住的部分为 DOWN,也就是该蓝牙设备未打开,否则需要输入下述命令关闭该蓝牙设备:

sudo hciconfig hci0 down

然后进入 bluez 的 tools 目录,输入命令为该蓝牙设备创建一个代理(proxy)。

sudo ./btproxy -u -i 0

其中 -u 代表使用 Unix Server,默认路径为 /tmp/bt-server-bredr-i 0 指使用 hci0 蓝牙设备,如果是 hci1 蓝牙设备,则需更改为 -i 1 。运行成功后会有下述显示:

image-20230324161708541

然后在 RT-Thread 的 bsp/qemu-vexpress-a9 目录下编译运行:

scons
qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -nographic -serial mon:stdio -serial unix:/tmp/bt-server-bredr

即可成功在 qemu 环境里与蓝牙卡片交互,下面稍微介绍下原理和注意事项。

qemu 命令参数里与串口相关的有 -serial mon:stdio -serial unix:/tmp/bt-server-bredr-serial 参数的介绍为:

-serial dev redirect the serial port to char device ‘dev’

这个参数将 qemu 程序的串口重定向到物理机的设备文件,

第一个 -serial mon:stdio 将 qemu 里的 uart0 重定向到了物理机的 stdio 设备文件,而且在 qemu 程序里 uart0 用作 msh 命令行工具,类似 stdio,因此我们可以在物理机上看到 qemu 程序的打印数据,也可以输入命令。

第二个 -serial unix:/tmp/bt-server-bredr 是将 qemu 里的 uart1 重定向到物理机的 /tmp/bt-server-bredr 文件,而这个文件又是 hci0 设备的代理,因此从 qemu 程序的角度来看,就是使用 H4 协议,通过 uart1 去访问蓝牙设备。uart1 的波特率使用 115200 即可(未找到说明,但一般都是这样使用)。

注意:上述两个 -serial 的顺序不能颠倒,否则 qemu 程序无法正常运行。

若成功运行,则在 btproxy 界面会有如下显示:

image-20230324161832389

若蓝牙设备未关闭,则会显示设备或资源忙:

image-20230324162718229

建议每次运行前都关闭一次蓝牙设备:sudo hciconfig hci0 down

测试运行

而后输入zephyr_polling_init既可以运行demo工程了。可以看到蓝牙地址是11:22:33:44:55:66

image-20230324162928956

用nordic的app搜索,就可以看到发送的beacon数据包了。

ca9bcd0d5bf31ddaed5fcc9ef7f9053

串口方式

本节是参考:RT-Thread-QEMU下运行NimBLERT-Thread问答社区 - RT-Thread

如果你手头就是一个uart设备,系统中还没驱动的情况下。

环境介绍

本次搭建环境所使用的资源和版本为:

  • Ubuntu 18.04
  • qemu - v2.11.1
  • RT-Thread - v5.0.0
  • 一个蓝牙UART模组
环境搭建

连接蓝牙 Control 芯片(使用 pts_dongle 进行演示,将其直接连接电脑)。

需要注意,下面的**/dev/ttyACM0**需要根据具体情况调整,看你实际的串口是哪个。Linux串口是默认普通用户没有读写权限的,每次开机后对串口读写都要附加权限。

sudo chmod 666 /dev/ttyACM0
qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd sd.bin -serial mon:stdio -serial /dev/ttyACM0
测试运行

而后输入zephyr_polling_init既可以运行demo工程了。可以看到蓝牙地址是c0:07:e8:e1:2d:e8

1679647130430

用nordic的app搜索,就可以看到发送的beacon数据包了。

98692c1fb1c5df8fc5bb681531b37d7

rtthread_artpi

rtthread在ArtPi硬件平台下和AP6212蓝牙实现。

RT-Thread Studio下利用ArtPi实现蓝牙功能

搭建 RT-Thread Studio 环境

参考完成快速开始 (rt-thread.org) RT-Thread studio 环境的搭建。

本文是参考: RT-Thread-如何在 ART-Pi 的 Studio 工程中使用 NimBLE 蓝牙协议栈RT-Thread问答社区 - RT-Thread来实现的。

新建 ART-Pi 示例工程

按照下图新建一个 art_pi_blink_led 示例工程,等待创建完成。

image-20230324165633967

配置使用 zephyr_polling

进入工程 RT-Thread Settings 界面, 进入到软件包页面,找到zephyr_polling,并按照下面的参数配置好。

image-20230324165839041

配置完成后保存,studio 将自动更新下载软件包。

配置相关串口

在 RT-Thread Settings 下硬件选项页中使能对应串口,如下图,按照实际需求开启。AP6212内部接的是UART3,所以UART3必须打开。

image-20230324170135031

串口接收buffer记得调整一下。

image-20230324170041183

保存退出。

在 borad.h 头文件中添加对应串口的引脚定义。

image-20230324170356709

编译运行

直接烧录进去即可,这里直接使用 ART-Pi 板载的 AP6216 芯片。而后输入zephyr_polling_init指令,启动beacon程序。

image-20230324170549579

使用 nRF Connect 手机 APP 即可成功观察到蓝牙设备地址为70:4a:0e:53:16:bf的beacon设备。

ea1a5a883262416ad58fb6ad9c5a5cb

### Zephyr 和 RT-Thread 实时操作系统特点 #### Zephyr 操作系统的特性 Zephyr 是一款由 Linux 基金会支持的开源实时操作系统,专为资源受限设备设计。其主要特点是高度可配置性、安全性以及对多种架构的支持。Zephyr 支持超过 30 种不同的 CPU 架构,并提供丰富的网络协议栈和安全机制[^4]。 ```c #include <zephyr.h> void main(void) { printk("Hello, Zephyr!\n"); } ``` #### RT-Thread 的特性 RT-Thread 则是一款来自中国的开源实时操作系统,具有高模块化的设计理念。除了基本的内核功能外,还提供了图形库、文件系统、网络协议栈等一系列中间件组件。这种全面的功能使得 RT-Thread 不仅适用于小型嵌入式项目,也能满足复杂工业控制系统的需求[^1]。 ```c #include "rtthread.h" int main() { rt_kprintf("Hello, RT-Thread!\n"); return 0; } ``` ### 功能对比分析 | 特性 | Zephyr | RT-Thread | | --- | ------ | --------- | | 开源许可 | Apache License 2.0 | GPL v2 或更宽松条款下的商业授权 | | 社区活跃度 | 高,受Linux基金会支持 | 较高,尤其在中国地区非常流行 | | 内存占用情况 | 轻量化,适合极低功耗设备 | 可裁剪性强,可根据需求调整大小 | ### 应用场景探讨 对于那些追求极致性能优化并希望利用强大社区和技术支持的企业来说,Zephyr 将是一个不错的选择;而对于国内开发者而言,由于 RT-Thread 更贴近本地市场需求,在中文文档和支持方面表现优异,因此可能更适合中国市场的开发环境[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderBob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值