IMX6Q上蓝牙设备测试
来源:互联网 发布:雷神软件下载 编辑:程序博客网 时间:2024/05/22 11:44
目前,蓝牙技术已经比较成熟,特别是基于手机和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依赖库:
2. 移植bluez-utils工具
2.1、编译expat-2.0.1
#!/bin/sh./configure --host=arm-linux-gnueabihf --prefix=$PWD/installmake && 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=nomake && make install修改dbus中的pkgconfig文件dbus-1.pc,否则后面编译bluez-utils-3.36会报错#vim install/lib/pkgconfig/dbus-1.pc 16 Cflags: -I${includedir} -I${libdir}/dbus-1.0/include
2.3、编译zlib-1.2.5
#./configure --prefix=$PWD/install 替换zlib中所有的编译工具链为arm-linux-gnueabihf- #vim Makefile 19 CC=arm-linux-gnueabihf-gcc 20 21 CFLAGS= -D_LARGEFILE64_SOURCE=1 22 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 23 #CFLAGS=-g -DDEBUG 24 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ 25 # -Wstrict-prototypes -Wmissing-prototypes 26 27 SFLAGS= -fPIC -D_LARGEFILE64_SOURCE=1 28 LDFLAGS= -L. libz.a 29 TEST_LDFLAGS=-L. libz.a 30 LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map 31 CPP=arm-linux-gnueabihf-gcc -E 32 33 STATICLIB=libz.a 34 SHAREDLIB=libz.so 35 SHAREDLIBV=libz.so.1.2.5 36 SHAREDLIBM=libz.so.1 37 LIBS=$(STATICLIB) $(SHAREDLIBV) 38 39 AR=arm-linux-gnueabihf-ar rc 40 RANLIB=arm-linux-gnueabihf-ranlib 41 LDCONFIG=arm-linux-gnueabihf-ldconfig 42 LDSHAREDLIBC=-lc 43 TAR=tar 44 SHELL=/bin/sh 45 EXE= #make && make install
2.4、编译glib-2.28.8
vim compile.sh
#!/bin/shecho "glib_cv_stack_grows=no">config.cacheecho "glib_cv_uscore=no">>config.cacheecho "ac_cv_func_posix_getpwuid_r=yes">>config.cacheecho "ac_cv_func_posix_getgrgid_r=yes">>config.cacheecho "ac_cv_lib_rt_clock_gettime=no">>config.cacheecho "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.cachemake && 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.shexport 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.shexport 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目录下的文件替换掉
3. 移植openobex-1.5工具
#vim compile.sh#!/bin/shexport 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 optionsoptions { # Automatically initialize new devices autoinit 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 attempts pairing multi; # Default PIN code for incoming connections passkey "BlueZ"; pin_helper /usr/bin/bluepin}# Default settings for HCI devicesdevice { # 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;}root@myzr:~# cat /etc/bluetooth/rfcomm.conf ## RFCOMM configuration file.#rfcomm0 {# # Automatically bind the device at startup bind no;## # Bluetooth address of the device device CC:08:8D:5B:26:94;#改成待连接设备MAC地址## # RFCOMM channel for the connection channel 1;#通道## # Description of the connection comment "Example Bluetooth device";}#vim /etc/bluetooth/hcid.conf## HCI daemon configuration file.## HCId optionsoptions { # 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 auto; # 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"; #pin_helper为线程名称,该线程调用/usr/bin/bluepin #/usr/bin/bluepin为shell脚本,内容下文提及 pin_helper /usr/bin/bluepin}# Default settings for HCI devicesdevice { # 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;}#vim /usr/bin/bluepin#!/bin/sh#输出PIN码echo "PIN:1234"配置蓝牙PIN码文件#vim /var/lib/bluetooth/A4:17:31:C7:9B:B6/pincodesCC: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上蓝牙设备测试
- IMX6Q上移植AR3K蓝牙驱动
- 蓝牙测试设备
- imx6q led灯驱动及测试代码(自动创建设备文件v1)
- imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
- IMX6Q上使用NFS文件系统
- 蓝牙设备
- 蓝牙设备
- 新路程------imx6q 新增spi设备
- android上wifi和蓝牙设备冲突问题解决
- android6.0以上设备连接不上蓝牙问题
- Android蓝牙开发——查询手机上已配对的蓝牙设备
- imx6q上的背光驱动分析
- 蓝牙编程-设备检索.
- 调试蓝牙设备列表
- 蓝牙编程-设备检索.
- 连接蓝牙设备
- 蓝牙编程-设备检索
- java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Integerjava.lang.Clas
- 二分查找的实现---java版本
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
- Java Concurrency in Practice :基础知识(线程同步)
- Qt:setAlternatingRowColors,QTableView隔行自动变色
- IMX6Q上蓝牙设备测试
- 创建线程池以管理线程
- NYOJ---002 括号匹配问题
- Disruptor-架构思维的转变
- 井字棋游戏代码Java
- CToolBar的使用介绍
- json详解
- java多线程八 join()方法解析
- iOS 开发 多线程详解之线程属性设置