在S3C2410上移植bluetooth(藍(lán)牙)_第1頁
在S3C2410上移植bluetooth(藍(lán)牙)_第2頁
在S3C2410上移植bluetooth(藍(lán)牙)_第3頁
在S3C2410上移植bluetooth(藍(lán)牙)_第4頁
在S3C2410上移植bluetooth(藍(lán)牙)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——在S3C2410上移植bluetooth(藍(lán)牙)

在S3C2410上移植bluetooth(藍(lán)牙)

最近兩天在HHARM2410-R3上移植了USB藍(lán)牙設(shè)備和BlueZ藍(lán)牙協(xié)議棧,呵呵,藍(lán)牙果真是個(gè)很好的東西,協(xié)議棧內(nèi)容很豐富,掛上去以后可以使用好多功能。我現(xiàn)在就可以用它來接收GPS數(shù)據(jù)以及和用手機(jī)上網(wǎng)。我是在做車載的,所以特別有用。積累了一些關(guān)于藍(lán)牙的知識(shí),但是算是初步的,把我的經(jīng)驗(yàn)發(fā)上來,各位做過藍(lán)牙的大哥請(qǐng)多指導(dǎo)。

先介紹一下硬件,我用的是電腦賣場(chǎng)里面隨便買到的USB藍(lán)牙適配器,價(jià)格在80元左右,應(yīng)當(dāng)是臺(tái)產(chǎn)的,沒有牌子,像一個(gè)小一點(diǎn)的U盤。買之前叫賣家在windows下測(cè)試一下,帶一個(gè)帶藍(lán)牙的手機(jī)過去試試看,確認(rèn)能用再買。

linux上的藍(lán)牙協(xié)議棧有好幾個(gè),官方的藍(lán)牙協(xié)議棧是Bluez,在上能找到所有的說明文檔和源代碼。我先是在自己的pc上安裝了bluez的協(xié)議棧,然后又把它移植到了華恒HHARM2410-R3上。

(一)在Redhat9上安裝Bluez

在pc上的安裝我參考了O'Reilly的LinuxUnwired一書,chapter7中詳細(xì)地介紹了linux下的bluetooth的基礎(chǔ)知識(shí)、安裝、配置和使用。安裝前必需了解一下bluez的基本結(jié)構(gòu),直接位于發(fā)射傳輸協(xié)議之上的協(xié)議是HCI(hostcontrolinterface),我的手機(jī)和藍(lán)牙GPS用到的高層協(xié)議是服務(wù)發(fā)現(xiàn)協(xié)議SDP和模擬串口的協(xié)議RFCOMM,中間那一層協(xié)議是L2CAP,應(yīng)當(dāng)是處理規(guī)律鏈路的吧,我并不是很明白,請(qǐng)參考bluez的官方文檔。

HHARM2410-R3上用到內(nèi)核版本是2.4.18,于是我在pc上安裝bluez時(shí)也使用了2.4.18的內(nèi)核。使用bluez必需要對(duì)內(nèi)核打patch的,于是到上下載了linux-2.4.18.tar.bz2后到/patches.html上下載針對(duì)2.4.18的patch,patch-2.4.18-mh15.gz。于是,解壓,打patch:

#tarxjvflinux-2.4.18.tar.bz2

#cdlinux/

#gzip-dc../patch-2.4.18-mh15.gz|patch-p1

注意一下這時(shí)的patch的輸出,在源代碼方面的patch是針對(duì)driver/、include/、net/目錄下的代碼的修改,并沒有修改到內(nèi)核部分的內(nèi)容,應(yīng)當(dāng)沒有修改到linux核心的東西,在移植到S3C2410時(shí)應(yīng)當(dāng)不會(huì)有太大的問題。

下面就是編譯內(nèi)核,在config的時(shí)候關(guān)于bluez我的配置是這樣的:

#

#Bluetoothsupport

#

CONFIG_BLUEZ=m

CONFIG_BLUEZ_L2CAP=m

CONFIG_BLUEZ_SCO=m

CONFIG_BLUEZ_RFCOMM=m

CONFIG_BLUEZ_RFCOMM_TTY=y

CONFIG_BLUEZ_BNEP=m

CONFIG_BLUEZ_BNEP_MC_FILTER=y

CONFIG_BLUEZ_BNEP_PROTO_FILTER=y

#

#Bluetoothdevicedrivers

#

CONFIG_BLUEZ_HCIUSB=m

#CONFIG_BLUEZ_HCIUSB_SCOisnotset

在S3C2410上移植bluetooth(藍(lán)牙)

TXbytes:313acl:0sco:0commands:15errors:0

Features:0xff0xff0x8d0x780x080x180x000x00

Packettype:DM1DM3DM5DH1DH3DH5HV1HV2HV3

Linkpolicy:RSWITCHHOLDSNIFFPARK

Linkmode:SLAVEACCEPT

Name:'BlueZ(0)'

Class:0x000100

ServiceClasses:Unspecified

DeviceClass:Computer,Uncategorized

HCIVer:1.2(0x2)HCIRev:0x1aeLMPVer:1.2(0x2)LMPSubver:0x1ae

Manufacturer:IntegratedSystemSolutionCorp.(57)

可以看到目前設(shè)備的配置狀況,有些是從hcid.conf中讀取的,有些是從設(shè)備中讀取的。

下面,開啟手機(jī)上的藍(lán)牙,啟動(dòng)藍(lán)牙GPS

