在开发ublox w263 wifi蓝牙时,之前是使用yocto系统集成编译出的bluez工具,减少了自己编译工具软件和依赖库的工作,切换项目使用原生linux系统后,所以的软件需要自己编译,不想编译每个依赖文件和库,所以使用buildroot自动编译bluez蓝牙工具。
依赖软件和库:bluez,readline,dbus,expat,glib,pcre。
buildroot使用外部编译链
buildroot使用的版本是:buildroot-2017.02.3
1、配置默认的平台:make imx6q-sabresd_defconfig
2、配置外部编译链:make menuconfig
Target options --->
Toolchain --->
[wangyb@wangyb-VirtualBox:bin]$ ./arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/wangyb/WG7101/mg7101-sdk/toolchains/arm-linux-gnueabi/bin/../libexec/gcc/arm-linux-gnueabi/4.9.4/lto-wrapper
Target: arm-linux-gnueabi
Configured with: /home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=soft --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/sysroots/arm-linux-gnueabi --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabi/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
内核和uboot不进行编译:
Kernel --->
[ ] Linux Kernel
Bootloaders --->
[ ] U-Boot
配置bluez
Target packages --->
Networking applications --->
这里选择bluez-utils 5.x,如果选择bluez-utils的话编译后缺失工具,没有bluetoothctl软件。
5.x版本是bluez-5.43,bluez-utils的版本是bluez-4.101应该是比较老所以缺失或者不是bluetoothctl。
编译
编译问题及解决方法:
Incorrect selection of kernel headers: expected 3.10.x, got 4.0.x
package/pkg-generic.mk:206: recipe for target '/home/wangyb/WG7101/tools/buildroot-2017.02.3/output/build/toolchain-external-custom/.stamp_configured' failed
make[1]: *** [/home/wangyb/WG7101/tools/buildroot-2017.02.3/output/build/toolchain-external-custom/.stamp_configured] Error 1
Makefile:79: recipe for target '_all' failed
make: *** [_all] Error 2
【touch /home/wangyb/WG7101/tools/buildroot-2017.02.3/output/build/toolchain-external-custom/.stamp_configured】
/home/wangyb/WG7101/tools/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/include/gnu/stubs.h:10:29: fatal error: gnu/stubs-hard.h: 没有那个文件或目录
# include <gnu/stubs-hard.h>【注释】
debianutils/lib.a(mktemp.o):在函数‘mktemp_main’中:
mktemp.c:(.text.mktemp_main+0x98): 警告: the use of `mktemp' is dangerous, better use `mkstemp'
/home/wangyb/WG7101/mg7101-sdk/toolchains/arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/4.9.4/../../../../arm-linux-gnueabi/bin/ld: error: applets/built-in.o uses VFP register arguments, busybox_unstripped does not
/home/wangyb/WG7101/mg7101-sdk/toolchains/arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/4.9.4/../../../../arm-linux-gnueabi/bin/ld: 合并目标文件 applets/built-in.o 的特定数据时失败
/home/wangyb/WG7101/mg7101-sdk/toolchains/arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabi/4.9.4/../../../../arm-linux-gnueabi/bin/ld: error: libbb/lib.a(appletlib.o) uses VFP register arguments, busybox_unstripped does not
【Target options修改】
>>> Executing post-image script board/freescale/common/imx/post-image.sh
file(zImage): stat(/home/wangyb/WG7101/tools/buildroot-2017.02.3/output/images/zImage) failed: No such file or directory
vfat(boot.vfat): could not setup zImage
【cp ../../mg7101-sdk/kernel/linux-3.10.79/zImage output/images/
cp ../../mg7101-sdk/images/u-boot.bin output/images/u-boot.imx】
编译后文件:
[wangyb@wangyb-VirtualBox:buildroot-2017.02.3]$ ls output/target/usr/bin/ -lht
-rwxr-xr-x 1 wangyb wangyb 167K 4月 13 19:00 gatttool
-rwxr-xr-x 1 wangyb wangyb 214K 4月 13 19:00 hcidump
-rwxr-xr-x 1 wangyb wangyb 110K 4月 13 19:00 hcitool
-rwxr-xr-x 1 wangyb wangyb 57K 4月 13 19:00 mpris-proxy
-rwxr-xr-x 1 wangyb wangyb 20K 4月 13 19:00 aserver
-rwxr-xr-x 1 wangyb wangyb 88K 4月 13 19:00 bluetoothctl
-rwxr-xr-x 1 wangyb wangyb 13K 4月 13 19:00 dbus-launch
-rwxr-xr-x 1 wangyb wangyb 4.8K 4月 13 19:00 dbus-uuidgen
-rwxr-xr-x 1 wangyb wangyb 6.4K 4月 13 19:00 gio-querymodules
-rwxr-xr-x 1 wangyb wangyb 17K 4月 13 19:00 gsettings
-rwxr-xr-x 1 wangyb wangyb 107K 4月 13 19:00 hciattach
-rwxr-xr-x 1 wangyb wangyb 27K 4月 13 19:00 pcregrep
-rwxr-xr-x 1 wangyb wangyb 115K 4月 13 19:00 rctest
-rwxr-xr-x 1 wangyb wangyb 145K 4月 13 19:00 bccmd
-rwxr-xr-x 1 wangyb wangyb 22K 4月 13 19:00 bluemoon
-rwxr-xr-x 1 wangyb wangyb 16K 4月 13 19:00 btattach
-rwxr-xr-x 1 wangyb wangyb 7.3K 4月 13 19:00 dbus-run-session
-rwxr-xr-x 1 wangyb wangyb 7.9K 4月 13 19:00 dbus-update-activation-environment
-rwxr-xr-x 1 wangyb wangyb 12K 4月 13 19:00 gapplication
-rwxr-xr-x 1 wangyb wangyb 27K 4月 13 19:00 gdbus
-rwxr-xr-x 1 wangyb wangyb 9.3K 4月 13 19:00 gresource
-rwxr-xr-x 1 wangyb wangyb 149K 4月 13 19:00 sdptool
-rwxr-xr-x 1 wangyb wangyb 107K 4月 13 19:00 ciptool
-rwxr-xr-x 1 wangyb wangyb 6.5K 4月 13 19:00 dbus-cleanup-sockets
-rwxr-xr-x 1 wangyb wangyb 144K 4月 13 19:00 dbus-daemon
-rwxr-xr-x 1 wangyb wangyb 17K 4月 13 19:00 dbus-monitor
-rwxr-xr-x 1 wangyb wangyb 14K 4月 13 19:00 dbus-test-tool
-rwxr-xr-x 1 wangyb wangyb 81K 4月 13 19:00 l2ping
-rwxr-xr-x 1 wangyb wangyb 93K 4月 13 19:00 l2test
-rwxr-xr-x 1 wangyb wangyb 52K 4月 13 19:00 pcretest
-rwxr-xr-x 1 wangyb wangyb 86K 4月 13 19:00 rfcomm
-rwxr-xr-x 1 wangyb wangyb 408K 4月 13 19:00 btmon
-rwxr-xr-x 1 wangyb wangyb 17K 4月 13 19:00 dbus-send
-rwxr-xr-x 1 wangyb wangyb 53K 4月 13 19:00 gio
-rwxr-xr-x 1 wangyb wangyb 153K 4月 13 19:00 hciconfig
-rwxr-xr-x 1 wangyb wangyb 7.7K 4月 13 19:00 hex2hcd
[wangyb@wangyb-VirtualBox:buildroot-2017.02.3]$ ls output/target/usr/sbin/ -lht
-rwxr-xr-x 1 wangyb wangyb 375K 4月 13 19:00 bluetoothd
-rwxr-xr-x 1 wangyb wangyb 71K 4月 13 19:00 hciattach
-rwxr-xr-x 1 wangyb wangyb 20K 4月 13 19:00 hciemu
-rwxr-xr-x 1 wangyb wangyb 133K 4月 13 19:00 hciconfig
[wangyb@wangyb-VirtualBox:buildroot-2017.02.3]$ ls output/target/usr/libexec/bluetooth/ -lh
-rwxr-xr-x 1 wangyb wangyb 716K 4月 13 19:00 bluetoothd
-rwxr-xr-x 1 wangyb wangyb 313K 4月 13 19:00 obexd
[wangyb@wangyb-VirtualBox:buildroot-2017.02.3]$ ls output/target/usr/lib -lht
-rwxr-xr-x 1 wangyb wangyb 108K 4月 13 19:00 libexpat.so.1.6.2
-rwxr-xr-x 1 wangyb wangyb 178K 4月 13 19:00 libncurses.so.5.9
-rwxr-xr-x 1 wangyb wangyb 117K 4月 13 19:00 libbluetooth.so.3.18.14
-rwxr-xr-x 1 wangyb wangyb 35K 4月 13 19:00 libcheck.so.0.0.0
-rwxr-xr-x 1 wangyb wangyb 233K 4月 13 19:00 libdbus-1.so.3.14.10
-rwxr-xr-x 1 wangyb wangyb 40K 4月 13 19:00 libform.so.5.9
-rwxr-xr-x 1 wangyb wangyb 1.3M 4月 13 19:00 libgio-2.0.so.0.5000.2
-rwxr-xr-x 1 wangyb wangyb 8.1K 4月 13 19:00 libpanel.so.5.9
-rwxr-xr-x 1 wangyb wangyb 5.7K 4月 13 19:00 libpcreposix.so.0.0.4
-rwxr-xr-x 1 wangyb wangyb 212K 4月 13 19:00 libreadline.so.7.0
-rwxr-xr-x 1 wangyb wangyb 72K 4月 13 19:00 libusb-1.0.so.0.1.0
-rwxr-xr-x 1 wangyb wangyb 78K 4月 13 19:00 libbluetooth.so.3.13.0
-rwxr-xr-x 1 wangyb wangyb 24K 4月 13 19:00 libffi.so.6.0.4
-rwxr-xr-x 1 wangyb wangyb 3.6K 4月 13 19:00 libgthread-2.0.so.0.5000.2
-rwxr-xr-x 1 wangyb wangyb 28K 4月 13 19:00 libhistory.so.7.0
-rwxr-xr-x 1 wangyb wangyb 227K 4月 13 19:00 libpcre.so.1.2.8
-rwxr-xr-x 1 wangyb wangyb 71K 4月 13 19:00 libz.so.1.2.11
-rwxr-xr-x 1 wangyb wangyb 816K 4月 13 19:00 libasound.so.2.0.0
-rwxr-xr-x 1 wangyb wangyb 234K 4月 13 19:00 libgobject-2.0.so.0.5000.2
-rwxr-xr-x 1 wangyb wangyb 22K 4月 13 19:00 libmenu.so.5.9
-rwxr-xr-x 1 wangyb wangyb 364K 4月 13 19:00 libsndfile.so.1.0.28
-rwxr-xr-x 1 wangyb wangyb 901K 4月 13 19:00 libglib-2.0.so.0.5000.2
-rwxr-xr-x 1 wangyb wangyb 9.7K 4月 13 19:00 libgmodule-2.0.so.0.5000.2
drwxr-xr-x 3 wangyb wangyb 4.0K 4月 13 19:00 bluez
[wangyb@wangyb-VirtualBox:buildroot-2017.02.3]$ ls output/images/ -lh
-rw-r--r-- 1 wangyb wangyb 16M 4月 13 19:00 boot.vfat
-rw-r--r-- 1 wangyb wangyb 17M 4月 13 19:00 rootfs.ext2
lrwxrwxrwx 1 wangyb wangyb 11 4月 13 19:00 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 wangyb wangyb 14M 4月 13 19:00 rootfs.tar
-rw-r--r-- 1 wangyb wangyb 41M 4月 13 19:00 sdcard.img
-rw-r--r-- 1 wangyb wangyb 509K 4月 13 09:56 u-boot.imx
-rwxrwxr-x 1 wangyb wangyb 3.9M 4月 13 09:56 zImage
到这里bluez就编译完成了,编译出需要的软件和库,接下来就是研究如何开启蓝牙功能。