交叉编译bluez-5.3及解决No default controller available文件解决

2023-11-02

Bluez作为当前最成熟的开源蓝牙协议栈,在Linux的各大发行版中已经得到了广泛的应用。在桌面环境下,使用Bluez应该已经没有太大的问题,本文的主要目的是介绍在嵌入式平台上,搭建和配置Bluez的各个Profile运行所需做的工作,讨论可能遇到的问题,介绍一些工具的使用和工作原理。因为本人的能力和测试时间有限,可能下文中有些理解、分析不一定准确,欢迎联系指正。
1 相关说明
1.1 bluez与bluez-libs,bluez-utils之间的关系
bluez可以算是bluez-libs和bluez-utils的整合,但是bluez里面的工具更多一些。
1.2 网站资源
Bluez的官方网址:https://www.kernel.org/pub/linux/bluetooth/ 这里提供最新的源码下载,最近服务器崩溃了一次,有些东西没了。。。。
Bluez的Wiki:http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html 这里提供Bluez相关的Howto等文档资源
1.3 依赖库
glib-2.32.4
dbus-1.4.1
libical
2 编译bluez-5.3
2.1 编译glib-2.32.4
依赖库文件:
glib-2.32.4依赖于zlib,libffi,libelf-0.8.13,所以编译glib-2.32.4之前需要编译好依赖库。
2.1.1 编译zlib
zlib-1.2.5:http://download.csdn.net/detail/pengrui18/9711468

#!/bin/sh
./configure --prefix=$PWD/build
sed -i 19s/gcc/arm-linux-gnueabihf-gcc/g Makefile
sed -i 30s/gcc/arm-linux-gnueabihf-gcc/g Makefile
sed -i 31s/gcc/arm-linux-gnueabihf-gcc/g Makefile
sed -i 39s/ar/arm-linux-gnueabihf-ar/g Makefile
sed -i 40s/ranlib/arm-linux-gnueabihf-ranlib/g Makefile
sed -i 41s/ldconfig/arm-linux-gnueabihf-ldconfig/g Makefile
make&&make install

2.1.2 编译libffi
libffi-3.0.10:http://download.csdn.net/detail/pengrui18/9711532

#!/bin/sh
./configure --prefix=$PWD/build
make&&make install

2.1.3 编译libelf-0.8.13
libelf-0.8.13:http://download.csdn.net/detail/pengrui18/9711543

#!/bin/sh
./configure --host=arm-linux-gnueabihf --prefix=$PWD/build
sed -i 35s/gcc/arm-linux-gnueabihf-gcc/g Makefile
sed -i 29s/gcc/arm-linux-gnueabihf-gcc/g lib/Makefile
sed -i 31s/ar/arm-linux-gnueabihf-ar/g lib/Makefile
sed -i 35s/ranlib/arm-linux-gnueabihf-ranlib/g lib/Makefile
sed -i 27s/gcc/arm-linux-gnueabihf-gcc/g po/Makefile
make && make install

2.1.4 编译glib-2.32.4
glib-2.32.4:http://download.csdn.net/detail/pengrui18/9711465

#!/bin/sh
echo "glib_cv_stack_grows=no">config.cache
echo "glib_cv_uscore=no">>config.cache
echo "ac_cv_func_posix_getpwuid_r=yes">>config.cache
echo "ac_cv_func_posix_getgrgid_r=yes">>config.cache
echo "ac_cv_lib_rt_clock_gettime=no">>config.cache
echo "glib_cv_monotonic_clock=yes">>config.cache

#add this line "AC_DEFINE(STDC_HEADERS,1,[Define to include stddef.h])" before AC_CHECK_ALIGNOF
sed -i '/AC_CHECK_ALIGNOF/i\AC_DEFINE(STDC_HEADERS,1,[Define to include stddef.h])'  configure.ac
#更新configure文件
autoconf
./configure --host=arm-linux-gnueabihf --prefix=$PWD/build -cache-file=config.cache \
ZLIB_CFLAGS="-I$PWD/../zlib-1.2.5/build/include" \
ZLIB_LIBS="-L$PWD/../zlib-1.2.5/build/lib -lz" \
LIBFFI_CFLAGS="-I$PWD/../libffi-3.0.10/build/lib/libffi-3.0.10/include" \
LIBFFI_LIBS="-L$PWD/../libffi-3.0.10/build/lib -lffi" \
LIBELF_CFLAGS="-I$PWD/../libelf-0.8.13/build/include" \
LIBELF_LIBS="-L$PWD/../libelf-0.8.13/build/lib -lelf"
make && make install

