2008/11/26

Neo FreeRunner 新手手冊 (3) 建立 FreeRunner 對外網路連線 - USB/Wi-Fi


Neng-Yu Tu (Tony Tu)


FreeRunner 分別可以透過無線 (Bluetooth, Wi-Fi, GPM(GPRS) 以及有線 (USB) 的方式. 但是從使用者介面上可以完成部分 Wi-Fi 連線功能外, 其他的連線方式可能需要進到命令模式, 然後透過手動下 script 的方式完成.

不同的 Distribution 可以用的 script (例如 FSO 有提供許多的 python binding service) 也不一樣, 當然最原始的方式就是直接下 bash script. 以下提供了 Host (PC) 端及 FreeRunner 端的連線 command 方式. 接下來以 ubuntu 為例, 分別設定以下幾種連線.

[USB 連線]

FreeRunner 的 USB port 預設在 USB 1.1 slave 的模式, 可以透過 Host 端電腦的 NAT 和外部的網路建立雙向連線. 下面分別是 Host PC/Neo 端分別需要下的命令.

更詳細的資料可以參考: http://wiki.openmoko.org/wiki/USB_Networking

* Host (ubuntu) 端
Host 端分成兩個步驟, 第一段是建立 SSH 的連線, 第二段是建立 packet forwarding 規則.

<Step 1>

sudo ifconfig usb0 192.168.0.200 netmask 255.255.255.0

ssh root@192.168.0.200

<Step 2>

Sudo iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
Sudo sysctl -w net.ipv4.ip_forward=1

不同的 distribution/version 會有不同的指令設定, 不同防火牆也可能會有不同的結果. 可以直接參考 http://wiki.openmoko.org/wiki/USB_Networking

* FreeRunner 端:

Host PC 端跟 FreeRunner 連線後, FreeRunner 的預設 image 需要 "額外" 的一項設定, 需要加入 DNS nameserver 的名稱解釋服務.
echo nameserver 208.67.222.222 > /etc/resolv.conf
echo nameserver 208.67.220.220 >> /etc/resolv.conf

當然, 你可以熟悉 FreeRunner 的設定後, 套用到 FreeRunner 的

/etc/network/interfaces 裡面.

[Android Cupcake 0.1.1 and after]
PC side:

iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
sysctl -w net.ipv4.ip_forward=1

FR side:
route add default gw 192.168.0.200 dev usb0
setprop net.dns1 168.95.1.1

[Wi-Fi 連線]

目前 FreeRunner 的 Wi-Fi Atheros AR6001 module 是透過 SDIO 介面連接 (所以如果你需要 Samsung 的 SDIO host controller code 可以參考 OM 的 implement, OM 的 implement 基本上是 based on OpenHand 的 Samuel 的 implement), 所以並不需要做 power on/off 的動作就可以使用模組. Wi-Fi 連線設定的關鍵, 主要在兩種連線加密模式 WEP 跟 WPA 的設定.

更多的資料可以參考: http://wiki.openmoko.org/wiki/Neo_FreeRunner_Wifi

* WEP

<Step 1>

登入 GTA02 後, 先看附近有哪些無線 AP

iwlist eth0 scan

<Step 2>

Key 欄位填入連接網路 AP 的 key
Essid 填入網路的 AP 名字 (essid)

iwconfig eth0 key 1234567890 essid myAP
ifdown eth0 && ifup eth0
udhcpc

最後一行指令是利用 udhcpc 動態取得 DHCP 的位址

* WPA

<Step 1> 建立 WPA 設定檔
利用 vi 或其他文字編輯程式, 建立如下設定檔

-----------
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

# WPA2:

network={
ssid="WPA2_AP_Name"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=TKIP CCMP
psk="YourPSK"
priority=50
}

# WPA:
network={
ssid="WPA_AP_Name"
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
group=TKIP
scan_ssid=1
psk="YourSPK"
priority=10
}

# WEP:
network={
ssid="WEP_AP_Name"
scan_ssid=1
key_mgmt=NONE
wep_tx_keyidx=0
wep_key0="your WEP key"
priority=8
}
# Open:
network={
ssid=""
key_mgmt=NONE
priority=5
}
-------
<Step 2> 套用 WPA 設定檔, 重新啟動

wpa_supplicant -i eth0 -c /home/root/wpa_supplicant.conf -B
ifup eth0

如果無法連上, 可以試試 ifdown eth0 再試試.
連上後, 可以 ping http://www.hinet.net/ 或是 168.95.1.1 看看是否 DNS 跟網路的連線都 ok 了.

沒有留言:

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