本文主要讲述基于嵌入式arm linux的蓝牙文件传输。
现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动。
http://www.bluez.org/download/
本为基于2.6版本的内核讲述。对于2.4下载bluez后安装即可。有了bluez蓝牙驱动还需要安装bluez-libs库和bluez-utils工具
蓝牙文件传输应用开发分为2部分,On pc 和on ARM。
我用linux系统配置
fedora 9
内核版本 2.6.25
gcc:4.0.0
做嵌入式开发用新版本的内核总是会遇到很多问题。2.6.11的内核比较适合做嵌入式开发。
首先:在pc上安装bluez-libs库和bluez-utils工具。
1,在bluez官方网站下载bluez-libs和bluez-utils
http://www.bluez.org/download/
我下载的是bluez-libs-3.36和bluez-utils-3.36。
2.编译PC的linux内核
- #cd/usr/src/kernels/2.6.25-14.fc9.i686/
- #makemenuconfig
- Networking-->
- <M>Bluetoothsubsystemsupport-->
- <M>L2CAPprotoclsupport
- <M>SCOlinkssupport
- <M>RFCOMMprotocolsupport
- [*]RFCOMMTTYsupport
- <M>BENPprotocolsupport
- [*]Multicastfiltersupport
- [*]Protocolfiltersupport
- <M>CMTPprotocolsupport
- <M>HIDPprotocolsupport
- Bluetoothdevicesdrivers-->
- <M>HCIUSBdriver
3.安装libs和utils。
libs和bluez得安装都是安装linux软件正常方式安装
安装libs
- #tarxzvfbluez-libs-3.36.tar.gz
- #cdbluez-libs-2.25
- #./configure
- #make
- #makeinstall
注意:如果你是fedora 9或者是内核是2.6.25及以上的版本在安装utils的时候会出现某些文件没有或者是参数没定义的问题。
第二,移植libs库和utils工具到arm开发板
我的开发板配置:
linux内核:2.6.29(主要是我的开发板自带内核带了很多工具,如果换底版本的内核的话,会比较麻烦,所以就是用了其自带核)
arm-linux-gcc:4.3.2
我把所有的压缩包都放在了/opt/arm/下,我下面讲述的都是针对这个目录下。大家可以针对自己的喜好来选择目录
1,安装交叉编译工具arm-linux-gcc
- #tarxzvfarm-linux-gcc/usr/local
- #vi/root/.bashrc
- #.bashrc
- #Userspecificaliasesandfunctions
- aliasrm='rm-i'
- aliascp='cp-i'
- aliasmv='mv-i'
- #Sourceglobaldefinitions
- if[-f/etc/bashrc];then
- ./etc/bashrc
- fi
- exportPATH=$PATH:/usr/local/arm/4.3.2/bin
2,解压编译配置内核
由于我使我开发板光盘自带的内核源码,所以不需要修改源码中的Makefile。如果是从网上下载的内核源码,在编译的时候需要修改Makefile。需要对
- #tarxzvflinux-2.6.29
- #cdlinux-2.6.29
- #makemenuconfig
配置内核的时候,需要把蓝牙的部分配置加上去。
然后就开始交叉编译内核。
- #makezImage
3.移植bluez-libs.
创建一个文件夹用来安装libs,然后交叉编译,并安装,流程如下:
我是把所有的都安装包都放在/opt/arm下,可根据自己的情况自己选择。
交叉编译的libs库和utils分别安装在/opt/arm/libs和/opt/arm/utils
- #cd/opt/arm
- #mkdirlibs
- #tarxzvfbluez-libs-2.25.tar.gz
- #cdbluez-libs-2.25
- #./configure--prefix=/home/libs--target=arm-linuxCC="arm-linux-gcc"--build=arm-linux--host=arm-linux
- #viconfig.h
- 加入以下内容:
- #ifndefUCHAR_MAX
- #defineUCHAR_MAX256
- #endif
- #ifndefUSHRT_MAX
- #defineUSHRT_MAX65536
- #endif
- #ifndefPATH_MAX
- #definePATH_MAX4095
- #endif
然后就:wq保存。
在命令行输入
- #cd/opt/arm/bluez-libs-2.25
- #exportPKG_CONFIG_PATH=/usr/lib/pkgconfig
- #make
- #makeinstall
交叉编译utils工具。
- #cd/opt/arm
- #tarxzvfbluez-utils-2.25
- #cdbluez-utils-2.25
- #./configure--prefix=/opt/arm/utils--includedir=/opt/arm/libs/include--libdir=/opt/arm/libs/lib--with-bluez=/opt/arm/libs--disable-test--disable-cups--disable-pcima--host=arm-linux--target=arm-linux--build=i686CC="arm-linux-gcc"
- 然后修改config.h
- #cd/opt/arm/utils/
- #viconfig.h
- 在config.h末尾加入以下内容
- ifndefUCHAR_MAX
- defineUCHAR_MAX256
- endif
- ifndefUSHRT_MAX
- defineUSHRT_MAX65536
- endif
- ifndefPATH_MAX
- definePATH_MAX4095
- endif
- 然后保存
- #pwd
- /opt/arm/utils
- #make
- #makeinstall
由于蓝牙配对时有一个passcode或者是pin.当蓝牙设备A向蓝牙设备B发出连接请求时,A会想B发出一个配对密码,只有当B向A发送相同的 配对密码后才会建立连接。这个发送配对密码是通过/utils/etc/bluetooth/hcid.conf的配置来完成的
- #vi/utils/etc/bluetooth/hcid.conf
到此,libs和utils工具都已经交叉结束。需要一直的libs库和utils工具都在/opt/arm/libs和/opg/arm/utils下了。
接下来要做的就是重做文件系统
将开发板光盘自带的文件系统压缩包复制到/opt/arm下
- #cd/opt/arm
- #tarxzvfroot.tar.gz
- #cd..
- #cdlibs
- #ls
- includelib..(还有其他的目录或者文件夹)
- #cdlib
- #pwd
- /opt/arm/libs/lib
- 将此lib下的所有文件都复制到上面加压的文件系统的/usr/lib和/usr/local/lib中。
- #cd/opg/arm/utils
- #ls
- binsbinetc
- 将此处的bin和sbin里面的所有文件复制到上面解压的文件系统的/usr/bin、/usr/sbin
- #cd..
- #cdetc
- #pwd
- /opt/arm/utils/etc
- #cp-rifbluetooth/opt/arm/root/etc