2.2 编译dbus-1.4.1
dbus-1.4.1依赖expat-2.0.1
2.2.1 编译expat-2.0.1
expat-2.0.1:http://download.csdn.net/detail/pengrui18/9711546

#!/bin/sh
./configure --prefix=$PWD/build --host=arm-linux-gnueabihf
make && make install

2.2.2 编译dbus-1.4.1
dbus-1.4.1:http://download.csdn.net/detail/pengrui18/9711533

#!/bin/sh
./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc \
CFLAGS=-I$PWD/../expat-2.0.1/build/include \
LDFLAGS=-L$PWD/../expat-2.0.1/build/lib \
--prefix=$PWD/build --enable-abstract-sockets --with-x=no
make && make install
#需要将--prefix=$PWD/build参数去掉重新编译,然后将bin目录下的所需文件拷贝过来

2.3 编译libical-2.0.0
libical-2.0.0:http://download.csdn.net/detail/pengrui18/9711536

#!/bin/sh
mkdir build &&
cd build &&

#cmake -DCMAKE_INSTALL_PREFIX=/usr \
#      -DCMAKE_BUILD_TYPE=Release  \
#      -DSHARED_ONLY=yes           \
#      .. &&
export CC=arm-linux-gnueabi-gcc
export CXX=arm-linux-gnueabi-g++
cmake -DCMAKE_INSTALL_PREFIX=$PWD/build
#将libstdc++库文件拷贝过来,否则报错
cp -a /home/pengrui/my-imx6/02_source/imx-3.14.52_1.0.o_ga/tools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/lib/libstdc++* lib/
make&&make install

2.4 编译bluez-5.3
bluez-5.3依赖于readline,而readline依赖于ncurses
2.4.1 编译ncurses-5.8
ncurses-5.8:http://download.csdn.net/detail/pengrui18/9711540

#!/bin/sh
./configure --host=arm-linux-gnueabihf --prefix=$PWD/build --with-shared
make && make install

2.4.2 编译readline-6.3
readline-6.3:http://download.csdn.net/detail/pengrui18/9711530

#!/bin/sh
sed -i  '6324s/yes/no/g' configure
./configure --host=arm-linux-gnueabihf --prefix=$PWD/build
make all&&make install

2.4.3 编译bluez-5.3:
bluez-5.3:http://download.csdn.net/detail/pengrui18/9711539

#!/bin/sh
./configure --host=arm-linux-gnueabihf --prefix=$PWD/build --disable-usb --disable-udev --disable-systemd --disable-obex \
--with-dbusconfdir=$PWD/../dbus-1.4.1/build/etc \
--with-dbussystembusdir=$PWD/../dbus-1.4.1/build/share/dbus-1/system-services \
--with-dbussessionbusdir=$PWD/../dbus-1.4.1/build/share/dbus-1/services \
GLIB_CFLAGS="-I$PWD/../glib-2.32.4/build/include/glib-2.0 \
-I$PWD/../glib-2.32.4/build/lib/glib-2.0/include" \
GLIB_LIBS="-L$PWD/../glib-2.32.4/build/lib -lglib-2.0 -lgobject-2.0" \
GTHREAD_CFLAGS="-I$PWD/../glib-2.32.4/build/include/glib-2.0/glib" \
GTHREAD_LIBS="-L$PWD/../glib-2.32.4/build/lib -lgthread-2.0" \
DBUS_CFLAGS="-I$PWD/../dbus-1.4.1/build/include/dbus-1.0 -I$PWD/../dbus-1.4.1/build/lib/dbus-1.0/include" \
DBUS_LIBS="-L$PWD/../dbus-1.4.1/build/lib -ldbus-1" \
ICAL_CFLAGS="-I$PWD/../libical-2.0.0/build/include" \
ICAL_LIBS="-L$PWD/../libical-2.0.0/build/lib/arm-linux-gnueabihf" \
CFLAGS="-I$PWD/../readline-6.3/build/include -I$PWD/../libffi-3.0.10/build/lib/libffi-3.0.10/include" \
LDFLAGS="-L$PWD/../ncurses-5.8/build/lib -lncurses -L$PWD/../readline-6.3/build/lib -L$PWD/../libffi-3.0.10/build/lib -lffi"
make && make install

3.运行bluetoothctl命令
启动dbus
启动bluetoothd
如果在启动bluetoothctl时提示No default controller available,则启动bluetoothd失败或者没有启动

