Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
qemu-vexpress-a9
蓝牙
如何用Ubuntu qemu跑zephyr_polling的蓝牙
发布于 2023-03-31 14:54:34 浏览:444
订阅该版
[tocm] # rtthread_uart rtthread平台下通用uart接口实现。 ## Ubuntu平台下利用qemu实现蓝牙功能 ### 搭建 RT-Thread QEMU 环境 参考 [文档:在 Ubuntu 平台开发 RT-Thread](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/setup/qemu/ubuntu/an0005-qemu-ubuntu.md) 完成 RT-Thread qemu 环境的搭建。目前我们使用**qemu-vexpress-a9**的bsp环境。 #### 配置 zephyr_polling 软件包 1、在 **qemu-vexpress-a9** BSP 根目录输入: ```shell scons --menuconfig ``` 2、进入 RT-Thread online packages → IoT - internet of things 目录即可看到 zephyr_polling软件包,勾选软件包。 ![image-20230324162232170](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324162232170.png) 3、配置 zephyr_polling项目的参数,如下述配置chipset选common,example选beacon,platform选rtthread_uart。 ![image-20230324162304667](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324162304667.png) 4、选择HCI接口参数 这里 The uart for HCI Transport 默认输入 “**uart1**” 就好 ![image-20230324162430691](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324162430691.png) 保存后退出。 #### 下载软件包 使用 scons --menuconfig 命令后会安装及初始化 Env 工具,并在 home 目录下面生成 “.env” 文件夹,此文件夹为隐藏文件夹,切换到 home 目录,使用 ls 命令可查看所有目录和文件。 ```shell $ ls ~/.env env.sh local_pkgs packages tools ``` 运行 **env.sh** 会配置好环境变量,让我们可以使用 **pkgs** 命令来更新软件包,执行 ```shell $ source ~/.env/env.sh ``` 使用 **pkgs --update** 命令下载 NimBLE 软件包到 BSP 目录下的 packages 文件夹里。 ```shell $ pkgs --update ``` ### btproxy方式 本节是参考:[QEMU BLE (rt-thread.org)](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/setup/qemu/qemu-ble/qemu_ble?id=qemu-环境运行-ble)。 如果你手头有一个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 环境的搭建 首先需要更新源: ```shell sudo apt update sudo apt upgrade ``` 安装所需要的依赖: ```shell 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 。 ```shell 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 应该在同一个目录级别下,目录结构为: ```shell . |--- ell | |--- ell | |--- unit |--- bluez | |--- src | |--- tools ``` 然后输入下述命令编译 bluez: ```shell cd bluez ./bootstrap-configure --disable-android --disable-midi --disable-mesh make ``` 注意,这个时候会报错,但是不用管,tools目录下已经有所需的`btproxy`。 ![image-20230324161225919](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324161225919.png) ![image-20230324161324577](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324161324577.png) #### QEMU 运行 BLE qemu 运行 BLE 时,本质上还是在和物理机的蓝牙设备通信,下面介绍如何在 qemu 环境中使用蓝牙设备。 首先输入 `hciconfig` 查看本机的蓝牙设备, ![image-20230324161621296](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324161621296.png) 我这里是 hci0 蓝牙设备,需要保证上述红框框住的部分为 `DOWN`,也就是该蓝牙设备未打开,否则需要输入下述命令关闭该蓝牙设备: ```shell sudo hciconfig hci0 down ``` 然后进入 bluez 的 tools 目录,输入命令为该蓝牙设备创建一个代理(proxy)。 ```shell sudo ./btproxy -u -i 0 ``` 其中 `-u` 代表使用 Unix Server,默认路径为 `/tmp/bt-server-bredr`,`-i 0` 指使用 hci0 蓝牙设备,如果是 hci1 蓝牙设备,则需更改为 `-i 1` 。运行成功后会有下述显示: ![image-20230324161708541](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324161708541.png) 然后在 RT-Thread 的 bsp/qemu-vexpress-a9 目录下编译运行: ```shell 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](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324161832389.png) 若蓝牙设备未关闭,则会显示设备或资源忙: ![image-20230324162718229](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324162718229.png) 建议每次运行前都关闭一次蓝牙设备:`sudo hciconfig hci0 down` 。 #### 测试运行 而后输入**zephyr_polling_init**既可以运行demo工程了。可以看到蓝牙地址是**11:22:33:44:55:66**。 ![image-20230324162928956](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/image-20230324162928956.png) 用nordic的app搜索,就可以看到发送的beacon数据包了。 ![ca9bcd0d5bf31ddaed5fcc9ef7f9053](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/ca9bcd0d5bf31ddaed5fcc9ef7f9053.jpg) ### 串口方式 本节是参考:[RT-Thread-QEMU下运行NimBLERT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/47e1aad061e7a53c.html)。 如果你手头就是一个uart设备,系统中还没驱动的情况下。 #### 环境介绍 本次搭建环境所使用的资源和版本为: - Ubuntu 18.04 - qemu - v2.11.1 - RT-Thread - v5.0.0 - 一个蓝牙UART模组 #### 环境搭建 连接蓝牙 Control 芯片(使用 pts_dongle 进行演示,将其直接连接电脑)。 需要注意,下面的**/dev/ttyACM0**需要根据具体情况调整,看你实际的串口是哪个。Linux串口是默认普通用户没有读写权限的,每次开机后对串口读写都要附加权限。 ```shell 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](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/1679647130430.png) 用nordic的app搜索,就可以看到发送的beacon数据包了。 ![98692c1fb1c5df8fc5bb681531b37d7](https://markdown-1306347444.cos.ap-shanghai.myqcloud.com/img/98692c1fb1c5df8fc5bb681531b37d7.jpg)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
wenbo13579
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt-thread配合最好的蓝牙单芯片
2
实现基于RT-Thread Nano的蓝牙三模键盘的三个小白问题
3
ymodem运行一段就停止
4
APT-Pi的factory中的蓝牙名称“APT-Pi”修改
5
有基于RT-Thread 和 AB32VG1 的蓝牙示例吗?
6
蓝牙串口无法作为msh终端的输出
7
蓝牙sdk,与art-pi的板子来回数据;类似项目使用protobuf来传输数据,求助其他方式
8
无法导入蓝牙模块bluetooth
9
导入蓝牙提示无法解析,什么原因
10
qemu-vexpress-a9下,ping百度可以,本机IP不通(已解决)
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部