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

来源:互联网 发布:2016淘宝商品排行榜 编辑:程序博客网 时间:2024/05/27 14:14

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/buildsed -i 19s/gcc/arm-linux-gnueabihf-gcc/g Makefilesed -i 30s/gcc/arm-linux-gnueabihf-gcc/g Makefilesed -i 31s/gcc/arm-linux-gnueabihf-gcc/g Makefilesed -i 39s/ar/arm-linux-gnueabihf-ar/g Makefilesed -i 40s/ranlib/arm-linux-gnueabihf-ranlib/g Makefilesed -i 41s/ldconfig/arm-linux-gnueabihf-ldconfig/g Makefilemake&&make install

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

#!/bin/sh./configure --prefix=$PWD/buildmake&&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/buildsed -i 35s/gcc/arm-linux-gnueabihf-gcc/g Makefilesed -i 29s/gcc/arm-linux-gnueabihf-gcc/g lib/Makefilesed -i 31s/ar/arm-linux-gnueabihf-ar/g lib/Makefilesed -i 35s/ranlib/arm-linux-gnueabihf-ranlib/g lib/Makefilesed -i 27s/gcc/arm-linux-gnueabihf-gcc/g po/Makefilemake && make install

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

#!/bin/shecho "glib_cv_stack_grows=no">config.cacheecho "glib_cv_uscore=no">>config.cacheecho "ac_cv_func_posix_getpwuid_r=yes">>config.cacheecho "ac_cv_func_posix_getgrgid_r=yes">>config.cacheecho "ac_cv_lib_rt_clock_gettime=no">>config.cacheecho "glib_cv_monotonic_clock=yes">>config.cache#add this line "AC_DEFINE(STDC_HEADERS,1,[Define to include stddef.h])" before AC_CHECK_ALIGNOFsed -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-gnueabihfmake && 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=nomake && make install#需要将--prefix=$PWD/build参数去掉重新编译,然后将bin目录下的所需文件拷贝过来

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

#!/bin/shmkdir build &&cd build &&#cmake -DCMAKE_INSTALL_PREFIX=/usr \#      -DCMAKE_BUILD_TYPE=Release  \#      -DSHARED_ONLY=yes           \#      .. &&export CC=arm-linux-gnueabi-gccexport 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-sharedmake && make install

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

#!/bin/shsed -i  '6324s/yes/no/g' configure./configure --host=arm-linux-gnueabihf --prefix=$PWD/buildmake 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 onDiscovery 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:90Attempting 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: yesRequest PIN code[agent] Enter PIN code: 1234[CHG] Device 00:12:34:56:78:90 Paired: yesPairing successful[CHG] Device 00:12:34:56:78:90 Connected: no
0 0
原创粉丝点击