Bluetoothctl

通过命令行配对是最可靠的选择。准确的配对过程依不同设备类型及其所提供的输入功能而各不相同。下面提供使用/usr/bin/bluetoothctl配对的一般过程:

启动 bluetoothctl 交互命令。可以输入 help 列出所有有效的命令。

    输入power on 命令打开控制器电源。默认是关闭的。
    输入devices 命令获取要配对设备的 MAC 地址。
    如果设备未在清单中列出,输入 scan on 命令设置设备发现模式。
    输入agent on 命令打开代理。
    输入 pair MAC Address 开始配对(支持 tab 键补全)。
    如果使用无 PIN 码设备,再次连接可能需要手工认证。输入 trust MAC Address 命令。
    最后,用 connect MAC_address 命令建立连接。

以下为一个交互实例:

# bluetoothctl 
[NEW] Controller 00:10:20:30:40:50 pi [default]
[bluetooth]# agent KeyboardOnly 
Agent registered
[bluetooth]# default-agent 
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译bluez-5.3及解决No default controller available文件解决 的相关文章

  • bootloader中的中断服务程序的相关解释

    前一段时间在学习bootloader代码时 就是不明白bootloader的中断服务怎么跳转过去的 到网上查了半天 还是没能弄明白 只好自己动手了 下面是我对中断服务程序的理解 可能有点偏差
  • bluez——dbus接口api

    bluez dbus接口api bluez的api接口的说明文档在 doc 路径下 我这先重点分析下adapter agent和device这几个文件 这里面包含的是常用的api 1 agent c 这里现在注册的几个dbus方法 void
  • 蓝牙设备上电提示Failed to set power on: org.bluez.Error.Blocked

    NEW Controller 74 2F 68 6A 37 44 moon 0 default NEW Device 00 07 61 76 8E 78 Logitech diNovo Edge Agent registered bluet
  • Linux设备驱动开发详解总结(二)之并发与竞争

    转载地址 http blog csdn net lwj103862095 article details 8548500 Linux设备驱动中必须解决一个问题是多个进程对共享资源的并发访问 并发的访问会导致竞态 在当今的Linux内核中 支
  • 如何将 BlueZ 配置为要求连接设备输入匹配的密钥?

    我正在尝试在嵌入式 Linux 设备上设置蓝牙 以便使用 SSP 模式 我的设备生成密码并在其显示屏上显示密码 并且要求远程端 例如用户的手机 输入匹配的密码才能使用才能成功配对 我编写 注册了一个代理 将其模式设置为 DisplayOnl
  • BlueZ 兼容内核版本

    我在 Linux 中使用内核版本 3 0 35 和 bluez 4 98 这样我就可以按照 SO 问题之一中给出的 hcitool 命令来宣传 ibeacon 我还能够连接到其他 ble 设备 但无法使用 gatttool 中的 主要 列出
  • 在 Linux 命令行中使用低功耗蓝牙

    我正在研究在 Linux 上使用蓝牙低功耗调制解调器 我正在使用命令行选项 即hcitool 我可以使用以下命令找到设备 hcitool scan 它对我来说工作正常 我也可以使用以下方式广播我的设备 sudo hciconfig hci0
  • 为 Android 设置 PC 蓝牙服务器 [重复]

    这个问题在这里已经有答案了 可能的重复 在Android上使用蓝牙服务发现失败异常 https stackoverflow com questions 3397071 service discovery failed exception u
  • 蓝兹编程

    我正在使用 USB 蓝牙适配器在 Raspberry Pi 上使用 BlueZ 进行编程 我需要能够以编程方式连接到 Arduino BT 问题是 Arduino 的蓝牙模块仍在使用传统配对 因此每当我尝试打开设备的套接字时 我都会收到Pe
  • Bluez BLE 外设利用 ADV 数据宣传自定义特性

    是否有一个示例应用程序允许使用特定的 ADV 数据宣传自定义 UUID 和特征 Bluez 的文档较少 任何帮助表示赞赏 您拥有哪个版本的 BlueZ 对于较新版本的 BlueZ 例如 5 50 您可以从命令行使用 bluetoothctl
  • bluez5 中哪个工具取代了 gatttool?

    好像自从commit b1eb2c4cd057624312e0412f6c4be000f7fc3617 gatttool已被弃用 但我找不到任何信息 什么取代了 gattool 我在 gatttool 上研究过的每个 Python 蓝牙 L
  • 我无法列出 Raspberry Pi 附近的 BLE 设备(python、btmgmt)

    我想通过使用 cron 脚本调用的 python 脚本来扫描 Raspberry 环境中的 ble 设备 但是当我在 cron 中执行此操作时 我的意思是我添加到 sudo crontab e 我总是得到一个空列表 当我以 pi 用户身份登
  • 在 Linux 上检查连接的蓝牙设备的电池电量

    如何检查已连接蓝牙设备的电池电量 该设备在 Android 上显示电池电量 因此我假设该设备支持基于 GATT 的电池服务 https www bluetooth com specifications gatt viewer attribu
  • 无法连接到 Raspberry Pi 上的 BLE 设备

    我正在尝试连接到 Raspberry Pi 2 上的 BLE 设备 心率传感器 Polar H7 我使用此处找到的最新版本的 bluez 5 35 http www bluez org download http www bluez org
  • 用于 BLE 的 BluezV5.42 DBUS C API?

    我开发了 BLE 应用程序openwrt using BLUEZV5 30 我能够通过提取源代码来创建应用程序gatttool and hcitool 我还添加了这些工具提供的更多功能 例如阅读rssi 不过 我已经升级了我的bluez堆叠
  • 如何使用 bluez API 扫描低功耗蓝牙设备

    我是使用 BlueZ 进行低功耗蓝牙编程的新手 我想开发一个本机代码 c 来使用 BlueZ API 在 Android 4 0 3 下扫描附近的低功耗蓝牙设备 有人知道我应该使用哪些 BlueZ 方法吗 如果您想编写本机 C 代码来扫描
  • 如何在 Bluez/Linux 上从 GATT 服务器获取断开连接事件

    环境 Bluez 5 14 Linux 3 1 USB 可插拔 BLE 无线电 TI BLE 密钥卡 CC2541 开发套件 Linux 设备 USB BLE 无线电 我们使用 gatttool 启用 TI 密钥卡上的按键事件并开始监听事件
  • BLE 堆栈的开源实现

    除了 BlueZ 和 Bluedroid 之外 还有其他 BLE 堆栈的开源实现吗 有几个开源 BLE 堆栈 NimBLE http mynewt apache org network ble ble intro Apache mynewt
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 执行 hciconfig hci0 重置时出现无效参数问题

    我在 5 0 以上的内核中观察到这个问题 并且控制器已启用扩展广告 我目前已经使用 bluez 5 50 进行了测试 这个问题与我可以从代码中得到的 MGMT ADV FLAG SEC MASK 标志有关 但是这个标志何时以及如何修改是我不

