分享

ARM USB蓝牙,Bluez 移植。

 joy_chen 2013-07-29

1、我的操作环境是  

主机:xp + VMware ubuntu 10.10 。 开发板:OK6410 。 文件系统: yaffs2 。 蓝牙:蓝牙适配器(适配器在PC ubuntu 下测试可用)。交叉编译器:arm-linux-gcc 4.3.2

操作环境环境提示:如果你有red hat 或者 Fedora 这两个操作环境,建议你首选这两个环境,应为Ubuntu 操作起来问题太多了。

2、配置内核支持Bluetooth,

2.1 make menuconfig

[*] Networking support  --->                

<*>   Bluetooth subsystem support  --->    //蓝牙子系统必须选择

<*>   L2CAP protocol suppor       //逻辑链路控制和适配协议。

<*>   SCO links support           //蓝牙语音和耳机支持

<*>   RFCOMM protocol suppor      //面向流的传输协议,支持拨号网络等

[*]   RFCOMM TTY support          //

<*>   BNEP protocol support       //蓝牙网络封装协议,自组网支持

[*]   Multicast filter support    //蓝牙多播,支持支持BNEP

[*]   Protocol filter support //蓝牙多播,支持支持支持BNEP

<*>   HIDP protocol support       //基本支持协议

Bluetooth device drivers  --->

<*> HCI USB driver              //USB蓝牙模块支持

<M>HCI UART driver              //基于串口,CF卡或PCMCIA的蓝牙

<*> HCI BlueFRITZ! USB driver

<*> HCI VHCI (Virtual HCI device) driver

2.2 下载内核 检测USB 蓝牙设备信息:

[root@Mr /mnt]#usb 1-1: new full speed USB device using s3c2410-ohci and address
usb 1-1: New USB device found, idVendor=0a12, idProduct=0001
usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[root@Mr /mnt]#

[root@FORLINX6410]# hciconfig检测蓝牙设备
hci0:   Type: USB
        BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
        DOWN
        RX bytes:0 acl:0 sco:0 events:0 errors:0
        TX bytes:0 acl:0 sco:0 commands:0 errors:0
[root@FORLINX6410]#


我用到的几个库:
bluez-lib-3.36.tar.gz
expat-2.0.1.tar.gz
dbus-1.2.16.tar.gz
glib-2.22.4.tar.bz2
libusb-0.1.12.tar.gz
bluez-utils-3.36.tar.gz
 
注:/opt/libs 和/opt/utils是我自己编译时用的路径,你可以随便的选取。
1,编译安装bluez-lib-3.36.tar.gz
   这个库不需要什么依赖,直接解压,配置,编译然后安装即可。
  #tar zxvf bluez-lib-3.36.tar.gz
  #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc
  #make
  #make install
 
2,编译安装expat-2.0.1.tar.gz
  这个库是后面的dbus依赖的,你也可以用libxml2来代替expat,官方网站上说dbus必须依赖于他们中的一个,我这里用的是expat-2.0.1.tar.gz。
  #tar zxvf expat-2.0.1.tar.gz
  #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux     CC=arm-linux-gcc
  #make
  #make install
 
3,编译安装dbus-1.2.16.tar.gz
  #tar zxvf dbus-1.2.16.tar.gz
  #echo ac_cv_have_abstract_sockets=yes>arm-linux.cache
  #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux     CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache --with-x=no
  #make
  #make install
 
4,编译安装glib-2.22.4.tar.bz2
  #tar  -zxjf  glib-2.22.4.tar.bz2
#echo ac_cv_type_long_long=yes>arm-linux.cache
#echo glib_cv_stack_grows=no>>arm-linux.cache
#echo glib_cv_uscore=no>>arm-linux.cache
#echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
#echo ac_cv_func_posix_getgrgid_r=yes>>
#./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux     CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache
有错误:


#make
有错误:
> giounix.c: In function `g_io_unix_read':
> giounix.c:181: `SSIZE_MAX' undeclared (first use in this function)
> giounix.c:181: (Each undeclared identifier is reported only once
> giounix.c:181: for each function it appears in.)
> make[3]: *** [giounix.lo] Error 1
 
[root@localhost glib-2.22.4]# find ./|grep giounix
./glib/giounix.c
./glib/.deps/giounix.Plo
./glib/.libs/giounix.o
./glib/giounix.lo
 
在 glib/giounix.c中加入:
#include <bits/posix1_lim.h>
#make install
 
5,编译安装libusb-0.1.12.tar.gz
   这个库不需要什么依赖,直接解压,配置,编译然后安装即可。
  #tar zxvf  libusb-0.1.12.tar.gz
  #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib"
  #make
  #make install
 
6,编译安装bluez-utils-3.36.tar.gz
  #tar zxvf bluez-utils-3.36.tar.gz
  加上:PKG_CONFIG_PATH=/opt/libs/lib/pkgconfig

  #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux     CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --disable-audio
  #make
有错误:
In file included from /opt/toolchains/arm920t-eabi/lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/include/stdlib.h:969,
                 from ../eglib/gmain.h:4,
                 from ../eglib/glib.h:1,
                 from glib-helper.c:41:
/opt/toolchains/arm920t-eabi/lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/include/bits/stdlib.h:70:3: error: #error "Assumed value of MB_LEN_MAX wrong"
make[2]: *** [glib-helper.o] Error 1
make[2]: Leaving directory `/home/yan/bluez-utils-3.36/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/yan/bluez-utils-3.36'
make: *** [all] Error 2
解决方法:
[root@localhost opt]# find ./|grep stdlib.h
./toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/stdlib.h
./toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/bits/stdlib.h
 
在/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/bits/stdlib.h中
#define STDLIB_MB_LEN_MAX 16
改为
#define STDLIB_MB_LEN_MAX 1
#make install
 
这样Bluez协议栈就编译好了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多