歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

arm linux串口藍牙工具移植及使用

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對應的控制節點,如下圖

\

可以看到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行

 

  
  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可以去掉,這裡方便調試我才加上

執行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給我的設備發送文件

如果能正常接收調試信息輸出如下:

\

接收完成後會保存在根目錄下.

Copyright © Linux教程網 All Rights Reserved