编译bluez-5.25 通过 Linux环境下运行

本次编译的是bluez 5版本以上的,之前的版本不支持蓝牙4.0,只有5版本以上支持4.0.我的Linux宿主机是Ubuntu14.04版本

本次编译参考http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARMhttp://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM

在这个基础上还做了一些小修改,避免一些错误。好开始记录步骤,比较繁琐,O(∩_∩)O。这里也对原文做一些解释。

zlib-1.2.8

zlib的编译不需要指定--host,但是后面配置完成后需要修改Makefile文件,以进行交叉编译。

源码:wget http://zlib.net/zlib-1.2.8.tar.gz

配置:./configure --prefix=/wsh_space/my_install/bluez5

修改Makefile:

CC=arm-cortex_a9-linux-gnueabi-gcc

LDSHARED=arm-cortex_a9-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map

CPP=arm-cortex_a9-linux-gnueabi-gcc -E

AR=arm-cortex_a9-linux-gnueabi-ar

RANLIB=arm-cortex_a9-linux-gnueabi-ranlib

编译:

make

make install

libffi-3.0.13

源码:wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5

编译:

make

make install

glib-2.40.0

编译glib依赖zlib, libffi and glibc >= 2.18,宿主机若是Ubuntu14.04,glibc的版本为2.19,这里是满足的。另外很可能会缺少glib-genmarshal ,我编译时是缺少了,这个好解决,执行命令

sudo apt-get install libglib2.0-dev
安装即可。下面是具体的步骤:

源码:wget http://ftp.gnome.org/pub/gnome/sources/glib/2.40/glib-2.40.0.tar.xz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5 PKG_CONFIG_PATH=/wsh_space/my_install/bluez5/lib/pkgconfig  glib_cv_stack_grows=no glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes

编译:

make

make install

D-Bus

D-Bus daemon会需要expat XML parser 库,所以这里需要先编译expat库。如果不安装会出现下面的错误:

checking for XML_ParserCreate_MM in -lexpat... no
configure: error: Explicitly requested expat but expat not found

步骤如下

expat-2.1.0

源码:wget http://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5

编译:

make

make install

D-Bus1.9.4

在使用原文中的配置时,编译会报错,如下:

corrupt.c:29:18: fatal error: glib.h: 没有那个文件或目录

/wsh_space/my_install/bluez5/include/glib-2.0/glib.h:30:26: fatal error: glib/galloca.h: 没有那个文件或目录

fatal error: glibconfig.h: 没有那个文件或目录

经过查看,是test目录下文件引用的.h文件路径不正确,可以一个一个修改路径,但是相当繁琐。

我的方法是,屏蔽test,增加--disable-tests选项。

源码:wget http://dbus.freedesktop.org/releases/dbus/dbus-1.9.4.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5 --disable-tests

编译:

make

make install

libical-1.0

bluez的编译需要libical的支持,编译libical需要cmake和g++,所以系统中需要这两个工具,可以运行下面两个命令进行安装,需要保持网络畅通。

sudo apt-get install cmake

sudo apt-get install g++-arm-linux-gnueabi

然后就可进行编译安装了

源码:wget http://downloads.sourceforge.net/freeassociation/libical-1.0.tar.gz

配置: export CC=arm-cortex_a9-linux-gnueabi-gcc

export CXX=arm-linux-gnueabi-g++

cmake -DCMAKE_INSTALL_PREFIX=/wsh_space/my_install/bluez5

注意这里的命令是直接在命令行执行的。

编译:

make

make install

Readline

编译readline是需要ncurses的支持,如果没有ncurses,编译时会报下面的错误。

/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `PC'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetflag'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetent'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `UP'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tputs'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgoto'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetnum'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `BC'
/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetstr'

引用ncurses的方法是,在make时添加SHLIB_LIBS=-lncurses选项

ncurses-5.9

源码:wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5 CXX="arm-linux-gnueabi-g++"

编译:

make

make install

Readline6.3

配置时需要添加bash_cv_wcwidth_broken=yes选项,避免出现下面的错误:

checking for wcwidth broken with unicode combining characters...
configure: error: in `/.../readline-6.3':
configure: error: cannot run test program while cross compiling

源码:wget ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5 bash_cv_wcwidth_broken=yes

编译:

make SHLIB_LIBS=-lncurses

make install

Building BlueZ

bluez包含了蓝牙所需的基本工具,如hciattach, hciconfig, hcitool and rfcomm等。

BlueZ 5.25 至少需要 GLib >= 2.28, D-Bus >= 1.6 and libudev >= 143,由于linudev是个相当麻烦的东西,为此在编译bluez时,把它给屏蔽了即可。

源码:wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.25.tar.xz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/wsh_space/my_install/bluez5 PKG_CONFIG_PATH=/wsh_space/my_install/bluez5/lib/pkgconfig CC="arm-cortex_a9-linux-gnueabi-gcc -L/wsh_space/my_install/bluez5/lib -I/wsh_space/my_install/bluez5/include"
--disable-systemd --disable-udev --disable-cups --disable-obex --enable-library

