目前,蓝牙技术已经比较成熟,特别是基于手机和PC得蓝牙文件传输。
本文主要讲述基于嵌入式arm linux的蓝牙文件传输。
现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动。
本为基于2.6版本的内核讲述。对于2.4下载bluez后安装即可。有了bluez蓝牙驱动还需要安装bluez-libs库和bluez-utils工具
蓝牙测试流程:利用手机连接蓝牙模块,然后进行文件传输。

  1. 移植libs库和utils工具到arm开发板

bluez-utils:蓝牙配置工具,包括hciconfig,hcitool,rfcomm
openobex:蓝牙传输工具
下载bluez-utils:http://bluez.sf.net/download/bluez-utils-3.36.tar.gz
下载openobex:https://sourceforge.net/projects/openobex/files/openobex/1.5/openobex-1.5.0-Source.zip/download
bluez-utils依赖库:
expat-2.0.1:http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
dbus-1.4.1:https://dbus.freedesktop.org/releases/dbus/dbus-1.4.1.tar.gz
zlib-1.2.5:http://download.chinaunix.net/down.php?id=35616&ResourceID=12241&site=1
glib-2.28.8:https://download.gimp.org/pub/glib/2.28/glib-2.28.6.tar.gz
bluez-libs-3.36:http://bluez.sf.net/download/bluez-libs-3.36.tar.gz
openobex-1.5依赖库:

  1. 移植bluez-utils工具

##2.1、编译expat-2.0.1

#!/bin/sh
./configure --host=arm-linux-gnueabihf --prefix=$PWD/install
make && make install

##2.2、编译dbus-1.4.1

#!/bin/sh
./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=$PWD/install \
CFLAGS=-I$PWD/../expat-2.0.1/install/include \
LDFLAGS=-L$PWD/../expat-2.0.1/install/lib \
--enable-abstract-sockets --with-x=no
make && make install
修改dbus中的pkgconfig文件dbus-1.pc,否则后面编译bluez-utils-3.36会报错
#vim install/lib/pkgconfig/dbus-1.pc16 Cflags: -I${includedir} -I${libdir}/dbus-1.0/include

##2.3、编译zlib-1.2.5

 #./configure --prefix=$PWD/install替换zlib中所有的编译工具链为arm-linux-gnueabihf-#vim Makefile19 CC=arm-linux-gnueabihf-gcc2021 CFLAGS= -D_LARGEFILE64_SOURCE=122 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=723 #CFLAGS=-g -DDEBUG24 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \25 #           -Wstrict-prototypes -Wmissing-prototypes2627 SFLAGS= -fPIC -D_LARGEFILE64_SOURCE=128 LDFLAGS= -L. libz.a29 TEST_LDFLAGS=-L. libz.a30 LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map31 CPP=arm-linux-gnueabihf-gcc -E3233 STATICLIB=libz.a34 SHAREDLIB=libz.so35 SHAREDLIBV=libz.so.1.2.536 SHAREDLIBM=libz.so.137 LIBS=$(STATICLIB) $(SHAREDLIBV)3839 AR=arm-linux-gnueabihf-ar rc40 RANLIB=arm-linux-gnueabihf-ranlib41 LDCONFIG=arm-linux-gnueabihf-ldconfig42 LDSHAREDLIBC=-lc43 TAR=tar44 SHELL=/bin/sh45 EXE=#make && make install

##2.4、编译glib-2.28.8
vim compile.sh

#!/bin/sh
echo "glib_cv_stack_grows=no">config.cache
echo "glib_cv_uscore=no">>config.cache
echo "ac_cv_func_posix_getpwuid_r=yes">>config.cache
echo "ac_cv_func_posix_getgrgid_r=yes">>config.cache
echo "ac_cv_lib_rt_clock_gettime=no">>config.cache
echo "glib_cv_monotonic_clock=yes">>config.cacheexport PKG_CONFIG_PATH=$PWD/../zlib-1.2.5/install/lib/pkgconfig
./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=$PWD/install/ -cache-file=config.cache
make && make install
#./compile.sh

##2.5、编译bluez-libs-3.36

#./configure --host=arm-linux-gnueabihf --prefix=$PWD/install
#make && make install

##2.6、 编译bluez-utils-3.36

#vim compile.sh
export TOPDIR=$PWD/..
export PKG_CONFIG_PATH=$TOPDIR/glib-2.28.8/install/lib/pkgconfig:\
$TOPDIR/dbus-1.4.1/install/lib/pkgconfig:\
$TOPDIR/zlib-1.2.5/install/lib/pkgconfig:\
$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf --prefix=$PWD/install\
CFLAGS="`pkg-config --cflags bluez dbus-1 glib-2.0 zlib`" \
LDFLAGS="`pkg-config --libs bluez dbus-1 glib-2.0 zlib`"
#make &&make install
重新编译一次,因为生成的部分命令有默认路径问题
#vim compile.sh
export TOPDIR=$PWD/..
export PKG_CONFIG_PATH=$TOPDIR/glib-2.28.8/install/lib/pkgconfig:\
$TOPDIR/dbus-1.4.1/install/lib/pkgconfig:\
$TOPDIR/zlib-1.2.5/install/lib/pkgconfig:\
$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf \
CFLAGS="`pkg-config --cflags bluez dbus-1 glib-2.0 zlib`" \
LDFLAGS="`pkg-config --libs bluez dbus-1 glib-2.0 zlib`"
#make
然后将install/bin和install/sbin目录下的文件替换掉
  1. 移植openobex-1.5工具

