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对应的控制节点,如下图
在/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可以去掉,这里方便调试我才加上
此时打开手机蓝牙进行扫描,就可以看到我们的设备了
————————————————
版权声明:本文为CSDN博主「红尘六欲」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hclydao/article/details/51451725