本文转载自: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. 背包系列 hdu3449 有依赖背包

    这道题真正困扰了笔者3,4天,冥思苦想几日无果之后,只能去找大牛的解法.结合网上的大牛解法与自己的理解,笔者终于解决了这个坑了,在此小庆幸一下. 原题如下: Consumer Time Limit: ...

  2. 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案

    问题现象:由于重装linux,并且加了固态硬盘,直接将系统装在固态硬盘中.启动服务器的时候, 便看不到原来机械硬盘的挂载目录了,不知如何访问机械硬盘了.直接用命令 mount /dev/sda3 /s ...

  3. printFinal用法示例

    printFinal是一个基于jQuery的打印插件,支持打印预览,使用很简单,废话不多多说,直接上代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  4. 移动web——touch事件应用

    基本概况 1.touch事件在移动端被用来代替click事件,因为click事件的触发会延迟影响了用户体验 2.touch事件还可以与translate构成吸附效果 3.现行有一种排版方式是左边宽度是 ...

  5. Django中图片的上传并显示

    一.settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', ...

  6. SpringMVC参数绑定、Post乱码解决方法

    从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上. springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在control ...

  7. (5.2.1)配置服务器参数——即时文件初始化(IFI)

    关键词:零填充,即时文件初始化 转自:https://www.cnblogs.com/gaizai/p/3516905.html 概念: 所有新申请的空间,sql server都要以0来填充完磁盘文件 ...

  8. ES6 基础学习

    ECMAScript 6 标准入门 一.let和const let命令 let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效:是块级作用域,且let不允许 ...

  9. HTML学习笔记之标签进阶

    目录 1.框架 2.表单 3.音频 4.视频 5.文档类型 6.头部元素 7.样式 8.脚本 9.实体 1.框架 使用框架允许我们在同一个浏览器窗口中显示多个页面,其中每份 HTML 文档称为一个框架 ...

  10. 浏览器控制之 selenium,phantomJs谷无头浏览器

    目录 浏览器控制之 selenium,phantomJs谷无头浏览器 selenium phantomJs 需求是尽可能多的爬取豆瓣网中的电影信息 谷歌无头浏览器 浏览器控制之 selenium,ph ...