树莓派1B+ 安装Bluez [转贴]

By | 2020-04-18

转自:  https://www.jianshu.com/p/6466eafd24e1

树莓派3B自带蓝牙模块,笔者就想通过树莓派蓝牙模块实现数据传输的可编程化,就想在树莓派上搭建一个蓝牙编程环境。以下是笔者搭建环境所出现的一些步骤、问题及其应对方案。

bluez的安装需要手动编译,在bluez官网(http://www.bluez.org/)中找到较新版本进行下载,笔者写文章时的最新版本是5.44,找到链接后在 ~/Downloads/下输入命令

$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.44.tar.xz

下载到bluez源代码压缩包,执行

$ xz -d bluez-5.44.tar.xz

解压得到bluez-5.44.tar压缩包,再执行

$ tar -xvf bluez-5.44.tar

解压完成后,当前目录中就会多出来一个bluez-5.44目录,进入

$ cd bluez-5.44

ps:可以参照一下源码中附带的 README 文件,里面有大略的编译步骤,不过一些依赖包并没有给出详细的包名,需要你去一点一点探索。

首先更新一下源

$ sudo apt-get update

*** 请选择优质镜像站! ***
*** 请选择优质镜像站! ***
*** 请选择优质镜像站! ***

国内清华的源还不错,可以戳这里https://mirror.tuna.tsinghua.edu.cn/help/raspbian/,某些劣质源可能部分依赖版本跟不上,会导致一些问题,(笔者就是这样不知不觉废了几个系统

*** 一步到位安装方式: ***
按照README文件中的提示,在安装bluez的时候需要安装几个依赖

- GCC compiler
- GLib library
- D-Bus library
- udev library (optional)
- readline (command line clients)

直接安装这些依赖即可

sudo apt-get install gcc libglib2.0-dev libdbus-1-dev libdbus-c++-dev libudev-dev libical-dev libreadline-dev

在当前目录中,执行

$ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var
错误checking systemd system unit dir... configure: error: systemd system unit directory is required

此时如果之前你没有安装过的话,可能会提示你安装一些依赖

  1. 如果提示
configure: error: GLib >= 2.28 is required

安装libglib2.0-dev即可

$ sudo apt-get install libglib2.0-dev

如果出现类似

The following packages have unmet dependencies
libglib2.0-dev : Depends: libglib2.0-0 (= 2.33.12+really2.32.4-5) but 2.42.1-1 is to be installed
                  Depends: libglib2.0-bin (= 2.33.12+really2.32.4-5) but 2.42.1-1 is to be installed
                  Depends: libpcre3-dev (>= 8.11) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

解决方法是降级安装这些依赖项,即执行

sudo apt-get install libglib2.0-0=2.33.12+really2.32.4-5 libglib2.0-bin=2.33.12+really2.32.4-5 libpcre3=1:8.30-5 libpcre3-dev

***注意⚠️:简单来说,遇到这种情况不要试图去直接安装这些包,系统会提示无法安装,需要你指定安装的版本,这样才能正常安装,包的版本可以直接填写该依赖需要的版本,即括号里面提示的版本号。不过遇到这种情况,请关注一下是不是你的源有问题,可以尝试先换成官方源。 ***
安装好依赖项之后就可以继续安装libglib2.0-dev了,完成后请重试configure的那条命令。

  1. 如果提示
configure: error: D-Bus >= 1.6 is required

安装libdbus-1-dev 和 libdbus-c++-dev 即可解决,执行

$ sudo apt-get install libdbus-1-dev libdbus-c++-dev

如果也出现依赖未被安装的问题,可以按照第一条的解决方案,下同。

  1. 如果出现
configure: error: libudev >= 172 is required

直接安装 libudev-dev 即可

$ sudo apt-get install libudev-dev
  1. 如果是
configure: error: libical is required

安装 libical-dev 即可

$ sudo apt-get install libical-dev
  1. 如果是
configure: error: readline header files are required

安装 libreadline-dev 依赖即可

$ sudo apt-get install libreadline-dev

6. 如果是

checking systemd system unit dir… configure: error: systemd system unit directory is required

编译时

./configure –prefix=/usr –mandir=/usr/share/man –sysconfdir=/etc –localstatedir=/var -sysconfdir=/etc –localstatedir=/var –enable-experimental –with-systemdsystemunitdir=/lib/systemd/system –with-systemduserunitdir=/usr/lib/systemd

在上面编译时加入红字部分即可.

 

如果没有任何报错,那么配置应该生成好了,接下来编译安装即可,直接在当前目录下执行:
sudo make  && sudo make install

等运行完毕,bluez协议栈就安装好了。

可以安装 libbluetooth-dev

sudo apt-get install libbluetooth-dev

然后在C程序中编写蓝牙程序。


最后推荐一篇博客
http://blog.csdn.net/kobbee9/article/details/7751372,讲得蛮好的。

作者:这里的三鹿18弯
链接:https://www.jianshu.com/p/6466eafd24e1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

發佈回覆