#hcitoolscan

Scanning...

00:0E:07:58:1A:33T628

00:08:1B:C0:D1:3CHOLUXGR-231

這樣就看到了兩個(gè)設(shè)備了,我用的是索愛的T628和HOLUX的藍(lán)牙GPS,前面的一串應(yīng)當(dāng)是藍(lán)牙設(shè)備唯一的地址。#sdptoolbrowse可以看到每個(gè)設(shè)備所提供的服務(wù)

Inquiring...

Browsing00:0E:07:58:1A:33...

ServiceName:Dial-upNetworking

ServiceRecHandle:0x10000

ServiceClassIDList:

DialupNetworking(0x1103)

GenericNetworking(0x1201)

ProtocolDescriptorList:

L2CAP(0x0100)

RFCOMM(0x0003)

Channel:1

ProfileDescriptorList:

DialupNetworking(0x1103)

Version:0x0100

ServiceName:SerialPort1

ServiceRecHandle:0x10003

ServiceClassIDList:

SerialPort(0x1101)

ProtocolDescriptorList:

L2CAP(0x0100)

RFCOMM(0x0003)

Channel:4

在S3C2410上移植bluetooth(藍(lán)牙)

ServiceName:OBEXObjectPush

ServiceRecHandle:0x10005

ServiceClassIDList:

OBEXObjectPush(0x1105)

ProtocolDescriptorList:

L2CAP(0x0100)

RFCOMM(0x0003)

Channel:10

OBEX(0x0008)

ProfileDescriptorList:

OBEXObjectPush(0x1105)

Version:0x0100

Browsing00:08:1B:C0:D1:3C...

手機(jī)上綁定了好多的服務(wù),有撥號(hào)服務(wù),音頻服務(wù),串口服務(wù),文件交換服務(wù)(OBEX)...在SDP協(xié)議下,每個(gè)服務(wù)綁定到一個(gè)Channel上。GPS上沒有綁定服務(wù),它只作為虛擬串口設(shè)備來使用。

利用實(shí)用工具rfcomm可以把遵循RFCOMM的服務(wù)bind到一個(gè)類似的串口設(shè)備上。在綁定之前,必需確保/dev下有rfcomm*的設(shè)備,假使沒有,就自己建立:

#mknod-m666/dev/rfcommXc216X(X是數(shù)字)

這樣就可以綁定了,譬如我需要用手機(jī)撥號(hào)上網(wǎng)的功能,看到它的Channel1是RFCOMM的DialupNetworking功能,則:#rfcommbind000:0E:07:58:1A:331

即將00:0E:07:58:1A:33設(shè)備的Channel1服務(wù)綁定到/dev/rfcomm0上,這樣,就相當(dāng)于建立了一個(gè)虛擬的串行連接到一個(gè)可以撥號(hào)的無線modem上了,開啟minicom,設(shè)置串口為/dev/rfcomm0,波特率19200,8N1,鍵入atz,返回OK。用ppp就可以撥號(hào)上網(wǎng)了,第一次連接時(shí)手機(jī)遇彈出個(gè)輸入框問PINcode,以后就不用了。

GPS設(shè)備只是作為串口來用的,也很簡(jiǎn)單:

#rfcommbind100:08:1B:C0:D1:3C

開啟minicom設(shè)置波特率為4800就可以讀GPS數(shù)據(jù)了,大功告成!

另外,sdpd程序是本設(shè)備提供給對(duì)外的看到的服務(wù),可以通過sdptooladd--channel=XSP來增加對(duì)外的服務(wù),我沒有研究過。還有對(duì)于文件傳輸OBEX和個(gè)人局域網(wǎng)BNEQ還需要繼續(xù)學(xué)習(xí)。

二)在HHARM2410-R3上的移植

完成了在普通redhat上的安裝,熟悉了藍(lán)牙協(xié)議棧一些基本的東西,下面的任務(wù)就是把協(xié)議棧搬到開發(fā)板上了。第一步當(dāng)然是內(nèi)核了,由于華恒的內(nèi)核代碼改過,我也不知道從bluez上下載的patch能不能使用,試試看了,只好。#cd/HHARM2410/kernel

#gzip-dc~/patch-2.4.18-mh15.gz|patch-p1

#find./-name'*rej'

./fs/cramfs/inode.c.rej

不好,有文件不能patch,看看是針對(duì)cramfs文件系統(tǒng)的patch,我也不明白為什么bluez的patch會(huì)修改到cramfs,不過我想問題應(yīng)當(dāng)不大。內(nèi)核源代碼關(guān)于bluetooth的部分華恒應(yīng)當(dāng)沒有改過,因此patch的主要部分應(yīng)當(dāng)是沒有問題的。假使內(nèi)核編譯后發(fā)生問題,我想大約也只有把內(nèi)核代碼翻出來看了。

在S3C2410上移植bluetooth(藍(lán)牙)

echoPIN:123

用C實(shí)現(xiàn)一個(gè)就是:

#includestdio.h

intmain(intargc,char*argv[])

{

printf(PIN:123);

}

交織編譯成my_pin_helper再放到板子的/usr/bin下,那么就可以把板子的hcid.conf修改成:pin_helper/usr/pin/my_pin_helper

后來,我在板子上也用MiniGUI寫了一個(gè)pin_helper,也挺簡(jiǎn)單的。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論