Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1220470
  • 博文数量: 386
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4121
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-04 13:04
  • 认证徽章:
文章分类

全部博文(386)

文章存档

2019年(24)

2018年(135)

2017年(159)

2016年(68)

我的朋友

分类: 嵌入式

2017-11-02 10:44:38

主要参考:
http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM
但是实际上还是要改很多东西,编译过程非常曲折。例如这篇wiki中禁用了udev,估计是因为交叉编译udev太复杂了。其它小修改非常多,大部分可以用google搜索出错信息解决。
注意很多包安装时不能sudo make install,而应该sudo su,然后make install,否则会出现找不到命令的错误。

原文转载如下:

Prerequisites

GLib

zlib

zlib is a compression library and a prerequisite for building GLib.

Download, cross compile and install the zlib compression libraries. Configure doesn't accept the --host parameter (reports unknown option), so you need to hack the makefile.

wget http://zlib.net/zlib-1.2.8.tar.gz tar -xzf zlib-1.2.8.tar.gz cd zlib-1.2.8/ ./configure --prefix=/usr/arm-linux-gnueabi

Edit the makefile and prefix the build tools with arm-linux-gnueabi-.

CC=arm-linux-gnueabi-gcc LDSHARED=arm-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map CPP=arm-linux-gnueabi-gcc -E AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib

Make and install:

make make install

libffi

libffi is the Portable Foreign Function Interface Library and is a prerequisite for building GLib. It is an interface that allows code written in one language to call code written in another language.

Download, build and install:

wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz tar -xzf libffi-3.0.13.tar.gz cd libffi-3.0.13/ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi make make install

GLib

GLib is part of the GTK+ Project

GLib requires zlib, libffi and glibc >= 2.18 to successfully build. If you are building on ubuntu 14.04, the arm-linux-gnueabi should come installed with glibc 2.19 hence we don't rebuild it.

GLib requires the glib-genmarshal tool installed on your build system otherwise the following error is likey to result:

checking for glib-genmarshal... no configure: error: Could not find a glib-genmarshal in your PATH

An easy way to resolve this is to install libglib2.0-dev:

sudo apt-get install libglib2.0-dev

To build Glib, download, build and install:

wget http://ftp.gnome.org/pub/gnome/sources/glib/2.40/glib-2.40.0.tar.xz tar -xJf glib-2.40.0.tar.xz cd glib-2.40.0 ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi PKG_CONFIG_PATH=/usr/arm-linux-gnueabi/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

The Expat XML Parser

Expat is an XML parser library written in C and is the only required dependency for the D-Bus daemon.

Download, build and install:

wget http://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz tar -xzf expat-2.1.0.tar.gz cd expat-2.1.0/ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi make make install

D-Bus

D-Bus is a message bus system. It requires the expat library to successfully build otherwise the following error may result:

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

Download, build and install:

wget http://dbus.freedesktop.org/releases/dbus/dbus-1.8.0.tar.gz tar -xzf dbus-1.8.0.tar.gz cd dbus-1.8.0/ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi make make install make install DESTDIR=/home/export/rootfs

libical

libical provides a library for the iCal standard. It is a prerequisite of BlueZ.

libical requires cmake and g++ cross compilers to be installed:

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

Download, build and install the library:

wget http://downloads.sourceforge.net/freeassociation/libical-1.0.tar.gz tar -xzf libical-1.0.tar.gz cd libical-1.0/ export CC=arm-linux-gnueabi-gcc export CXX=arm-linux-gnueabi-g++ cmake -DCMAKE_INSTALL_PREFIX=/usr/arm-linux-gnueabi make make install

Readline

Readline references functions in ncurses. If ncurses is not linked, the following errors are likely to result when building BlueZ:

/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'

First we must build ncurses and then link it to Readline using SHLIB_LIBS=-lncurses.

ncurses

Download, build and install the ncurses library:

wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz tar -xzf ncurses-5.9.tar.gz cd ncurses-5.9 ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi CXX="arm-linux-gnueabi-g++" make make install

Readline

Download, build and install the readline library:

wget ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz tar -xzf readline-6.3.tar.gz cd readline-6.3/ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi bash_cv_wcwidth_broken=yes make SHLIB_LIBS=-lncurses make install

