mini2440 蓝牙驱动移植

原文地址:mini2440 蓝牙驱动移植


我的蓝牙设备是:USB蓝牙,芯片制造商: CSR,  芯片型号:41B14。芯片上贴的是AS6320QA。可见是水货。但在windows下测试可以使用。

Linux2.6版本之后的内核一般都有蓝牙模块的配置,所以不用再打补丁了。一般在配置内核的时候选择如下选项:

[*] Networking support --->               

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

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

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

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

[*]   RFCOMM TTYsupport         //

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

[*]   Multicastfiltersupport   //蓝牙多播,支持支持BNEP

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

<*>  HIDP protocolsupport      //基本支持协议

Bluetooth device drivers --->

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

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

<*> HCI BlueFRITZ!USB driver

<*> HCI VHCI (VirtualHCI device) driver

其余的选项,根据自己的蓝牙设备进行调整。

           [B]    蓝牙协议栈移植

a)        需要的软件包

可以在http://sourcearchive.com/下载多用到的所有软件包

                        (1)D-Bus library提供简单的应用程序互相通讯

下载地址:http://www.freedesktop.org/wiki/Software/dbus#Download

                        (2)GLiblibrary         GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(如LINUX,HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行。

下载地址:http://ftp.gnome.org/pub/gnome/sources/glib/2.26/

                        (3)USB library (optional)是一个用C语言开发的跨平台的USB设备访问接口库。

下载地址:http://www.libusb.org/

                        (4)Lexical Analyzer (flex或lex)         词法分析器

下载地址:http://linux.softpedia.com/get/Programming/Interpreters/Flex-23296.shtml

                        (5)YACC (yacc, bison,byacc)          Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)

下载地址:http://invisible-island.net/byacc/byacc.html

                        (6)alsa-libALSA 应用

下载地址:http://www.alsa-project.org/

b)       解压编译

在编译之前,首先将下载的所有包都放在bluetooth文件夹下。并在该文件夹下建立bluetooth-build文件夹,并将其输出到环境变量。

#cd  Bluetooth

#mkdir  bluetooth-build

#blue=$PWD/bluetooth-build

#export blue

#export                            //检查是否包含blue环境变量

              (1)    编译alsa-lib库

#tar  -jxvf alsa-lib-1.0.24.1.tar.bz2

#cd alsa-lib-1.0.24.1

#./configure --prefix=$blue CC=arm-linux-gcc --host=arm-linux--disable-python

#make

#make install

              (2)    编译expat

#tar –zxvf expat-2.0.1.tar.gz

#cd expat-2.0.1

#./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux

#make

#make install

              (3)    D-Bus

#tar  dbus-1.4.1.tar.gz

#cd  dbus-1.4.1

配置configure:

#echoac_cv_have_abstract_sockets=yes>arm-linux.cache

#./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux--cache-file=arm-linux.cache--with-x=no

              (4)    编译glib库

#vi arm-linux.cache

在其中输入如下内容:

glib_cv_long_long_format=ll

glib_cv_stack_grows=no

glib_cv_working_bcopy=no

glib_cv_sane_realloc=yes

glib_cv_have_strlcpy=no

glib_cv_va_val_copy=yes

glib_cv_rtldglobal_broken=no

glib_cv_uscore=no

ac_cv_func_posix_getpwuid_r=yes

ac_cv_func_nonposix_getpwuid_r=no

ac_cv_func_posix_getgrgid_r=no

glib_cv_use_pid_surrogate=no

ac_cv_func_printf_unix98=no

ac_cv_func_vsnprintf_c99=no

ac_cv_path_GLIB_COMPILE_SCHEMAS=yes

或者不建立arm-linux.chach文件,直接输入如下命令也可以:

echoglib_cv_long_long_format=ll>arm-linux.cache

echoglib_cv_stack_grows=no>>arm-linux.cache

echoglib_cv_working_bcopy=no>>arm-linux.cache

echoglib_cv_sane_realloc=yes>>arm-linux.cache

echoglib_cv_have_strlcpy=no>>arm-linux.cache

