ap6212中串口蓝牙在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内容如下

#!/bin/sh

./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc

make

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

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

#!/bin/sh

./configure --prefix=/usr/bluez --host=arm-linux --target=arm-linux CC=arm-cortex_a9-linux-gnueabi-gcc

make

make install

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

#!/bin/sh

echo ac_cv_have_abstract_sockets=yes>arm-linux.cache

./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

make

make install

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

#!/bin/sh

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>>arm-linux.cache

#echo gt_cv_have_gettext=no>>arm-linux.cache

export NM=nm

./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

make

make install

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

#!/bin/sh

./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

make

make install

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

#!/bin/sh

./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

make

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

# { (exit 1); exit 1; }; }

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

#!/bin/sh

echo 1 > /sys/class/rfkill/rfkill0/state

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行

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

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

#

# HCI daemon configuration file.

#

# HCId options

options {

# Automatically initialize new devices

autoinit yes;

# Security Manager mode

# none - Security manager disabled

# auto - Use local PIN for incoming connections

# user - Always ask user for a PIN

#

security user;

# Pairing mode

# none - Pairing disabled

# multi - Allow pairing with already paired devices

# once - Pair once and deny successive attempts

pairing multi;

# Default PIN code for incoming connections

passkey "BlueZ";

}

# Default settings for HCI devices

device {

# Local device name

# %d - device id

# %h - host name

name "BlueZ (%d)";

# Local device class

class 0x000100;

# Default packet type

#pkt_type DH1,DM1,HV1;

# Inquiry and Page scan

iscan enable; pscan enable;

# Default link mode

# none - no specific policy

# accept - always accept incoming connections

# master - become master on incoming connections,

# deny role switch on outgoing connections

lm accept;

# Default link policy

# none - no specific policy

# rswitch - allow role switch

# hold - allow hold mode

# sniff - allow sniff mode

# park - allow park mode

lp rswitch,hold,sniff,park;

}将security后的user改为auto 将passkey后的

"BlueZ"改为

"0000"改成简单点的

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

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

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

#!/bin/sh

hciconfig hci0 up

hciconfig hci0 iscan

if [ ! -d /usr/bluez/etc/dbus-1 ]; then

if [ ! -d /usr/bluez/etc ]; then

mkdir -p /usr/bluez/etc

fi

ln -s /usr/etc/dbus-1 /usr/bluez/etc/dbus-1

fi

#for dbus

if [ ! -d /usr/bluez/var/run/dbus ]; then

if [ ! -d /var/run/dbus ]; then

mkdir -p /var/run/dbus

fi

if [ ! -d /usr/bluez/var/run ]; then

mkdir -p /usr/bluez/var/run

fi

ln -s /var/run/dbus /usr/bluez/var/run/dbus

fi

if [ ! -d /usr/bluez/lib/bluetooth/plugins ]; then

if [ ! -d /usr/bluez/lib/bluetooth ]; then

mkdir -p /usr/bluez/lib/bluetooth

fi

ln -s /usr/lib/bluetooth/plugins /usr/bluez/lib/bluetooth/plugins

fi

dbus-daemon --system

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

版权没有,但是转载请保留此段声明

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

brcm_patchram_plus工具及源码下载地址:

参考文章:

linux 蓝牙脚本,arm linux串口蓝牙工具移植及使用(示例代码)相关推荐

  1. Linux shell脚本,Linux下的西红柿时间管理法 I

    Linux shell脚本,Linux下的西红柿时间管理法 I 全部代码在[https://github.com/younggift/tomato.git]. 1. 西红柿时间管理法是什么 西红柿是一 ...

  2. 视频教程-Linux shell脚本习题-Linux

    Linux shell脚本习题 阿铭,前腾讯运维工程师. 1.职业历程:先后就职于康盛.腾讯.好贷,从基础运维做到运维经理,从月薪3k到年薪40w+. 2.培训经历:11年为女友编写电子版linux入 ...

  3. linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结

    一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...

  4. linux spec 脚本,关于linux:shell脚本的单元测试

    多年来,我从事的几乎所有产品都涉及到一定程度的Shell脚本(或Windows上的批处理文件,PowerShell等). 即使我们使用Java或C ++编写了大量代码,但似乎总是存在一些集成或安装任务 ...

  5. Linux 进内核,arm linux 启动流程之 进入内核

    原标题:arm linux 启动流程之 进入内核 还是从编译链接生成vm 的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel/arch//kernel/head-armv.o ,而且我们 ...

  6. linux shell脚本 nohup,linux真正使用shell脚本做定时任务 关键的Nohup

    网上有很多的文章教大家使用定时任务,所以别的废话我就不多说了 我这里直接有SH来做定时,只是有一点大家不知道,一定要用Nohup,否则用户退出终端以后,SH任务会被自动终止掉 假设有一 tash.sh ...

  7. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

    原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...

  8. linux shell 脚本 supress,Linux指令和shell脚本

    关于Shell 在计算机科学中,Shell俗称壳(用来区别于核),是指"为使用者提供操作界面"的软件(命令解析器).它类似于DOS下的command.com和后来的cmd.exe. ...

  9. linux经典脚本实例,Linux常用Shell脚本珍藏

    [实例简介] Linux常用Shell脚本珍藏 (2)编写任务定时器: C代码☆ 1. echo 00 1 *k */bin/sh /usr/bin/fileback">:/root/ ...

最新文章

  1. 延迟开学会影响毕业?这些高校有答案了!
  2. 消息总线(Spring Cloud Bus)
  3. 笔记-项目管理基础知识-复习要点
  4. 华南农业大学c语言期末试题,华南农业大学珠学院C语言期末试卷.doc
  5. 手动打开和关闭windows的相关服务
  6. 修改lgoin,http://www.tuicool.com/articles/U3iyqq
  7. 在Android中运用RxJava
  8. 最小生成树的java实现
  9. CentOS6.4 安装MongoDB
  10. 贝叶斯网络、马尔可夫模型、马尔可夫过程、马尔可夫链、马尔可夫网络基本概念
  11. 2-2 nginx整体结构
  12. 无源贴片晶振四角引脚_晶振厂家告诉你贴片晶振的脚位方向如何区分 - 中山惠源晶工...
  13. 使用you-get下载视频网站的各种视频的最全面的简明方法
  14. Dynamsoft Barcode Reader Crack,强大而快速的条码解码
  15. 黑盒测试具体有哪些操作步骤?
  16. Unresolveable build extension: Plugin...or one of its dependencies could not be resolved: Failed to
  17. jQuery实现广告图片轮播切换
  18. 了解CSS属性font-kerning,font-smoothing,font-variant
  19. Learning Python 020 pass 的用法
  20. 如何用键盘打开设备管理器里计算机的属性,技巧:在Windows10系统中使用键盘打开设备管理器的三种方法...

热门文章

  1. Exchange Server 2019新功能预览-揭秘被削减的功能
  2. Reveal 的初步用法
  3. 云安全趋势下脚踏实地力拼网络危胁
  4. 面向接口编程详解(一)—— 思想基础
  5. [导入]ASP.NET 2.0 读取配置文件[INI](示例代码下载)
  6. 黑马vue---13、事件修饰符的介绍
  7. JavaScript 返回多个值
  8. python中zip( )的使用
  9. 如何正确的阅读Datasheet?
  10. 【loj6342】跳一跳 期望dp