0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Ubuntu qemu跑zephyr_polling的藍(lán)牙?

冬至子 ? 來源:wenbo13579 ? 作者:wenbo13579 ? 2023-09-28 11:24 ? 次閱讀

rtthread_uart
rtthread平臺(tái)下通用uart接口實(shí)現(xiàn)。

Ubuntu平臺(tái)下利用qemu實(shí)現(xiàn)藍(lán)牙功能
搭建 RT-Thread QEMU 環(huán)境

目前我們使用qemu-vexpress-a9的bsp環(huán)境。

配置 zephyr_polling 軟件包

1、在 qemu-vexpress-a9 BSP 根目錄輸入:

scons --menuconfig

2、進(jìn)入 RT-Thread online packages → IoT - internet of things 目錄即可看到 zephyr_polling軟件包,勾選軟件包。

1.jpg

3、配置 zephyr_polling項(xiàng)目的參數(shù),如下述配置chipset選common,example選beacon,platform選rtthread_uart。

1.jpg

4、選擇HCI接口參數(shù)

這里 The uart for HCI Transport 默認(rèn)輸入 “uart1” 就好

1.jpg

保存后退出。

下載軟件包
使用 scons —menuconfig 命令后會(huì)安裝及初始化 Env 工具,并在 home 目錄下面生成 “.env” 文件夾,此文件夾為隱藏文件夾,切換到 home 目錄,使用 ls 命令可查看所有目錄和文件。

$ ls ~/.env
env.sh local_pkgs packages tools
運(yùn)行 env.sh 會(huì)配置好環(huán)境變量,讓我們可以使用 pkgs 命令來更新軟件包,執(zhí)行

$ source ~/.env/env.sh
使用 pkgs —update 命令下載 NimBLE 軟件包到 BSP 目錄下的 packages 文件夾里。

$ pkgs --update
btproxy方式

如果你手頭有一個(gè)USB藍(lán)牙dongle。只要Ubuntu能識(shí)別的都可以使用。

環(huán)境介紹
本次搭建環(huán)境所使用的資源和版本為:

Ubuntu 18.04
Bluez - v5.55
ell - v0.35
qemu - v2.11.1
RT-Thread - v5.0.0
一個(gè)藍(lán)牙適配器
環(huán)境搭建
環(huán)境搭建主要分為兩部分,

bluez 的編譯
Ubuntu里 RT-Thread QEMU 環(huán)境的搭建
首先需要更新源:

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 里有許多實(shí)用的工具,例如 btproxy,但是 Ubuntu 自帶的 bluez 并未將這些工具都編譯出來,因此需要我們重新編譯 bluez。

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

最終 ell 和 bluez 應(yīng)該在同一個(gè)目錄級(jí)別下,目錄結(jié)構(gòu)為:

.
|--- ell
| |--- ell
| |--- unit
|--- bluez
| |--- src
| |--- tools
然后輸入下述命令編譯 bluez:

cd bluez
./bootstrap-configure --disable-android --disable-midi --disable-mesh
make
注意,這個(gè)時(shí)候會(huì)報(bào)錯(cuò),但是不用管,tools目錄下已經(jīng)有所需的btproxy。

1.jpg

1.jpg

QEMU 運(yùn)行 BLE
qemu 運(yùn)行 BLE 時(shí),本質(zhì)上還是在和物理機(jī)的藍(lán)牙設(shè)備通信,下面介紹如何在 qemu 環(huán)境中使用藍(lán)牙設(shè)備。

首先輸入 hciconfig 查看本機(jī)的藍(lán)牙設(shè)備,

1.jpg

我這里是 hci0 藍(lán)牙設(shè)備,需要保證上述紅框框住的部分為 DOWN,也就是該藍(lán)牙設(shè)備未打開,否則需要輸入下述命令關(guān)閉該藍(lán)牙設(shè)備:

sudo hciconfig hci0 down
然后進(jìn)入 bluez 的 tools 目錄,輸入命令為該藍(lán)牙設(shè)備創(chuàng)建一個(gè)代理(proxy)。

sudo ./btproxy -u -i 0
其中 -u 代表使用 Unix Server,默認(rèn)路徑為 /tmp/bt-server-bredr,-i 0 指使用 hci0 藍(lán)牙設(shè)備,如果是 hci1 藍(lán)牙設(shè)備,則需更改為 -i 1 。運(yùn)行成功后會(huì)有下述顯示:

1.jpg

然后在 RT-Thread 的 bsp/qemu-vexpress-a9 目錄下編譯運(yùn)行:

scons
qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -nographic -serial mon:stdio -serial unix:/tmp/bt-server-bredr
即可成功在 qemu 環(huán)境里與藍(lán)牙卡片交互,下面稍微介紹下原理和注意事項(xiàng)。

qemu 命令參數(shù)里與串口相關(guān)的有 -serial mon:stdio -serial unix:/tmp/bt-server-bredr,-serial 參數(shù)的介紹為:

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

這個(gè)參數(shù)將 qemu 程序的串口重定向到物理機(jī)的設(shè)備文件,