echoglib_cv_va_val_copy=yes>>arm-linux.cache

echoglib_cv_rtldglobal_broken=no>>arm-linux.cache

echoglib_cv_uscore=no>>arm-linux.cache

echoac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache

echoac_cv_func_nonposix_getpwuid_r=no>>arm-linux.cache

echoac_cv_func_posix_getgrgid_r=no>>arm-linux.cache

echoglib_cv_use_pid_surrogate=no>>arm-linux.cache

echoac_cv_func_printf_unix98=no>>arm-linux.cache

echoac_cv_func_vsnprintf_c99=no>>arm-linux.cache

echoac_cv_path_GLIB_COMPILE_SCHEMAS=yes>>arm-linux.cache

 

然后保存退出。如果不创建该文件,编译总出现…can’t run test program …错误

#./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux --cache-file=arm-linux.cache

如果继续出错,记录下提示error错误行的上一行,如:

checking abstract socket namespace...

configure: error: cannot run test program while crosscompiling

注意到abstract socket namespace在configure中查找abstractsocket可以看到类似这样的结构

echo "$as_me:$LINENO: checking abstract socket namespace">&5

echo $ECHO_N "checking abstract socket namespace... $ECHO_C">&6

if test "${ac_cv_have_abstract_sockets+set}" = set; then

echo $ECHO_N "(cached) $ECHO_C">&6

其中ac_cv_have_abstract_sockets是我们要查找的变量。然后在当前目录下的arm-linux.cache中加入:echoac_cv_have_abstract_sockets=yes

 

#make

出现如下错误:

(process:18811): GLib-Genmarshal-WARNING **: unknown type:VARIANT

make[2]: *** [stamp-gmarshal.h] 错误 1

make[2]: Leaving directory`/root/mywork/mini2440/bluetooth/glib-2.26.0/gobject'

make[1]: *** [all-recursive] 错误 1

make[1]: Leaving directory`/root/mywork/mini2440/bluetooth/glib-2.26.0'

make: *** [all] 错误 2

出现如上错误好像是文件格式错误引起的。解决办法如下:

第一次出错:将其中唯一的一行注释掉!

#vi gobject/stamp-gmarshal.h

第二次出错:将如下文件的开头空行删除。

#vi gobject/gmarshal.c

这时候,继续编译就通过了。!

#vi tests/gobject/stamp-testmarshal.h

什么也不输入,保存退出即可。

              (5)    编译bluez

#tar  -zxvf bluez-4.87.tar.gz

#cd  bluez-4.87

# ./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux

#make

#make  install

编译顺利,没初现错误。

              (6)    编译YACC

#tar  -zxvf  byacc.tar.gz

#cd  byacc-20101127

# ./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux

#make

#make  install

              (7)    编译USB library

#tar  -zxvf libusb-1.0.8.tar.bz2

#cd  libusb-1.0.8

# ./configure --prefix=$blue CC="arm-linux-gcc -I$blue/include-L$blue/lib " --host=arm-linux

#make

#make  install

至此,所有的软件包都编译完成!

              (8)    复制生成的软件到开发板

1)     将bluetooth-build/sbin下的文件复制到开发板的/sbin下

#cp bluetooth-build/sbin/*   ROOTFS/sbin              //ROOTFS自己指定

#cp bluetooth-build/bin/hcitool        ROOTFS/bin/

#cp bluetooth-build/bin/rfcomm             ROOTFS/bin/

#cp bluetooth-build/bin/sdptool             ROOTFS/bin/

 

2)     复制相关的库到开发板的/lib下

#cp Bluetooth-build/lib/libbluetooth*   ROOTFS/lib        //ROOTFS自己指定

3)     复制配置文件到开发板的/etc目录下

#cp  -arfbluetooth-build/etc/bluetooth/   ROOTFS/etc/         //ROOTFS自己指定

 

            [C]    蓝牙测试

1.检查是否有蓝牙设备

在插入蓝牙到到USB口前后,用lsusb命令可以发现输出内容不一样。即插入蓝牙设备后lsusb输出多了一行。然后,运行hciconfig可以看到:

#hciconfig

