2008/11/27

Neo FreeRunner 新手手冊 (4) 建立 FreeRunner 對外網路連線 - Bluetooth


Neng-Yu Tu (Tony Tu)

Bluetooth 和 GPRS 裝置和 FreeRunner (以下簡稱 FR) 上的 USB 連線或 Wi-Fi 連線不一樣, 在使用前, 需要額外透過 command 先將這些裝置開啟, 然後才能執行. 先針對 Bluetooth 裝置說明. 詳細的內容可以參考 wiki 上的 http://wiki.openmoko.org/wiki/Manually_using_Bluetooth 網頁的說明. 此外 FR 上面的 Bluetooth 是 Delta 的模組, chipset 是 CSR 的 Bluetooth 2.0.

FR 使用的 Bluetooth stack 是 Marcel 的 BlueZ, 但是 BlueZ 能提供的功能, 在 FR 上都可以達到. 但 FR 並沒有提供完整的 profile 操作介面供連線/功能操作使用.

直接使用 BlueZ 的公用程式, 確實可以進行常見的 GAP, FTP, HID, PAN 的 "功能", 唯一的問題是: 必須手動完成大部分的功能及 handshake 驗證, 或是需要修改 /etc/Bluetooth/hcid.conf 的設定.

FR 上的 Bluetooth 是透過 USB 介面連接到 CPU, 預設的狀態是關閉的. 所以使用前必須先開啟 Bluetooth. 開啟的方式很簡單, 只要透過 command 就可以直接開關 Bluetooth 裝置.

同時, 由於 etc/network/interfaces 裡面的 Bluetooth 設定, 預設是 iface bnep0

inet dhcp. 建議先用 # disable 掉這個功能.

<Step 1> 開啟 FR 上的 Bluetooth device

root@om-gta02:~# echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on
root@om-gta02:~# echo 0 > /sys/bus/platform/devices/neo1973-pm-bt.0/reset

<Step 2> 執行 hciconfig, 透過這個命令我們可以確認 Bluetooth 是否正常執行, 以及取得目前 FR Bluetooth 的位址.

root@om-gta02:~# hciconfig
hci0: Type: USB
BD Address: 00:06:6E:16:DE:BD ACL MTU: 384:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:949 acl:0 sco:0 events:23 errors:0
TX bytes:342 acl:0 sco:0 commands:23 errors:0

如果沒有得到上述訊息, 可以用 hciconfig hci0 up 強迫啟動, 或是重複 Step 1 到 2.

<Step 3>

此時連線步驟要先切回 Host (ubuntu) 端, 請先開啟 Host 端的 Bluetooth, 執行以下命令.
root@ubuntu:~# modprobe bnep
root@ubuntu:~# pand --listen --role NAP

<Step 4> 在 FR 執行以下命令, 00:11:22:AA:BB:CC 處請填上 Host 端的 Bluetooth MAC 位址.
root@om-gta02:~# pand -c 00:11:22:AA:BB:CC --service NAP --autozap
root@om-gta02:~# ip a add 10.0.0.2/24 dev bnep0
root@om-gta02:~# ip r del default
root@om-gta02:~# ip r add default via 10.0.0.1

你可以從這邊下載完整的 script
http://t0ny.net/openmoko/samples/script/bt_net.sh

有時建立連線會失敗, 或 bnep0 沒啟動, 請執行下面這一行指令.

root@om-gta02:~# ip l set bnep0 up

<Step 5> 然後回到 PC 端, 設定 Bluetooth network 及 IP forwarding 的規則

FR 建立連線後, 可先用:

root@ubuntu:~# pand --show --list -l
應該會看到:
Bnep0 00:06:6E:XX:XX:XX NAP
看到這個訊息代表 FR 真的連上線了, 然後執行:
root@ubuntu:~# ip a add 10.0.0.1/24 dev bnep0
root@ubuntu:~# ip l set bnep0 up

接著可以從 Host 端, 及 FR 端分別 ping 10.0.0.210.0.0.1 看看是否可以雙向連上線.

root@ubuntu:~# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=47.2 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=22.0 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=24.0 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=17.0 ms

或是從 ifconfig 中看到.
root@om-gta02:~# ifconfig
bnep0 Link encap:Ethernet HWaddr 00:06:6E:16:DE:BD
inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::206:6eff:fe16:debd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:268 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:284 (284.0 B) TX bytes:11737 (11.4 KiB)

<Step 6>

如果需要, 請在 Host 端, 和 USB 連線一樣, 再加入 packet forward 的功能.

沒有留言:

 
Creative Commons License
著作 係採用創用 CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款授權.