第一個(gè) -serial mon:stdio 將 qemu 里的 uart0 重定向到了物理機(jī)的 stdio 設(shè)備文件,而且在 qemu 程序里 uart0 用作 msh 命令行工具,類似 stdio,因此我們可以在物理機(jī)上看到 qemu 程序的打印數(shù)據(jù),也可以輸入命令。

第二個(gè) -serial unix:/tmp/bt-server-bredr 是將 qemu 里的 uart1 重定向到物理機(jī)的 /tmp/bt-server-bredr 文件,而這個(gè)文件又是 hci0 設(shè)備的代理,因此從 qemu 程序的角度來看,就是使用 H4 協(xié)議,通過 uart1 去訪問藍(lán)牙設(shè)備。uart1 的波特率使用 115200 即可(未找到說明,但一般都是這樣使用)。

注意:上述兩個(gè) -serial 的順序不能顛倒,否則 qemu 程序無法正常運(yùn)行。

若成功運(yùn)行,則在 btproxy 界面會(huì)有如下顯示:

1.jpg

若藍(lán)牙設(shè)備未關(guān)閉,則會(huì)顯示設(shè)備或資源忙:

1.jpg

建議每次運(yùn)行前都關(guān)閉一次藍(lán)牙設(shè)備:sudo hciconfig hci0 down 。

測(cè)試運(yùn)行

而后輸入zephyr_polling_init既可以運(yùn)行demo工程了。可以看到藍(lán)牙地址是11:22:33:44:55:66。

1.jpg

用nordic的app搜索,就可以看到發(fā)送的beacon數(shù)據(jù)包了。

1.jpg

2.jpg

3.jpg

串口方式

如果你手頭就是一個(gè)uart設(shè)備,系統(tǒng)中還沒驅(qū)動(dòng)的情況下。

環(huán)境介紹
本次搭建環(huán)境所使用的資源和版本為:

Ubuntu 18.04
qemu - v2.11.1
RT-Thread - v5.0.0
一個(gè)藍(lán)牙UART模組

環(huán)境搭建
連接藍(lán)牙 Control 芯片(使用 pts_dongle 進(jìn)行演示,將其直接連接電腦)。

需要注意,下面的/dev/ttyACM0需要根據(jù)具體情況調(diào)整,看你實(shí)際的串口是哪個(gè)。Linux串口是默認(rèn)普通用戶沒有讀寫權(quán)限的,每次開機(jī)后對(duì)串口讀寫都要附加權(quán)限。

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

