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内容如下
- #!/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行
- <!-- Run as special user -->
- <user>messagebus</user>
将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
版权没有,但是转载请保留此段声明
============================================
arm linux串口蓝牙工具移植及使用【转】的更多相关文章
- mac上编译 arm linux gnueabi交叉编译工具链toolchain
crosstool-ng 编译和安装 交叉编译工具下载: git clone git@github.com:secularbird/crosstool-ng.git 切换到mac编译分支 git ...
- arm linux 移植 x265
背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...
- Linux 安装 go 以及 arm linux 移植 go
背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...
- 移植ARM linux下远程连接工具dropbear
移植ARM linux下远程连接工具dropbear 原文地址:http://www.cnblogs.com/NickQ/p/9010529.html 移植zlib 下载地址:https://gith ...
- 【linux】串口通讯工具-minicom简介+简单操作
目录 前言 简介 尝试运行 配置 minicom 运行 minicom minicom 其它操作 前言 windows 上有不少的串口通信工具了,今天介绍一个linux下的一个串口通信工具-minic ...
- 009-2010网络最热的 嵌入式学习|ARM|Linux|wince|ucos|经典资料与实例分析
前段时间做了一个关于ARM9 2440资料的汇总帖,很高兴看到21ic和CSDN等论坛朋友们的支持和鼓励.当年学单片机的时候datasheet和学习资料基本都是在论坛上找到的,也遇到很多好心的高手朋友 ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
- 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 ...
- ARM Linux从Bootloader、kernel到filesystem启动流程
转自:http://www.veryarm.com/1491.html ARM Linux启动流程大致为:bootloader ---->kernel---->root filesyste ...
随机推荐
- 背包系列 hdu3449 有依赖背包
这道题真正困扰了笔者3,4天,冥思苦想几日无果之后,只能去找大牛的解法.结合网上的大牛解法与自己的理解,笔者终于解决了这个坑了,在此小庆幸一下. 原题如下: Consumer Time Limit: ...
- 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案
问题现象:由于重装linux,并且加了固态硬盘,直接将系统装在固态硬盘中.启动服务器的时候, 便看不到原来机械硬盘的挂载目录了,不知如何访问机械硬盘了.直接用命令 mount /dev/sda3 /s ...
- printFinal用法示例
printFinal是一个基于jQuery的打印插件,支持打印预览,使用很简单,废话不多多说,直接上代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- 移动web——touch事件应用
基本概况 1.touch事件在移动端被用来代替click事件,因为click事件的触发会延迟影响了用户体验 2.touch事件还可以与translate构成吸附效果 3.现行有一种排版方式是左边宽度是 ...
- Django中图片的上传并显示
一.settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', ...
- SpringMVC参数绑定、Post乱码解决方法
从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上. springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在control ...
- (5.2.1)配置服务器参数——即时文件初始化(IFI)
关键词:零填充,即时文件初始化 转自:https://www.cnblogs.com/gaizai/p/3516905.html 概念: 所有新申请的空间,sql server都要以0来填充完磁盘文件 ...
- ES6 基础学习
ECMAScript 6 标准入门 一.let和const let命令 let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效:是块级作用域,且let不允许 ...
- HTML学习笔记之标签进阶
目录 1.框架 2.表单 3.音频 4.视频 5.文档类型 6.头部元素 7.样式 8.脚本 9.实体 1.框架 使用框架允许我们在同一个浏览器窗口中显示多个页面,其中每份 HTML 文档称为一个框架 ...
- 浏览器控制之 selenium,phantomJs谷无头浏览器
目录 浏览器控制之 selenium,phantomJs谷无头浏览器 selenium phantomJs 需求是尽可能多的爬取豆瓣网中的电影信息 谷歌无头浏览器 浏览器控制之 selenium,ph ...