嵌入式平台ZYNQ7000蓝牙BlueZ4.95库的交叉编译

一、前言

     最近听同事说蓝牙BlueZ库很难编译成功,有几次直接把Linux系统编崩溃了(真的有这么夸张吗?反正我目前没有遇到过)。开始他们编译BlueZ5.5+的,依赖库太多,只要一个库没编译成功,之前所有的准备工作都前功尽弃了;同事无奈下转战4.95,基本都是按照网上的流程走一遍,但到了编译dbus库的时候编译不过,而且还出现了在Linux关机后无法启动了(系统崩溃了),他后来没办法,直接拿之前产品上已经移植好的bluez-3.36来暂时用用,幸运的是恰恰能用。。。。。。(虽然之前产品和目前的编译器不一样,之前时4.2.2的版本,现在的4.9.2,估计编译时所用到两个编译器的源码相同)当然,做开发,长远来说这样是解决不了问题的,而且我相信一定是可以编译通过的(Linux开源的好处就是能通过错误提示去查找源码位置),开源的代码,只要理论上可行,况且别人都已经实现了的,只是没有找到正确的方法,或者没有定位到编译出错的问题在哪里,或者开发意志不强烈,呵呵。

      下面我就成功编译了bluez-4.95,截图显示了整个流程,毕竟文不如图,图不如表。以及在编译过程中遇到了什么问题,然后又是怎么解决的!当然,很多都参考了网上其他人的许多资料,但很多资料都有些小问题(不知道笔者是不是有意的哈,强迫症来了---如果要找出杀人凶手,身边的任何人都可以是嫌疑人),网上的有的资料要不是编译指令有问题,要不就是源码包的匹配有些问题,而且这些笔者也没有展示他成功编译的证据,我完全可以怀疑他是在作假??(讲下笑,认真你就输了)

开发环境

PC平台:Linux version 4.4.0-121-generic (buildd@lcy01-amd64-004) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) ) #145-Ubuntu SMP Fri Apr 13 13:47:23 UTC 2018

交叉编译器:arm-xilinx-linux-gnueabi-gcc  gcc version 4.9.2 (Sourcery CodeBench Lite 2015.05-17)


二、编译BlueZ4.95库流程

源码包一共为5个

                 expat-2.0.1.tar.gz 

                 dbus-1.10.0.tar.gz 

                 glib-2.16.2.tar.gz 

                bluez-4.95.tar.gz 

                bluez-hcidump-2.5.tar.gz

expat-2.0.1.tar.gz 
dbus-1.10.0.tar.gz 
glib-2.16.2.tar.gz 
bluez-4.95.tar.gz 
bluez-hcidump-2.5.tar.gz

1、expat-2.0.1库的编译

--prefix参数为指定目录下存放最终输出的文件(最终要移植开发板的文件) --host为交叉编译器的前缀 CC为交叉编译器的绝对路径,配置成功会生成相应的Makefile;

./configure --prefix=/usr/local/bluez-4.95 --host=arm-xilinx-linux-gnueabi  CC=/mnt/workspace/qt/cross_compilers/bin/arm-xilinx-linux-gnueabi-gcc




make  //下图是make后的结果


make install //下图为make install后的结果

编译expat-2.0.1库过程中shell的命令记录:

目标目录的文件如下:


2dbus-1.10.0库的编译

 在configure参数中增加依赖库expat的头文件(-I)以及库文件(-L),我同事按照网上的文章,据说就是编译dbus-1.4.1库时把他的Linux系统编崩溃了,让后他用了个最高的dbus来编译,也没通过,于是就放弃了,这是一个比较悲伤的故事。我野尝试过编译dbus-1.4.1,系统没有崩溃但确实编译出错,于是我就换成了1.10.0版本,为什么?(因为我看到别人编译bluez-3.3.6的用了它,可能能编译通过纯属我好彩)

./configure --prefix=/usr/local/bluez-4.95 --host=arm-xilinx-linux-gnueabi  CC=/mnt/workspace/qt/cross_compilers/bin/arm-xilinx-linux-gnueabi-gcc --with-x=no CFLAGS=-I/usr/local/bluez-4.95/include LDFLAGS=-L/usr/local/bluez-4.95/lib

 


make //下图是make后的结果


make install //下图是make install后的结果


编译过程中shell的命令记录:


目标目录的文件如下:


3、编译 glib-2.16.2库

在./onfigure时提示configure: error: Could not find a glib-genmarshal in your PATH


需要执行apt-get install libglib2.0-dev命令更新库,但没有更新成功,连接失败;

apt-get install libglib2.0-dev
apt-get update

但更新库时又提示Unable to fetch some archives,maybe run apt-get update or try with --fix-missing?

sudo vim /etc/resolv.conf 
nameserver 8.8.8.8 //添加在最下面。或者直接更换源来解决(替换/etc/apt/sources.list中的源)

更新成功后再安装libglib2.0-dev库,再./configure 配置

./configure --prefix=/usr/local/bluez-4.95 --host=arm-xilinx-linux-gnueabi  CC=/mnt/workspace/qt/cross_compilers/bin/arm-xilinx-linux-gnueabi-gcc glib_cv_stack_grows=no glib_cv_uscore=yes glib_cv_have_qsort_r=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes 

make //下图是make后的结果


make install //下图是make install后的结果

编译 glib-2.16.2过程shell的命令记录:

目标目录的文件如下:


4、编译bluez-4.95库

在执行./configure时提示configure: error: D-Bus library is required


export PKG_CONFIG_LIBDIR=/usr/local/bluez-4.95/lib/pkgconfig

再执行./configure配置,成功后再make

./configure --prefix=/usr/local/bluez-4.95 --host=arm-xilinx-linux-gnueabi  CC=/mnt/workspace/qt/cross_compilers/bin/arm-xilinx-linux-gnueabi-gcc --enable-audio --enable-network --enable-serial --enable-input --enable-service --enable-health  --enable-usb --enable-tools --enable-bccmd --enable-hid2hci --enable-hidd --enable-pand --enable-cups  --enable-test  CFLAGS=-I/usr/local/bluez-4.95/incl
ude LDFLAGS=-L/usr/local/bluez-4.95/lib
make //下图是make后的结果

make install //下图是make install后的结果

编译bluez-4.95过程shell的命令记录:


目标目录的文件如下:


5、编译bluez-hcidump-2.5库

首先配置再make、make install

./configure --prefix=/usr/local/bluez-4.95 --host=arm-xilinx-linux-gnueabi  CC=/mnt/workspace/qt/cross_compilers/bin/arm-xilinx-linux-gnueabi-gcc  

编译bluez-hcidump-2.5过程中shell的命令记录:

库已经成功编译,发现目标/usr/local/bluez-4.95下的bin和sbin目录下有很多工具,但工具都只能在嵌入式arm平台上运行,当然/usr/local/bluez-4.95目录下的include就是执行文件所依赖的头文件,lib就是执行文件所依赖的库文件

目标目录的文件如下:


后续我会演示编译5.0以上的版本,据说5.0以下的都是用的蓝牙2.0,要5.0以上才能兼容蓝牙4.0;而且我同事说5.0以上的依赖库太多了,要编译成功的机率那是微乎其微,但是我不信不能成功哈!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值