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

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
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值