Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2285579
  • 博文数量: 393
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4177
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-04 13:04









分类: 嵌入式

2017-11-02 10:44:38

注意很多包安装时不能sudo make install,而应该sudo su,然后make install,否则会出现找不到命令的错误。





 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 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,,--version-script, CPP=arm-linux-gnueabi-gcc -E AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib

Make and install:

make make install


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


 is part of the 

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


The Expat XML Parser

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

Download, build and install:

wget 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


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


 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 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 references functions in ncurses. If ncurses is not linked, the following errors are likely to result when building BlueZ:

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

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


Download, build and install the ncurses library:

wget 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


Download, build and install the readline library:

wget 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

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


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/ /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/ /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/ /home/export/rootfs/lib cp /usr/arm-linux-gnueabi/lib/ /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:



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 ... 
阅读(1459) | 评论(0) | 转发(0) |