#vim compile.sh
#!/bin/sh
export TOPDIR=$PWD/../
export PKG_CONFIG_PATH=$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf --prefix=$PWD/install\
CFLAGS="`pkg-config --cflags bluez`" \
LDFLAGS="`pkg-config --libs bluez`"
#make && make install

4.连接蓝牙设备

先将上述编译生成的库文件及命令拷贝至板子上。
查看蓝牙设备
#hciconfig 激活蓝牙设备
#hciconfig hci0 up
配置蓝牙设备
#vim /etc/bluetooth/rfcomm.conf#
# HCI daemon configuration file.
## HCId options
options {# Automatically initialize new devicesautoinit yes;#改成yes# Security Manager mode#   none - Security manager disabled#   auto - Use local PIN for incoming connections#   user - Always ask user for a PIN#security auto;# Pairing mode#   none  - Pairing disabled#   multi - Allow pairing with already paired devices#   once  - Pair once and deny successive attemptspairing multi;# Default PIN code for incoming connectionspasskey "BlueZ";pin_helper /usr/bin/bluepin
}# Default settings for HCI devices
device {# Local device name#   %d - device id#   %h - host namename "BlueZ (%d)";# Local device classclass 0x000100;# Default packet type#pkt_type DH1,DM1,HV1;# Inquiry and Page scaniscan 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 connectionslm accept;# Default link policy#   none    - no specific policy#   rswitch - allow role switch#   hold    - allow hold mode#   sniff   - allow sniff mode#   park    - allow park modelp rswitch,hold,sniff,park;
}
root@myzr:~# cat /etc/bluetooth/rfcomm.conf
#
# RFCOMM configuration file.
#rfcomm0 {
#       # Automatically bind the device at startupbind no;
#
#       # Bluetooth address of the devicedevice CC:08:8D:5B:26:94;#改成待连接设备MAC地址
#
#       # RFCOMM channel for the connectionchannel 1;#通道
#
#       # Description of the connectioncomment "Example Bluetooth device";
}#vim /etc/bluetooth/hcid.conf
#
# HCI daemon configuration file.
## HCId options
options {# Automatically initialize new devicesautoinit yes;# Security Manager mode#   none - Security manager disabled#   auto - Use local PIN for incoming connections#   user - Always ask user for a PIN#security auto;# Pairing mode#   none  - Pairing disabled#   multi - Allow pairing with already paired devices#   once  - Pair once and deny successive attemptspairing multi;# Default PIN code for incoming connectionspasskey "BlueZ";#pin_helper为线程名称,该线程调用/usr/bin/bluepin#/usr/bin/bluepin为shell脚本,内容下文提及pin_helper /usr/bin/bluepin
}# Default settings for HCI devices
device {# Local device name#   %d - device id#   %h - host namename "BlueZ (%d)";# Local device classclass 0x000100;# Default packet type#pkt_type DH1,DM1,HV1;# Inquiry and Page scaniscan 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 connectionslm accept;# Default link policy#   none    - no specific policy#   rswitch - allow role switch#   hold    - allow hold mode#   sniff   - allow sniff mode#   park    - allow park modelp rswitch,hold,sniff,park;
}#vim /usr/bin/bluepin
#!/bin/sh
#输出PIN码
echo "PIN:1234"
配置蓝牙PIN码文件#vim /var/lib/bluetooth/A4:17:31:C7:9B:B6/pincodes
CC:08:8D:5B:26:94 1234
/var/lib/bluetooth/A4:17:31:C7:9B:B6/pincodes:A4:17:31:C7:9B:B6本地蓝牙设备MAC地址
#待连接蓝牙设备MAC地址CC:08:8D:5B:26:94
#1234:PIN码#hcid /etc/bluetooth/hcid.conf
#rfcomm bind /dev/rfcomm0 CC:08:8D:5B:26:94 1
方式1:连接蓝牙设备,在我这不好用
#rfcomm conn /dev/rfcomm0 CC:08:8D:5B:26:94 1
方式2:连接蓝牙设备
#cat /dev/rfcomm0 &

嵌入式板子上蓝牙模块连接我的手机示意图:

连接过程中遇到的PIN码问题参考blog:http://blog.csdn.net/linuxheik/article/details/51923924
基于蓝牙传输文件

