zoukankan      html  css  js  c++  java
  • arm linux串口蓝牙工具移植及使用【转】

    本文转载自:http://blog.csdn.net/hclydao/article/details/51451725

    p6212中串口蓝牙在linux下的使用记录

    一、linux蓝牙工具移植

    主要使用到的工具及相关库如下:

        bluez-libs-3.36

        libxml2-2.7.4

        dbus-1.0.2

        glib-2.24.2

        bluez-utils-3.36

        openobex-1.5

    下载相应的源码解压,按照上面的顺序进行编译.

        bluez-libs-3.36中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    修改mk.sh权限直接运行,完成编译与安装,下同

    libxml2-2.7.4中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    dbus-1.0.2中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo ac_cv_have_abstract_sockets=yes>arm-linux.cache  
    3. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --cache-file=arm-linux.cache --with-x=no  
    4. make   
    5. make install  

    glib-2.24.2中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo ac_cv_type_long_long=yes>arm-linux.cache  
    3. echo glib_cv_stack_grows=no>>arm-linux.cache  
    4. echo glib_cv_uscore=no>>arm-linux.cache  
    5. echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache  
    6. echo ac_cv_func_posix_getgrgid_r=yes>>arm-linux.cache  
    7. #echo gt_cv_have_gettext=no>>arm-linux.cache  
    8. export NM=nm  
    9. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --cache-file=arm-linux.cache  
    10. make   
    11. make install  

    bluez-utils-3.36中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -I/usr/bluez/include -L/usr/bluez/lib" --enable-test  
    3. make   
    4. make install  

    openobex-1.5中增加mk.sh内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. ./configure --prefix=/usr/bluez --host=arm-linux --enable-apps --enable-bluetooth CFLAGS=-I/usr/bluez/include LDFLAGS=-L/usr/bluez/lib CC=arm-cortex_a9-linux-gnueabi-gcc  
    3. make   
    4. make install  

    同时需要修改configure文件11311行将

    [java] view plain copy
     
    1. #  { (exit 1); exit 1; }; }  
    2. { (echo 1); echo 1; }; }  

    将上面的exit 1这一行注释增加下面echo 1这行,忽悠掉这个错误

    所有文件都会安装在/usr/bluez目录下。拷贝/usr/bluez目录下所有文件到目标板/usr目录下

    对于我使用的这个模块wifi和bt是一起的,在android下能正常使用,在linux下bt要正常识别还需要另一个工具brcm_patchram_plus最后我会给下载地址,同时还需要固件文件bcm43438a0.hcd这个可以直接从android文件系统下拷贝过来.

    二、使用说明
    加载完ap6212模块驱动后,因为这个有电源控制,所以首先要给bt上电,执行rfkill list查看bt对应的控制节点,如下图

    可以看到bt对应的是0节点

    在/usr/sbin下新建一个脚本命名为btstart内容如下:

    [java] view plain copy
     
    1. #!/bin/sh  
    2. echo 1 > /sys/class/rfkill/rfkill0/state  
    3. brcm_patchram_plus --patchram /etc/firmware/bcm43438a0.hcd --baudrate 3000000 --enable_lpm --enable_hci --no2bytes /dev/ttyAMA1 &  

    echo 1 >xxxx是给bt上电

    后面这个是加载固件,这里我的bt接的是串口1对应的串口设备节点是/dev/ttyAMA1,波特率设置为3M

    保存这个脚本,修改权限后执行

    等待几秒会出现Done setting line discpline说明设置已经完成,此时就可以查看到bt设备了,执行hciconfig -a

    正常识别到后,接着就来看怎么使用.

    首先需要开启dbus守护进程,hcid需要这个

    前面已经将安装到的/usr/bluez下的文件全部拷贝到了目标板的/usr目录下,此时在目标板会有/usr/etc/dbus-1/system.conf文件

    修改system.conf文件第18行

    [java] view plain copy
     
    1. <!-- Run as special user -->  
    2. <user>messagebus</user>  

    将messagebus改为root或者已经存在的用户名.

    然后修改/usrc/etc/bluetooth/hcid.conf

    [java] view plain copy
     
    1. #  
    2. # HCI daemon configuration file.  
    3. #  
    4.   
    5. # HCId options  
    6. options {  
    7.     # Automatically initialize new devices  
    8.     autoinit yes;  
    9.   
    10.     # Security Manager mode  
    11.     #   none - Security manager disabled  
    12.     #   auto - Use local PIN for incoming connections  
    13.     #   user - Always ask user for a PIN  
    14.     #  
    15.     security user;  
    16.   
    17.     # Pairing mode  
    18.     #   none  - Pairing disabled  
    19.     #   multi - Allow pairing with already paired devices  
    20.     #   once  - Pair once and deny successive attempts  
    21.     pairing multi;  
    22.   
    23.     # Default PIN code for incoming connections  
    24.     passkey "BlueZ";  
    25. }  
    26.   
    27. # Default settings for HCI devices  
    28. device {  
    29.     # Local device name  
    30.     #   %d - device id  
    31.     #   %h - host name  
    32.     name "BlueZ (%d)";  
    33.   
    34.     # Local device class  
    35.     class 0x000100;  
    36.   
    37.     # Default packet type  
    38.     #pkt_type DH1,DM1,HV1;  
    39.   
    40.     # Inquiry and Page scan  
    41.     iscan enable; pscan enable;  
    42.   
    43.     # Default link mode  
    44.     #   none   - no specific policy   
    45.     #   accept - always accept incoming connections  
    46.     #   master - become master on incoming connections,  
    47.     #            deny role switch on outgoing connections  
    48.     lm accept;  
    49.   
    50.     # Default link policy  
    51.     #   none    - no specific policy  
    52.     #   rswitch - allow role switch  
    53.     #   hold    - allow hold mode  
    54.     #   sniff   - allow sniff mode  
    55.     #   park    - allow park mode  
    56.     lp rswitch,hold,sniff,park;  
    57. }  

    将security后的user改为auto 将passkey后的"BlueZ"改为"0000"改成简单点的

    其中name "BlueZ (%d)";后的"BlueZ (%d)"将会成为其它设备识别到本设备时的bt的名字

    passkey为其它设备主动发起配对时需要的密码,security设置为auto后,其它设备输入密码正常,就会自动与本设备进行配对,并显示配对成功.如果本设备主动发起配对,此时密码就不是这里设置的这个密码了.

    修改完成后,还需要做一些链接,新建btup脚本,内容如下

    [java] view plain copy
     
    1. #!/bin/sh  
    2. hciconfig hci0 up  
    3. hciconfig hci0 iscan  
    4.   
    5. if [ ! -d /usr/bluez/etc/dbus-1 ]; then  
    6.     if [ ! -d /usr/bluez/etc ]; then  
    7.         mkdir -p /usr/bluez/etc  
    8.     fi  
    9.     ln -s /usr/etc/dbus-1 /usr/bluez/etc/dbus-1  
    10. fi  
    11.   
    12. #for dbus  
    13. if [ ! -d /usr/bluez/var/run/dbus ]; then  
    14.     if [ ! -d /var/run/dbus ]; then  
    15.         mkdir -p /var/run/dbus  
    16.     fi  
    17.   
    18.     if [ ! -d /usr/bluez/var/run ]; then  
    19.         mkdir -p /usr/bluez/var/run  
    20.     fi  
    21.   
    22.     ln -s /var/run/dbus /usr/bluez/var/run/dbus  
    23. fi  
    24.   
    25. if [ ! -d /usr/bluez/lib/bluetooth/plugins ]; then  
    26.     if [ ! -d /usr/bluez/lib/bluetooth ]; then  
    27.         mkdir -p /usr/bluez/lib/bluetooth  
    28.     fi  
    29.     ln -s /usr/lib/bluetooth/plugins /usr/bluez/lib/bluetooth/plugins  
    30. fi  
    31.   
    32. dbus-daemon --system  
    33. hcid -f /usr/etc/bluetooth/hcid.conf -n -d &  

    上面的这些链接的创建是为了下面这两条命令能正常执行,也可以先不创建先一条一条命令执行后面会报错,然后根据错误来创建链接.

    最后一条命令

    hcid -f /usr/etc/bluetooth/hcid.conf -n -d &

    中的-n -d可以去掉,这里方便调试我才加上

    执行btup脚本,此时会有很多打印信息输出如下图:

    此时打开手机蓝牙进行扫描,就可以看到我们的设备了,如下图

    点击我们的设备进行配对,输入前面我们设置好的密码0000就可以配对成功,如下图:

    此时我们在本设备端进行扫描如下图:

    以下把我移植的设备称为我的设备,其它带蓝牙的设备称为其它设备

    我们需要通过其它设备的OBEX Object Push信道才能正常向其它设备发送文件

    我们通过sdptool查看其它设备的具体信息如下图是查看的123(68:DF:DD:49:87:AF)设备的具体信息:

    或者可以使用sdptool search OPUSH查找周围设备的具有OPUSH功能的设备

    可以看到设备123(68:DF:DD:49:87:AF)中OBEX Object Push功能所在通道是4

    此时我们可以通过这个通道给123设备发送文件,执行如下命令

    接着输入c进行连接

    这里会超时,不用管,然后输入p 1.png 1.png

    这里p后面第一个参数1.png是我的设备上已经存在的在根目录下的1.png文件后面的1.png是以什么名字发送给其它设备,输入后回车,123设备上就会有相关提示

    选择接收后,我的设备会输出很多信息,如下图

    传送完成后,就可以在123设备上查看文件内容了

    上面是发送,接下来是接收, 输入q退出刚才的obex_test命令

    执行sdptool brower local查看我的设备bt下的OBEX Object Push所对应的通道

    默认情况是没有这个功能的,增加这OPUSH功能

    在执行sdptool brower local查看,此时就会出现这个功能

    对应的是通道9

    通过查看local可以看到对应的地址是FF:FF:FF:00:00:00

    这里我们执行如下

    然后输入s,输入s后,马上在123设备端,通过bt给我的设备发送文件

    如果能正常接收调试信息输出如下:

    接收完成后会保存在根目录下.

    ============================================
    作者:hclydao
    http://blog.csdn.net/hclydao
    版权没有,但是转载请保留此段声明

    ============================================

  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7605201.html
Copyright © 2011-2022 走看看