hci0:      Type: BR/EDR  Bus: 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

上面的信息说明检测到了蓝牙设备hci0。

2.激活蓝牙设备

#hciconfig hci0 up

可以激活借口(这一步不做,hcitool scan无法运行)。这时候如果再次执行hciconfg命令,可以发现蓝牙以及激活(UP RUNNING):

hci0:      Type: BR/EDR  Bus: USB

      BD Address: 00:1F:81:00:02:DD  ACL MTU:1021:4  SCO MTU: 180:1

      UP RUNNING

      RX bytes:342 acl:0 sco:0 events:10 errors:0

      TX bytes:33 acl:0 sco:0 commands:11 errors:1

3.扫描设备

#hcitool scan

可以得到:

Scanning ...

      00:23:7A:F3:66:8D    BlackBerry9000               这就是搜索到的设备(提前打开哦)

4.修改配置文件:

修改/etc/bluetooth/rfcomm.conf

将里面的:device 11:22:33:44:55:66;

修改成hcitool scan的结果,也就是:

device 00:23:7A:F3:66:8D

保存退出。

rfcomm_create_dev。

5.创建蓝牙设备

运行:

#rfcomm_create_dev。

 

3,配置bluez

默认的配置文件放在/etc/bluetooth目录

hcid.conf和pin不需要修改,安全方式已经被设置成auto,这是为了方便连接,用户可以自己修改,推荐不做修改,以防止有些设备连接不上。

4,重启bluetooth服务。

  /etc/rc.d/init.d/bluetooth stop

  /etc/rc.d/init.d/bluetooth start

7,创建设备:

#rfcomm

cat /dev/rfcomm0

8,添加通道:

#sdptool add --channel=1 DID SP DUN LAN FAX OPUSH FTP HS HF SAPNAP GN PANU HID CIP CTP A2SRC A2SNK SYNCML NOKID PCSUITE SR1

后面的参数不一定被支持,但是以防有些服务没有被打开,所以,干脆全部打开了。

rfcomm bind /dev/rfcomm0 电话的地址通道(在rfcomm.conf中配置)

这里的命令应该写成:

#rfcomm bind /dev/rfcomm0 00:23:7A:F3:66:8D 1

9,连接手机

  hcitool cc 电话的地址

也就是

  hcitool cc 00:23:7A:F3:66:8D

这时候,可以看到手机上的蓝牙连接呈联通状态。

10,从计算机发送文件:

  obex-send abc.jpg

操作系统会弹出提示框,让你选择要发送的目标。

同时可以看到手机会弹出提示框,询问是否接受文件。

11,手机的配置:

需要在手机上进行一下配置:

连接->蓝牙->匹配装置->添加装置。

会自动扫描到PC上的适配器。

如果需要填入识别码就填写123。上面已经设置了。

这时候,可以看到手机已经成功的添加蓝牙装置。

12,从手机发送文件。

在PC机上启动obex-server,会看到系统托盘出现一个小图标。

完成上面的工作后,可以进入手机的:

多媒体->我的影集

选择一张图片。

然后,“发送”->“通过蓝牙”

看到有刚才扫描到的蓝牙适配器。

然后,就可以发送文件了。

13,使用软件管理手机信息。

参考gnokii软件的文档

二、蓝牙耳机。

1,同时按住jabra 250上面的“电话键”和“音量增大键”,大约8秒,看到蓝灯常亮

2,扫描耳机,得到bdaddress

  hcitool scan

3,配置工作:

  modprobe snd_bt_sco

  hciconfig hci0 void 0x0060

  btsco bdaddress (这里的bdaddress就是扫描出来的结果)

  btsco运行后,会弹出对话框,要求输入耳机的pin,jabra250为0000,可以在说明书上找到。

4,建立联接后,设备被映射成/dev/dsp1。

以beep为例,

插件->输出,选择使用alsa驱动,点开“首选项”,音频设置部分就可以看到btsco:hw0,1之类的信息,选择这个即可。

然后播放一首歌,尝试一下无线的快乐吧。

然后适当的配置你所要使用的播放器之类的就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值