本文转载自: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内容如下

  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内容如下

  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内容如下

  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内容如下

  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内容如下

  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内容如下

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

  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内容如下:

  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行

  1. <!-- Run as special user -->
  2. <user>messagebus</user>

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

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

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

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

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

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

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

  1. #!/bin/sh
  2. hciconfig hci0 up
  3. hciconfig hci0 iscan
  4. if [ ! -d /usr/bluez/etc/dbus-1 ]; then
  5. if [ ! -d /usr/bluez/etc ]; then
  6. mkdir -p /usr/bluez/etc
  7. fi
  8. ln -s /usr/etc/dbus-1 /usr/bluez/etc/dbus-1
  9. fi
  10. #for dbus
  11. if [ ! -d /usr/bluez/var/run/dbus ]; then
  12. if [ ! -d /var/run/dbus ]; then
  13. mkdir -p /var/run/dbus
  14. fi
  15. if [ ! -d /usr/bluez/var/run ]; then
  16. mkdir -p /usr/bluez/var/run
  17. fi
  18. ln -s /var/run/dbus /usr/bluez/var/run/dbus
  19. fi
  20. if [ ! -d /usr/bluez/lib/bluetooth/plugins ]; then
  21. if [ ! -d /usr/bluez/lib/bluetooth ]; then
  22. mkdir -p /usr/bluez/lib/bluetooth
  23. fi
  24. ln -s /usr/lib/bluetooth/plugins /usr/bluez/lib/bluetooth/plugins
  25. fi
  26. dbus-daemon --system
  27. 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
版权没有,但是转载请保留此段声明

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

arm linux串口蓝牙工具移植及使用【转】的更多相关文章

  1. mac上编译 arm linux gnueabi交叉编译工具链toolchain

    crosstool-ng 编译和安装 交叉编译工具下载: git clone git@github.com:secularbird/crosstool-ng.git   切换到mac编译分支 git ...

  2. arm linux 移植 x265

    背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...

  3. Linux 安装 go 以及 arm linux 移植 go

    背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...

  4. 移植ARM linux下远程连接工具dropbear

    移植ARM linux下远程连接工具dropbear 原文地址:http://www.cnblogs.com/NickQ/p/9010529.html 移植zlib 下载地址:https://gith ...

  5. 【linux】串口通讯工具-minicom简介+简单操作

    目录 前言 简介 尝试运行 配置 minicom 运行 minicom minicom 其它操作 前言 windows 上有不少的串口通信工具了,今天介绍一个linux下的一个串口通信工具-minic ...

  6. 009-2010网络最热的 嵌入式学习|ARM|Linux|wince|ucos|经典资料与实例分析

    前段时间做了一个关于ARM9 2440资料的汇总帖,很高兴看到21ic和CSDN等论坛朋友们的支持和鼓励.当年学单片机的时候datasheet和学习资料基本都是在论坛上找到的,也遇到很多好心的高手朋友 ...

  7. ARM Linux 3.x的设备树(Device Tree)

    http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.     ...

  8. ARM Linux 3.x的设备树(Device Tree)

    1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...

  9. ARM Linux从Bootloader、kernel到filesystem启动流程

    转自:http://www.veryarm.com/1491.html ARM Linux启动流程大致为:bootloader ---->kernel---->root filesyste ...

随机推荐

  1. FFmpeg编译Android版本

    FFmpeg是很好用的一个音视频库,功能强大,但是用起来并不是很方便.之前一直不想用FFmpeg,因为感觉编译太麻烦,但是到了不得不用的时候了,没办法,参考了网上大神的方法,在这里自己也记录一下方便以 ...

  2. 【PL/SQL】九九乘法口诀表

    --输出屏幕信息 SET serveroutput ON; --打印口诀表 DECLARE V_NUMBER1 ); --外层循环变量 V_NUMBER2 ); --内层循环变量 BEGIN .. - ...

  3. DB2使用收集

    db2命令收集 创建带分区的表: create table  table_name( )in table_space index in index_space partition by range(c ...

  4. JS——缓动框架的问题

    1.opacity问题:IE678支持filter: alpha(opacity=50)取值1-100:小数位容易精度丢失,所i有统一json字符串设置为百进制,赋值时除以100 2.zIndex问题 ...

  5. CSS (层叠样式表)

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...

  6. %2d

    %2d是C语言中printf函数的输出格式说明符. 具体解释如下: 使输出的int型的数值以2位的固定位宽输出.如果不足2位,则在前面补空格:如果超过2位,则按实际位数输出. 注:如果输出的数值不是i ...

  7. CAD绘制一个对齐标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimAligned 绘制一个对齐标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 第一条界线开始点X值 DOUBLE ...

  8. 【Flutter学习】基本组件之AppBar顶部导航栏

    一,概述 AppBar 显示在app的顶部.AppBar包含5大部分,如下图: 二,构造函数及参数含义 构造函数 AppBar({ Key key, this.leading, //在标题前面显示的一 ...

  9. Chromium CEF 2623 -- 支持 xp 的最后一个版本源码下载和编译步骤

    背景 因为项目需要在客户端中内嵌浏览器,需要支持 xp 操作系统和播放视频,但 CEF 2623 以后的版本已经不支持 xp 操作系统,也不再提供 2623 版本的二进制发布包下载,只好自己手动编译. ...

  10. uva 133(The Dole Queue UVA - 133)

    一道比较难想的模拟题,用了队列等东西,发现还是挺难做的,索性直接看了刘汝佳的代码,发现还是刘汝佳厉害! 代码本身难度并不是很大,主要还是p=(p+n+d-1)%n+1;这一句有些难度,实际上经过自己的 ...