0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Ubuntu qemu跑zephyr_polling的蓝牙?

冬至子 来源:wenbo13579 作者:wenbo13579 2023-09-28 11:24 次阅读

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

Ubuntu平台下利用qemu实现蓝牙功能
搭建 RT-Thread QEMU 环境

目前我们使用qemu-vexpress-a9的bsp环境。

配置 zephyr_polling 软件包

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

scons --menuconfig

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

1.jpg

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

1.jpg

4、选择HCI接口参数

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

1.jpg

保存后退出。

下载软件包
使用 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方式

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

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

Ubuntu 18.04
Bluez - v5.55
ell - v0.35
qemu - v2.11.1
RT-Thread - v5.0.0
一个蓝牙适配器
环境搭建
环境搭建主要分为两部分,

bluez 的编译
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 。

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

.
|--- ell
| |--- ell
| |--- unit
|--- bluez
| |--- src
| |--- tools
然后输入下述命令编译 bluez:

cd bluez
./bootstrap-configure --disable-android --disable-midi --disable-mesh
make
注意,这个时候会报错,但是不用管,tools目录下已经有所需的btproxy。

1.jpg

1.jpg

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

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

1.jpg

我这里是 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 。运行成功后会有下述显示:

1.jpg

然后在 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 界面会有如下显示:

1.jpg

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

1.jpg

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

测试运行

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

1.jpg

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

1.jpg

2.jpg

3.jpg

串口方式

如果你手头就是一个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工程了。可以看到蓝牙地址是c007e8e12d:e8。

1.jpg

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

1.jpg

2.jpg

3.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UART接口
    +关注

    关注

    0

    文章

    123

    浏览量

    15068
  • RT-Thread
    +关注

    关注

    31

    文章

    1151

    浏览量

    38914
  • BLE技术
    +关注

    关注

    0

    文章

    24

    浏览量

    5795
  • Ubuntu系统
    +关注

    关注

    0

    文章

    84

    浏览量

    3786
  • IoT芯片
    +关注

    关注

    0

    文章

    22

    浏览量

    6266
收藏 人收藏

    评论

    相关推荐

    RTT_Zephyr_Polling BlueNRG2 SPI使用说明

    在RT-Thread平台下,利用 BlueNRG2 蓝牙芯片运行 RTT_Zephyr_Polling 协议栈。使用 SPI 作为 HCI 传输方式。
    的头像 发表于 09-21 14:54 733次阅读
    RTT_<b class='flag-5'>Zephyr_Polling</b> BlueNRG2 SPI使用说明

    RTT平台zephyr_polling软件包SPI Bluenrg2芯片宕机问题与修复

    项目的代码测试完成之后,准备收尾时,出现了问题。清除掉开发过程中用来调试的print打印之后,zephyr_polling 的 HCI 突然不能正常工作了,之前测试可用的 zephyr_polling 中的各个例程都不再能运行。
    的头像 发表于 09-25 17:08 788次阅读
    RTT平台<b class='flag-5'>zephyr_polling</b>软件包SPI Bluenrg2芯片宕机问题与修复

    RTT zephyr_polling软件包 Bluenrg2蓝牙芯片启动流程

    在用标准的 HCI 指令控制设备进行蓝牙操作之前,需要提前通过 VS Command 对设备进行配置,只有正确配置好的设备才能正常使用。
    的头像 发表于 09-27 11:19 765次阅读
    RTT <b class='flag-5'>zephyr_polling</b>软件包 Bluenrg2<b class='flag-5'>蓝牙</b>芯片启动流程

    如何在Ubuntu平台使用QEMU运行RT-Threadqemu-vexpress-a9BSP工程?

    本文描述了如何在 Ubuntu 平台使用 QEMU 运行 RT-Thread qemu-vexpress-a9 BSP 工程。
    发表于 03-30 07:40

    手把手教你在Ubuntu系统中通过QEMU来运行基于Arm CPU的Linux系统

    怎样去安装QEMU?如何去编译U-Boot?怎样在Ubuntu系统中通过QEMU来运行基于Arm CPU的Linux系统?
    发表于 08-19 06:57

    何用Qemu去模拟ARM平台呢

    qemu-arm和qemu-system-arm的区别在哪?如何用Qemu去模拟ARM平台呢?
    发表于 10-22 06:37

    如何在RT-Thread的qemu环境里接入Bluetooth Controller

    最近在基于 RT-Thread 环境开发 BLE,觉得每次都需要烧录代码到开发板太麻烦了,想利用 RT-Thread 的 qemu 环境开发 BLE 应用,于是我想起了之前使用 Zephyr 时,它
    发表于 06-22 11:48

    Ubuntu平台开发RT-Thread文档中步骤搭建QEMU环境

    NimBLE 可在 QEMU 环境下搭配蓝牙 Control 芯片运行,目前在 Ubuntu 18.04 下运行成功。QEMU 环境搭建主要参考 在
    发表于 07-27 11:19

    如何在Window及Ubuntu平台使用QEMU运行 RT-Thread qemu-vexpress-a9 BSP工程

    摘要本应用笔记描述了如何在 Window 及 Ubuntu 平台使用 QEMU 运行 RT-Thread qemu-vexpress-a9 BSP 工程。本文的目的和结构本文的目的和背景嵌入式
    发表于 10-26 15:19

    Ubuntu下使用配置qemu环境为什么不能更新软件包呢?

    Ubuntu下使用配置qemu环境不能更新软件包,显示Permission denied: 'packages'是怎么回事
    发表于 02-15 10:48

    如何使用RT685的DSP搭配Zephyr OS?

    “evkmimxrt685_dsp_mu_polling”完成了此操作,它运行良好。 现在我想对 Zephyr OS 做同样的事情。我用这个平台制作了几个应用程序,这适用于 ARM 部分。 我没有
    发表于 05-18 08:04

    如果在Zephyr内如何使用ESP32蓝牙

    Zephyr ESP32 蓝牙驱动简析一文中简要分析了esp32 蓝牙如何集成进Zephyr,本文接着说明如果在Zephyr内使用ESP3
    的头像 发表于 06-07 16:42 3193次阅读

    QEMU模拟不同的硬件单板使用教程

    简介 QEMU可以模拟内核运行在不同的单板,解除对物理开发板的依赖。 QEMU安装 1.安装依赖(Ubuntu 18+) sudo apt install build-essential
    发表于 04-13 11:22 6次下载

    何用ART-PI跑zephyr_polling蓝牙

    rtthread在ArtPi硬件平台下和AP6212蓝牙实现。
    的头像 发表于 06-07 15:47 583次阅读
    如<b class='flag-5'>何用</b>ART-PI跑<b class='flag-5'>zephyr_polling</b>的<b class='flag-5'>蓝牙</b>?

    RT-Thread平台 zephyr_polling软件包 Bluenrg2 蓝牙芯片启动流程

    RTT zephyr_polling软件包 Bluenrg2 蓝牙芯片启动流程 “开源之夏”“蓝牙HOST协议栈zephyr_polling完善” 项目个人记录 菜鸡参与项目的个人记录
    的头像 发表于 09-27 18:40 418次阅读
    RT-Thread平台 <b class='flag-5'>zephyr_polling</b>软件包 Bluenrg2 <b class='flag-5'>蓝牙</b>芯片启动流程