測(cè)試運(yùn)行
而后輸入zephyr_polling_init既可以運(yùn)行demo工程了??梢钥吹剿{(lán)牙地址是c007e8e12d:e8。

1.jpg

用nordic的app搜索,就可以看到發(fā)送的beacon數(shù)據(jù)包了。

1.jpg

2.jpg

3.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UART接口
    +關(guān)注

    關(guān)注

    0

    文章

    124

    瀏覽量

    15256
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39839
  • BLE技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    5835
  • Ubuntu系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    3898
  • IoT芯片
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    6277
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RTT_Zephyr_Polling BlueNRG2 SPI使用說明

    在RT-Thread平臺(tái)下,利用 BlueNRG2 藍(lán)牙芯片運(yùn)行 RTT_Zephyr_Polling 協(xié)議棧。使用 SPI 作為 HCI 傳輸方式。
    的頭像 發(fā)表于 09-21 14:54 ?1195次閱讀
    RTT_<b class='flag-5'>Zephyr_Polling</b> BlueNRG2 SPI使用說明

    RTT平臺(tái)zephyr_polling軟件包SPI Bluenrg2芯片宕機(jī)問題與修復(fù)

    項(xiàng)目的代碼測(cè)試完成之后,準(zhǔn)備收尾時(shí),出現(xiàn)了問題。清除掉開發(fā)過程中用來調(diào)試的print打印之后,zephyr_polling 的 HCI 突然不能正常工作了,之前測(cè)試可用的 zephyr_polling 中的各個(gè)例程都不再能運(yùn)行。
    的頭像 發(fā)表于 09-25 17:08 ?1047次閱讀
    RTT平臺(tái)<b class='flag-5'>zephyr_polling</b>軟件包SPI Bluenrg2芯片宕機(jī)問題與修復(fù)

    RTT zephyr_polling軟件包 Bluenrg2藍(lán)牙芯片啟動(dòng)流程

    在用標(biāo)準(zhǔn)的 HCI 指令控制設(shè)備進(jìn)行藍(lán)牙操作之前,需要提前通過 VS Command 對(duì)設(shè)備進(jìn)行配置,只有正確配置好的設(shè)備才能正常使用。
    的頭像 發(fā)表于 09-27 11:19 ?1272次閱讀
    RTT <b class='flag-5'>zephyr_polling</b>軟件包 Bluenrg2<b class='flag-5'>藍(lán)牙</b>芯片啟動(dòng)流程

    如何在Ubuntu平臺(tái)使用QEMU運(yùn)行RT-Threadqemu-vexpress-a9BSP工程?

    本文描述了如何在 Ubuntu 平臺(tái)使用 QEMU 運(yùn)行 RT-Thread qemu-vexpress-a9 BSP 工程。
    發(fā)表于 03-30 07:40

    手把手教你在Ubuntu系統(tǒng)中通過QEMU來運(yùn)行基于Arm CPU的Linux系統(tǒng)

    怎樣去安裝QEMU?如何去編譯U-Boot?怎樣在Ubuntu系統(tǒng)中通過QEMU來運(yùn)行基于Arm CPU的Linux系統(tǒng)?
    發(fā)表于 08-19 06:57

    何用Qemu去模擬ARM平臺(tái)呢

    qemu-arm和qemu-system-arm的區(qū)別在哪?如何用Qemu去模擬ARM平臺(tái)呢?
    發(fā)表于 10-22 06:37

    如何在RT-Thread的qemu環(huán)境里接入Bluetooth Controller

    最近在基于 RT-Thread 環(huán)境開發(fā) BLE,覺得每次都需要燒錄代碼到開發(fā)板太麻煩了,想利用 RT-Thread 的 qemu 環(huán)境開發(fā) BLE 應(yīng)用,于是我想起了之前使用 Zephyr 時(shí),它
    發(fā)表于 06-22 11:48

    Ubuntu平臺(tái)開發(fā)RT-Thread文檔中步驟搭建QEMU環(huán)境

    NimBLE 可在 QEMU 環(huán)境下搭配藍(lán)牙 Control 芯片運(yùn)行,目前在 Ubuntu 18.04 下運(yùn)行成功。QEMU 環(huán)境搭建主要參考 在
    發(fā)表于 07-27 11:19

    如何在Window及Ubuntu平臺(tái)使用QEMU運(yùn)行 RT-Thread qemu-vexpress-a9 BSP工程

    摘要本應(yīng)用筆記描述了如何在 Window 及 Ubuntu 平臺(tái)使用 QEMU 運(yùn)行 RT-Thread qemu-vexpress-a9 BSP 工程。本文的目的和結(jié)構(gòu)本文的目的和背景嵌入式
    發(fā)表于 10-26 15:19

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

    “evkmimxrt685_dsp_mu_polling”完成了此操作,它運(yùn)行良好。 現(xiàn)在我想對(duì) Zephyr OS 做同樣的事情。我用這個(gè)平臺(tái)制作了幾個(gè)應(yīng)用程序,這適用于 ARM 部分。 我沒有
    發(fā)表于 05-18 08:04

    Zephyr v2.6.0下如何搭建esp32的編譯調(diào)試環(huán)境?

    nrf52。時(shí)隔3年esp終于將esp32最重要的驅(qū)動(dòng)提交到zephyr了,價(jià)格10元出頭的esp32既有wifi又有藍(lán)牙當(dāng)然比35的nrf52832模塊香,果斷拿出吃灰的esp32小板環(huán)境來
    的頭像 發(fā)表于 05-24 11:23 ?3172次閱讀

    如果在Zephyr內(nèi)如何使用ESP32藍(lán)牙

    Zephyr ESP32 藍(lán)牙驅(qū)動(dòng)簡(jiǎn)析一文中簡(jiǎn)要分析了esp32 藍(lán)牙如何集成進(jìn)Zephyr,本文接著說明如果在Zephyr內(nèi)使用ESP3
    的頭像 發(fā)表于 06-07 16:42 ?3637次閱讀

    QEMU模擬不同的硬件單板使用教程

    簡(jiǎn)介 QEMU可以模擬內(nèi)核運(yùn)行在不同的單板,解除對(duì)物理開發(fā)板的依賴。 QEMU安裝 1.安裝依賴(Ubuntu 18+) sudo apt install build-essential
    發(fā)表于 04-13 11:22 ?6次下載

    何用ART-PIzephyr_polling藍(lán)牙?

    rtthread在ArtPi硬件平臺(tái)下和AP6212藍(lán)牙實(shí)現(xiàn)。
    的頭像 發(fā)表于 06-07 15:47 ?809次閱讀
    如<b class='flag-5'>何用</b>ART-PI<b class='flag-5'>跑</b><b class='flag-5'>zephyr_polling</b>的<b class='flag-5'>藍(lán)牙</b>?

    RT-Thread平臺(tái) zephyr_polling軟件包 Bluenrg2 藍(lán)牙芯片啟動(dòng)流程

    RTT zephyr_polling軟件包 Bluenrg2 藍(lán)牙芯片啟動(dòng)流程 “開源之夏”“藍(lán)牙HOST協(xié)議棧zephyr_polling完善” 項(xiàng)目個(gè)人記錄 菜雞參與項(xiàng)目的個(gè)人記錄
    的頭像 發(fā)表于 09-27 18:40 ?818次閱讀
    RT-Thread平臺(tái) <b class='flag-5'>zephyr_polling</b>軟件包 Bluenrg2 <b class='flag-5'>藍(lán)牙</b>芯片啟動(dòng)流程