IMX6Q上蓝牙设备测试相关推荐

  1. 启动FastDFS服务,使用python客户端对接fastdfs完成上传测试

    1.启动tracker.storage.nginx服务: 启动fdfs_trackerd:sudo service fdfs_trackerd start 启动fdfs_storaged :sudo ...

  2. 云上可靠性测试:让我们一起给开发找点事儿

    摘要:在产品上云之前,云上数据的可信(安全性.可靠性等)成为大家关注的重点. 引言 疫情之下,科技支撑有目共睹,多个产业迎来逆势增长.科技创新赋能的"云技术",不再仅仅是战&quo ...

  3. linux编译测试代码,rtc在linux上的测试代码

    点击(此处)折叠或打开 rtc在linux上的测试代码 . rtc应用很广泛,在PC机和嵌入式上面几乎都能看到.下面就用最简单的代码做一个演示.相应的分析请看linux源代码中的分析文档.代码如下: ...

  4. 测试设备和Android机怎么传递消息,在运行2.3的设备上进行测试时,android-Activit......

    我已成功将事件添加到本机日历中,并且在Android API级别14或更高版本中正常运行. 我尝试了@VishalKhakhkhar的代码,但仍然无法解决此问题?我收到错误消息:在运行2.3.6的设备 ...

  5. 3-8SQL注入网站实际案例第四步:第三者上位点测试与利用

    判断出注入点的位置,那我们采取的就是显注的策略,显注的策略,就要充分发挥第三者上位点的作用,我们本篇将探讨如何对第三者上位点进行测试,以便充分利用上位点的作用 1.Union寻找处理字段数和第三者上位 ...

  6. 阿里云视频点播服务SDK的使用,视频文件上传测试

    文章目录 阿里云视频点播技术简介 一.阿里云视频点播技术能力盘点 1.应用场景 2.功能介绍 二.开通视频点播云平台 1.选择视频点播服务 2.开通视频点播 3.选择按使用流量计费 4.资费说明 5. ...

  7. K1 Power Linux上Stream测试内存带宽

    K1 Power Linux上Stream测试内存带宽 本篇文章介绍在K1 Power Linux上理论内存带宽结算,实测内存带宽方法,衡量服务器的内存带宽水平.需要说明的是,对于Scale UP的P ...

  8. 《软件测试》第五章 带上眼罩测试软件

    <软件测试>第五章 带上眼罩测试软件 5.0 前言 5.1 动态黑盒测试:带上眼罩测试软件 5.2 通过性测试和失效性测试 5.3 等价类划分 5.4 数据测试 5.4.1 边界条件 5. ...

  9. 计算机主板电源为啥不一样,不在主板上怎么测试台式电脑电源好坏

    电脑硬件,包括电脑中所有物理的零件,以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件.电脑硬件主要包含:机箱,主板,总线,电源,硬盘,存储控制器,界面卡,可携储存装置,内置存储器,输入设 ...

  10. 为自动化测试装上精准测试的“翅膀

    现代的专业软件测试中心,随着项目的迭代,通常针对每个系统构建了大量的自动化测试用例集,而启动一次全量的自动化测试以CI级触发,使之大比率通过,非常困难.测试工程师们常常需要投入很高的成本,把大量精力花 ...

最新文章

  1. TensorRT-优化-原理
  2. 巧用Ajax的beforeSend 提高用户体验--防止重复数据
  3. 两个byte[]拼接
  4. 登陆用友服务器超时未响应,用友T3软件10.8plus1普及版服务器提示“客户端已经较长时间未连接加密服务器,超时2880秒,请退出产品重新登录”?-用友T3...
  5. RxJava学习-使用篇
  6. python中的def语句_Python def 函数
  7. 6*6行列式相加的c语言,求行列式的值,用C语言怎么写啊?
  8. 机器学习实践指南(五)—— GD/SGD/MSGD 伪代码演示
  9. python语音信号快速傅里叶变换
  10. 为什么抢不到红包的总是你?可能是家里路由器没放对
  11. 和我一起学《HTTP权威指南》——Web服务器
  12. c语言的递归算法流程图,递归法_C语言递归法_递归算法经典实例
  13. 离散数学(第二版) 第一章、第二章习题
  14. vue结合element 输入框输入纯数字以及限制输入小数
  15. 创业之前必须要做的八个测试(上)
  16. 计算机与软件学院辅导员陈伯亨,十年桃李满园———计算机科学与软件工程系隆重举行十周年校庆校友会...
  17. 半导体存储器件原理概述
  18. 简易记账开发笔记之GridLayout
  19. QTextEdit设计的几个知识点
  20. 【软件测试技术】黑盒测试步骤设计详解

热门文章

  1. 5分钟使用Python爬取豆瓣TOP250电影榜
  2. 阿里香港轻量服务器加上BBR会发生什么?
  3. 听风辨器,神功护体——IT运维人员的九阳神功(中)
  4. mysql 索引 insert_Mysql 大批量数据insert or update与UQ索引
  5. SHAP可解释工具的理解及应用
  6. 磨金石教育摄影干货分享|风光摄影后期教程:冷色调变暖色调
  7. 数据库_之常用API的使用
  8. 《IDSSIM:基于改进的疾病语义相似度方法的lncRNA功能相似度计算模型》论文梳理
  9. 测试听力口语软件,上、英语系学姐最全整理的34个英语学习App 针对听力、口语、阅读...
  10. 三重积分的轮换对称性及极坐标形式确定上下限