编译:

make

make install DESTDIR=/wsh_space/my_install/bluez5

注意这里的安装会生成一个特殊的文件,如下图所示:

在使用dbus-daemon时,是需要这个文件的,这个文件的结构如下图:

另外还需要把安装目录下的var文件夹拷贝到wsh_space/my_install/bluez5目录 下,如下图:

在开发板使用时,需要把wsh_space文件夹拷贝到系统的根目录下。

还需要一些库文件,我时直接把整个安装目录拷贝到开发板的/usr/local/bluetooth下。

到此,完成,其他的测试可以参考原文。

时间: 2024-11-09 06:47:31

编译bluez-5.25 通过 Linux环境下运行的相关文章

[Linux]如何在linux环境下运行HDP、HLDA

新手菜鸟记录如何在linux运行hdp.hlda HDP: 首先根据命令格式等输入 命令.路径.语料,并开始运行. 运行结束后,在结果文件中获得结果 找到mode-word-assignments.dat 并运行,得到带hdp后缀的文件,即为结果文件,格式为 文本id:类id. HLDA: 根据命令格式输入 ./main setting-d4.txt 等命令 运行, 不同的是,HLDA需要自己创建文件夹,mkdir一个文件夹.运行结束后,得到 得到结果文件,格式为文本id:类id.

【Jmeter Linux环境下运行方法】

Jmeter 1.cd  jmeter/apache-jmeter-4.0/bin 2.执行 ./jmeter -n -t jmx脚本文件 -l 测结果.jtl文件 -e -o html文件路径 原文地址:https://www.cnblogs.com/Ray-2019/p/11934750.html

linux系统下运行java项目的脚本编写

本文主要讲linux系统下运行jar包,至于如何打包jar包,放到linux系统下可以参考其他的博客. 在linux系统下运行jar包的命令如下: 1.java -jar xxxxx.jar  // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2.java -jar xxxxx.jar &   //当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 3.nohup Java -jar xxxxxx.jar &  //意思是不挂断运行命令,当账户退

从零教你在Linux环境下(ubuntu)如何编译hadoop2.4

问题导读: 1.如果获取hadoop src  maven包?2.编译hadoop需要装哪些软件?3.如何编译hadoop2.4?扩展:编译hadoop为何安装这些软件? 本文链接 http://www.aboutyun.com/thread-8130-1-1.html 一.首先下载hadoop源码包下载的方式还是比较多的1.svn的方式svn下载首先需要安装SVN,如果想尝试使用svn,可以参考源码管理.获取网络源码工具:TortoiseSVN使用手册,hadoop的svn下载地址点此2.压缩

在虚拟机linux环境下编译windows版adb fastboot

原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html 我根据虚拟机编译遇到的问题进行一些添加 [前提条件] Linux Android源码完整 虚拟机磁盘空间100G左右(60G用来存放代码和编译后的文件) swap 30G左右,若太小会导致在编译后提示缺失文件 [具体步骤] 理论上,只要下一个windows版本的SDK,里面就自带了fastboot和adb工具. 但我最近确实遇到了一个需要在linux下编译出windows版本的

在linux环境下编译运行OpenCV程序的两种方法

原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之后,我下面就介绍Command Line和CMake两种方式. 首先我先粘上我测试的代码吧,文件名为Test.c 1 #include <highgui.h> 2 3 int main(int argc,char ** argv) { 4 5 IplImage* img = cvLoadImage

mosquitto在Linux环境下的部署/安装/使用/测试

mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. 使用传统源码安装步骤: 步骤1:http://mosquitto.org/files/source/官网下载源码,放到Linux环境中.解压后,找到主要配置文件config.mk,其中包含mosquitto的安装选项,需要注意的是,默认情况下mosquitto的安装需要OpenSSL(一个强大的安全

衡阳高防服务器租用Linux环境下架设DNS服务器教程

衡阳高防服务器租用Linux环境下架设DNS服务器教程 DNS是域名系统Domain Name System的缩写,是一种组织域层次结构的计算机和网络服务命名系统.当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息.本文就带领大家在Linux环境下建立一个DNS服务器. 一.相关知识概述 DNS(Domain Name System)即域名服务系统,作用是完成域名与IP地址的互换.网络上的每一台主机都有一个域名,域名给出有关主机的IP地址.MAIL路由信息

Linux环境下实现对文件读写操作

---- 今天分享一下在linux系统在实现对文件读写一些基本的操作,在这之前我们要掌握一些基本的技能在Linux环境下.比如查看命令和一个函数的具体用法,就是相当于查手册,在Linux下有一个man手册非常有用:man查询手册man 1 +命令 这里的1表示为查询的是Linux命令man 2 xxx 这里的2表示为查询的是linux apiman 3 xxx 这里的3表示为查询的是c库函数在了解了这个后我们就可以开始来实现标题说的操作了.一.在linux环境下常用文件接口函数:open.clo