随机推荐

  • 网络服务(2)——以太网配置IPV4和IPV6

    测试 网络拓扑 开发板 RK3399 lt gt 交换机 lt gt 我的电脑 虚拟机 配置指令 设置IP ip 6 addr add 1001 2001 2001 2001 159 64 dev eth0 ip 6 addr del 10
  • 统计学中的t检验 、f检验、卡方检验

    1 1数据的种类 我们都知道 一般数据可以分为两类 即定量数据 数值型数据 和定性数据 非数值型数据 定性数据很好理解 例如人的性别 姓名这些都是定性数据 定量数据可以分为以下几种 1 1 1定类数据 表现为类别 但不区分顺序 是由定类尺度
  • 毛玻璃效果 php,CSS3教程之制作倾斜导航条和毛玻璃效果

    这篇文章主要介绍了使用CSS3制作倾斜导航条和毛玻璃效果 需要的朋友可以参考下 导航条对于每一个Web前端攻城狮来说并不陌生 但是毛玻璃可能会相对陌生一些 简单的说 毛玻璃其实就是让图片或者背景使用相应的方法进行模糊处理 这种效果对用户来说
  • 使用机器学习方法预测IBM员工流失数据模型

    https www toutiao com a6642158841523864067 2019 01 03 14 50 15 在 IT公司 有许多员工架构可用 一些IT公司或特定部门或特定级别遵循主要的程序员结构 其中有一个 start 组
  • 8 种异步实现方式归纳总结

    一 异步的八种实现方式 1 线程Thread 2 Future 3 异步框架CompletableFuture 4 Spring注解 Async 5 Spring ApplicationEvent事件 6 消息队列 7 第三方异步框架 比如
  • HTML+CSS+JS漫谈(一)

    既然是技术博客 从本篇开始 将进入技术的主题 我将写出自己学习技术时遇到的问题以及解决的思路 一些想法以及一些收获 由于个人学的浅 如果有说的不对或不准确的地方 还请大家批评指正 前端开发三剑客HTML CSS JS之名是如雷贯耳 是前端入
  • jenkins构建dotnet5项目报错: The HTTP request to ‘GET https://api.nuget.org/v3/index.json‘ has timed out

    问题描述 使用官方镜像 mcr microsoft com dotnet sdk 5 0 AS build 在docker build 过程中报错 Step 15 24 RUN dotnet build Project API csproj
  • Java面向对象知识详解(超详细)

    面向对象 一 概念 二 类与对象 三 类与对象在内存中的存储 四 封装 面向对象的三大特征之一 五 构造方法 六 构造代码块和局部代码块 1 构造代码块 2 局部代码块 七 this关键字 八 继承 1 概念 2 特点 3 super关键字
  • 新人请教 R语言作业

    新人请教 这些题怎么做 文件bankloan csv中包含700条的个人贷款信息 1 表示违约 0 表示不违约 1 25分 使用文件bankloan csv中的数据 1 将一张画板分成1行2列 以收入为y轴 年龄为x轴在一张画板上 用不同颜
  • 《Linux就该这么学》学习随笔第二天——VMware虚拟机安装“该主机cpu类型不支持虚拟化性能计数器。”

    今天在安装虚拟机的时候遇到一个问题 记录下我的排查步骤以方便后来者 问题描述 虚机配置完成后 挂载系统镜像后开启虚拟机 虚机报错 提示 该主机cpu类型不支持虚拟化性能计数器 开启模块VPMC的操作失败 未能启动虚拟机 步骤 看到这个错误提
  • R语言 数据格式转换1

    矩阵转化成数据框 用as data frame x 数据框转化成矩阵比较麻烦 如果同时存在字符串类型和数值类型 那么就会默认将数值转化成字符串型 数据框无法转化成向量和因子 methods as 函数查看所有as 函数 R中最基础的数值类型
  • 【react】js创建虚拟dom

    1 创建 React createElement 标签名 标签属性 标签内容 2 渲染 ReactDOM render Dom 容器节点 注 jsx可以用于多标签嵌套的情况 写起来比较方便 但是jsx的写法浏览器识别不了 所以在script
  • Android Long SMS

    Android Long SMS SEND ap在发送long sms之前 会调用Framework的SmsManager的divideMessage 函数 将信息进行切分 然后sendMultipartTextMessage 判断是否为l
  • 粒子群算法应用——求解多峰函数

    一 问题概述 粒子群算法求解多峰函数 函数表达式 z 1 cos 1 1 x 1 2 cos 2 1 x 2 3 cos 3 1 x 3 4 cos 4 1 x 4 5 cos 5 1 x 5 1 cos 1 1 y 1 2 cos 2 1
  • Spring Boot + Vue3前后端分离实战wiki知识库系统<十二>--用户管理&单点登录开发一...

    目标 在上一次https www cnblogs com webor2006 p 17533745 html我们已经完成了文档管理的功能模块开发 接下来则开启新模块的学习 用户登录 这块还是有不少知识点值得学习的 先来看一下整体的效果 关于
  • 我的微博 http://t.sina.com.cn/wangtianping

    我的微博 http t sina com cn wangtianping
  • OpenCV中SVM的参数具体设置

    CvSVMParams CvSVMParams svm type CvSVM C SVC kernel type CvSVM RBF degree 0 gamma 1 coef0 0 C 1 nu 0 p 0 class weights 0
  • 数据提取之正则

    1 什么是正则表达式 用事先定义好的一些特定字符 及这些特定字符的组合 组成一个规则字符串 这个规则字符串用来表达对字符串的一种过滤逻辑 2 正则表达式的常见语法 知识点 正则中的字符 正则中的预定义字符集 正则中的数量词 正则的语法很多
  • cpu如何区分指令和数据

    cpu如何区分指令和数据 我们知道指令是操作码 地址码组成 以二进制的形式存放在内存中 数据也是以二进制的形式存放在内存中 那么当cpu去访问内存的存储单元时 怎么区分现在读取的是指令还是数据呢 冯诺依曼计算机是根据指令周期的不同阶段 来区
  • 交叉编译bluez-5.3及解决No default controller available文件解决

    Bluez作为当前最成熟的开源蓝牙协议栈 在Linux的各大发行版中已经得到了广泛的应用 在桌面环境下 使用Bluez应该已经没有太大的问题 本文的主要目的是介绍在嵌入式平台上 搭建和配置Bluez的各个Profile运行所需做的工作 讨论