The bash_cv_wcwidth_broken=yes parameter avoids the following error when cross-compiling:

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

Building BlueZ

BlueZ is the official Bluetooth protocol stack for Linux and include tools such as hciattach, hciconfig, hcitool and rfcomm.

BlueZ 5.18 requires GLib >= 2.28, D-Bus >= 1.6 and libudev >= 143. When these prerequisites are meet, you can download, build and install BlueZ using:

wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.18.tar.xz tar -xJf bluez-5.18.tar.xz cd bluez-5.18 ./configure --host=arm-linux-gnueabi --prefix= PKG_CONFIG_PATH=/usr/arm-linux-gnueabi/lib/pkgconfig --disable-systemd --disable-udev --disable-cups --disable-obex --enable-library make make install DESTDIR=/usr/arm-linux-gnueabi make install DESTDIR=/home/export/rootfs

Installing

Some of the BlueZ tools (e.g. sdptool requires libglib, bluetoothd requires libdbus-1, dbus-daemon requires libexpat, bluetoothctl requires libreadline) will require the following shared libraries installed:

cp /usr/arm-linux-gnueabi/lib/libglib-2.0.so.0.4000.0 /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/libdbus-1.so.3.8.3 /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/libexpat.so.1.6.0 /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/libreadline.so.6.3 /home/export/rootfs/lib

The Bluetooth Daemon requires the D-Bus Daemon to be running, otherwise the following error will result:

D-Bus setup failed: Failed to connect to socket /usr/arm-linux-gnueabi/var/run/dbus/system_bus_socket: No such file or directory

Copy the default bluetooth.conf over to dbus-1/systemd.d on the target:

cp bluez-5.18/src/bluetooth.conf /home/export/rootfs/etc/dbus-1/system.d/

The D-Bus Daemon wants to spawn from the user/group messagebus/messagebus. Failure to create a user and group results with:

Failed to start message bus: Could not get UID and GID for username "messagebus"

Create the appropriate group and user account:

addgroup -S messagebus adduser -S messagebus -G messagebus

Now start the D-Bus Daemon:

dbus-daemon --system

Finally, start the Bluetooth Daemon:

/libexec/bluetooth/bluetoothd

Testing

The hciconfig (BlueTooth Host Controller Interface Configuration utility) will show any BlueTooth host controllers present:

# hciconfig hci0: Type: BR/EDR Bus: USB BD Address: 00:19:0E:15:5A:EF ACL MTU: 1021:8 SCO MTU: 64:1 DOWN RX bytes:0 acl:0 sco:0 events:0 errors:0 TX bytes:0 acl:0 sco:0 commands:0 errors:0

You can bring up the interface by issuing:

# hciconfig hci0 up

Now you can scan for BlueTooth devices:

# hcitool -i hci0 scan Scanning ... 7C:6D:62:9A:86:9A n/a C8:19:F7:EF:D7:03 GT-P5100 B4:62:93:CF:82:F5 GT-I9300

Ping a BlueTooth Device:

# l2ping C8:19:F7:EF:D7:03 Ping: C8:19:F7:EF:D7:03 from 00:19:0E:15:5A:EF (data size 44) ... 44 bytes from C8:19:F7:EF:D7:03 id 0 time 6.00ms 44 bytes from C8:19:F7:EF:D7:03 id 1 time 5.86ms 44 bytes from C8:19:F7:EF:D7:03 id 2 time 4.82ms 44 bytes from C8:19:F7:EF:D7:03 id 3 time 34.82ms 44 bytes from C8:19:F7:EF:D7:03 id 4 time 6.04ms 44 bytes from C8:19:F7:EF:D7:03 id 5 time 7.35ms 44 bytes from C8:19:F7:EF:D7:03 id 6 time 8.54ms 44 bytes from C8:19:F7:EF:D7:03 id 7 time 6.06ms 44 bytes from C8:19:F7:EF:D7:03 id 8 time 23.45ms

Interrogate SDP (Service Discovery Protocol) Descriptors:

# sdptool -i hci0 browse B4:62:93:CF:82:F5
Browsing B4:62:93:CF:82:F5 ... 
阅读(720) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册