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 的功能.

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 了.

2008/11/25

Neo FreeRunner 新手手冊 (2) 登入 FreeRunner 終端機及安裝/更新套件


Neng-Yu Tu (Tony Tu)

FreeRunner 基本上有兩種終端機 (Terminal) 模式, 分別是 u-boot 時的 UART 終端機模式以及開機完成後, 可以透過 FreeRunner 預設的 SSH server 連進 FreeRunner. 基本上直接用 Linux (或是 vmware 上的 Linux) 的系統做這些連線比較簡單, 只要直接連上就可以直接從 /dev/ttyACM0 或是 ifconfig 看到 USB0. Windows 則需要裝另外的 RNDIS gadget 驅動程式 .inf 檔案. 接下來會針對這幾種方式說明.

Neo 還有一個 debug board (上面還有一顆蠻神奇的 FTDI 晶片), 可以透過主板上的 debug port (UART/JTAG) 對 Neo 做低階除錯動作. 在此先略過.

[U-Boot 終端機]

U-Boot 的終端機是典型的 UART terminal, NOR flash 跟 NAND flash 裡面的 u-boot 預設的輸出導向都是 USB tty. U-boot 終端機可以用來做一些低階的 register 開關或設定動作. 或是像是重設開機環境變數之類. 相關的資料可以從:

http://wiki.openmoko.org/wiki/U-boot 找到. 以 NOR u-boot 來說, 開機時按下 Aux 鍵, 再按下開機鈕, 畫面會停在 u-boot 上. 此時連接 FreeRunner 及手機上的 USB 接頭, 應該可以在 /dev 下看到 ttyACM0.

然後可以挑一個習慣的 COM port 公用程式, 像是 minicom 或是圖形的 cutecom. 或是個人常用的 neocon/cu . neocon 可以從http://svn.openmoko.org/developers/werner/neocon/ 找到.

連接參數為 115200, N, 8, 1, no hardware flow control

[用 SSH 連到 Neo]

FreeRunner 預設的 image 都有 SSH server/client (dropbear), 可以透過 SSH 進到 FreeRunner , 同時可以用 SCP 做一些檔案傳輸的工作. FreeRunner USB 埠預設的

IP address 是 192.168.0.202, netmask 是 255.255.255.0 這些設定都可以在FreeRunner /etc/network/interfaces 下修改.

所以當開機完成後, 連接電腦及 FreeRunner, 然後用 root 帳號登入 192.168.0.202 (使用 sudo or login as root), 密碼是空白:

root@ubuntu:~# ifconfig usb0 192.168.0.200 netmask 255.255.255.0
root@ubuntu:~# ssh root@192.168.0.202
root@192.168.0.202's password:
root@om-gta02:~#

然後接下來你就可以下一般的 linux command 及使用 script 了.

[安裝及更新套件]

Openmoko 使用源自 ipkg 的 opkg 套件管理系統, 改名的原因有很多, 但是重點是: 基本架構 opkg 跟 ipkg 是很類似的. 如果使用過 yum 或是 apt-get, opkg 的用法也是差不多的. 所以安裝套件有 3 種方式, 一種是將套件檔 xxx.ipk 或 xxx.opk 從網路上下載, 然後手動進終端機畫面後安裝. 第 2 種, 是利用 Neo 本身的 USB/Wi-Fi/Bluetooth 網路功能, 連線後透過終端機進行套件的安裝工作. 或是第 3 種, 網路連線後, 透過 2008.x 上面的 Installer 來進行安裝.

由於 Openmoko 本身非常具有 "community development" 的特性 ;) 所以套件的相關位址和狀態一直在變化. 最早隨 FreeRunner 出貨的 200804 GTK (有時也被稱為 2007.x 版) 版本, 是無法直接用 opkg update 或是 opkg upgrade 到最新的 Om2008. 9 or later . 建議直接參考其他資料先進行 FreeRunner 更新 image 的動作. 同時 2008.x 也有 release/un-stable/testing 的幾個不同的 tracking. 不同 Tracking 的差別會稍後說明.

FreeRunner 相關的 opkg feed 設定, 可以在 etc/opkg/ 的 .conf 檔案中找到. opkg 套件管理程式主要的 maintainer 是 tick.

* 手動安裝
Step 1: 搜尋一下哪裡有提供 neo package 的位址, 或可以從 http://t0ny.net/openmoko/opkg/samples/ 下載 orrery_2.0_arm_2008.8.ipk 然後繼續下面的步驟.

Step 2: 透過下面的命令連線:
root@tony-ubuntu:~# ifconfig usb0 192.168.0.200 netmask 255.255.255.0
root@tony-ubuntu:~# ssh root@192.168.0.202
root@192.168.0.202's password:
root@om-gta02:~# scp root@192.168.0.200:~/Desktop/opk/orrery_2.0_arm_2008.8.
ipk root@192.168.0.202:~
WARNING: Ignoring unknown argument '-x'
WARNING: Ignoring unknown argument '-oClearAllForwardings yes'
WARNING: Ignoring unknown argument '-n'
root@192.168.0.200's password:
root@om-gta02:~# ls

Step 3: 直接利用 opkg install orrery_2.0_arm_2008.8.ipk 安裝套件. 有時套件系統會因為某一些系統行為停掉, 此時你必須使用killall packagekitd 來停掉 opkg 服務再重新進行安裝程序.

* 透過網路安裝
透過網路連線需要幾個額外的步驟, 建立 USB/wi-fi/Bluetooth 網路連線及設定 Neo 的 DNS 設定. 設定完後, 就可以直接透過 opkg install 安裝.

root@om-gta02:~#opkg install packagename.opk

* 透過 UI 上的 Installer 安裝
必須先建立網路連線, 才能透過 Installer 安裝相關的 package. 你必須先到 2008.x 的主畫面中, 選擇 Settings, 然後啟動 wi-fi 並輸入 WPA 密碼. 螢幕小鍵盤的使用方式很 tricky, 你必須在鍵盤右側的黑框上, 上下移動選擇數字或其他特殊符號. 由於 2008.x 的 wi-fi 設定程式有些 bug, 建議參考其他方式確認網路連線後, 再透過 Installer 安裝.

[移除 package]
移除 package 可以使用 opkg remove package_name , 相關的命令可以用 opkg --help 找到

Neo FreeRunner 新手手冊 (1) 認識 Distribution 及更新 image


Neng-Yu Tu (Tony Tu)


[認識 Openmoko 的相關 Distribution]

通常拿到 Neo 第一件是要學會的就是如何更新手機裡面的image. 目前 Neo 有以下的 image 可供選擇.

* Om2007.2: 由 Open Hand 主導的使用者介面設計 (work for Intel Moblin now) , 建立在 GTK 的基礎上, image 可以從以下網址找到:
Image: http://t0ny.net/openmoko/images/200804/






















* Om2008.x : 這是目前 (2008 年) 還在維護的版本, 基本上是由 open source 版的 QT/X11 加上 raster 的 illum ETK. ETK 提供了自己的圖形介面 API, 還有自己的 python binding.
Image: http://t0ny.net/openmoko/images/200809/
























* Android: 根據 Google釋出的原始碼, 由 Sean McNeil 維護的 Neo Android 版本, Beta 4 (RC1) / Cupcake 之前的版本在 FR 上需要一張額外的 uSD 記憶卡 (128 MB 以上).
說明: http://wiki.openmoko.org/wiki/Android
Image: http://t0ny.net/openmoko/images/android/























* QT extended: Trolltech(a Nokia company now)/Qtopia 維護的版本, 目前到 4.4.x
http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner

image: http://www.qtopia.net/modules/mydownloads/index.php






















* Debian: Debian 社群開發並維護的版本.
* FSO: Mickey 跟 2009 年 openmoko framework 可能方向, 基本上 FSO 是建立在 D-Bus 上的應用程式架構, 透過 python binding 的 toolkit (如 GTK/ETK) 來呈現使用者介面的畫面.
http://wiki.openmoko.org/wiki/OpenmokoFramework























* SHR 及 FDOM: 基本上是社群上的人自己維護的 image, SHR 主要重點在提供 illum/enlightment 標準介面/畫面以及 tangoGPS 程式. FDOM 目的是解決官方版釋出的 image 裡面的套件不足以供一般的開發需要. 同時省掉需要 opkg install/upgrade 的麻煩. 詳細差別可以參考以下網址:
http://wiki.openmoko.org/wiki/SHR

[SHR] http://shr.bearstech.com/























[FDOM] http://www.tuxbrain.com/fdom_en.html




















[更新 FreeRunner image 的方法]

更新 FreeRunner 的 image 有兩種辦法:
<方法 1>
一個是透過 FreeRunner 上面的 USB, 透過 DFU (Device firmware update) 協定及 dfu-util 程式, 然後利用開機進到 kernel 前的 u-boot, 更新 image. 此外, 目前只有 linux 的電腦才能做 DFU update 的工作. 當然如果你用 vmware 之類的 emulator 上跑的 linux 也是可以的, 不過記得連接 FreeRunner 時的程式 focus (視窗) 要是 vmware 的 Linux 才行.

FreeRunner 的 DFU 是由 Werner 維護開發的, 相關的原始碼在 http://svn.openmoko.org/trunk/src/host/dfu-util/ . 更多的資料可以查
http://wiki.openmoko.org/wiki/Dfu-util.


<方法 2>
如果你有 micro SD card, 最快的方法是直接把 image copy 到 micro SD card, 然後從 micro SD card 執行 script. 你可以參考以下 script 來做更新 FreeRunner 裡面的 image.
http://t0ny.net/openmoko/samples/script/dl_finalimg

[更新 FreeRunner image 的步驟]

< Step 1>
從上面的連結中下載 dfu-util 的原始碼自行編譯或是 download 已編譯好的套件

< Step 2>
http://downloads.openmoko.org/releases/ 下載最新的 images, 或從前面的連結中, 找到相關的檔案, 下載到本機上.

< Step 3>
如果是啟動 NOR boot (先按 Aux 鍵, 再按開機紐), 開機畫面就會停住. 同時此時你可以透過 USB 將 FreeRunner 跟你的 Linux 連起來. 然後就可以用 sudo 或是 root 權限執行 dfu-util 進行升級的動作.

<Step 4>

* 更新 rootfs:
./dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2
OR
./dfu-util -a 6 -R -D /path/to/openmoko-devel-image.jffs2

* 更新 kernel:
./ dfu-util -a kernel -R -D /path/to/uImage
OR
./ dfu-util -a 3 -R -D /path/to/uImage

* 更新 bootloader
./dfu-util -a u-boot -R -D /path/to/u-boot.bin
OR
./dfu-util -a 1 -R -D /path/to/u-boot.bin

* 更新開機 splash image
./dfu-util -a splash -R -D /path/to/splash.gz
OR
./dfu-util -a 4 -R -D /path/to/splash.gz

* 更新開機參數 (environment variable)
./dfu-util -a u-boot_env -R -D /path/to/env_new
OR
./dfu-util -a 2 -R -D /path/to/env_new

<Step 5>

記得檢查 DFU 的結束的訊息, 當進度條結束並不代表更新一定成功. 如果 DFU 一直中斷, 記得檢查 DFU 的參數是不是下錯, 或是 USB cable 是不是沒接好. 如果你是從一般 u-boot (不是從 NOR 的 u-boot) 更新, 可能更新 NAND 裡面的 u-boot 也是一個 方法.

2008/11/14

memorial

2008 Nov 14, really a sad day. 2007 Nov 14, a happy day.

2008/10/29

XTC HB3 2009

Finally, after 5 weeks of waiting, get my second Giant last week.


全部相片請點這 All my XTC HB3 snapshot could click here :)


First ride to Taipei Tamshui is cool, with some Openmoko colleagues, and trip total about 50 Km. I forget bring the sunglass, a little dizzy during whole trip.

Unfortunately, the bike have few serious _dings_ during first ride. Anyway, I love this bike so far :)

2008/10/22

光陽 Racing 的廣告

難得最近看到一個覺得有打動自己某個部分的摩托車廣告, 女主角側面還蠻像 Yanzi 感覺. 不過看了一下她本人無名基本資料 http://www.wretch.cc/mypage/pig2003zoo 比 Yanzi 本人大隻一些 :) 看 blog 的 title: You are reading my shit. 態度十足, 能力就再看看囉

另外歌也還不錯聽, 跟廣告畫面一氣呵成, Sunshine state 的歌果然很有 sunshine 的感覺 http://www.sunshinestate.ca/ 聲音跟編制都很像 Frente 的風格, 蠻適合校 園的青春大學生的 Tune.

A Good CF...

2008/8/4

instant messaging

I have 4 different messaging client installed (MSN/Skype/irc/jabber),
now I understand why some people need trillian as IM client. It so
strange even for the same function, still need so many clients and
protocols. It just a waste from dark side, maybe it also represent the
world diverse in the bright side.

2008/7/31

ghost is everywhere, always

Chinese ghost month will start from tomorrow for 1 lunar month. For Chinese, ghost only could legally out of hell into human world during ghost month. And ghost has another meaning for describe malicious/odd/smart people in Chinese. So, ghost is everywhere, always :D

2008/7/28

Jack Black's Tenacious D in The Pick of Destiny

I thought school rock could be end of jack black's rock BS :) but Tenacious D in The Pick of Destiny is more hilarious. Nowadays rock n' rolls become a joke even in serious duel with devil (well, at least crossroads has some serious fight, IMO). Maybe next time have some movie do JB vs. JB (Jack Black vs. Jack Butler).

Anyway, good job, jack.

2008/7/26

Amazing Community

Well, since I been accept the modernmusician music/theory discussion forum moderator few years ago, and now the openmoko project. I was so amazed community member's insight of on discussion topic. Some people just could see through things even more clearly than people actual working on things. Just very cool!

2008/7/25

Mail and Post

It's first time using mail posting function of blogspot. Posting through
e-mail have strange feel for me, maybe because of the interface remind me the daily work.

And I made a mistake at first post, wrong e-mail address... a usual
un-deliverable reason after several times of check on update.

2008/7/19

重新開始

這幾年在各個地方 post 了一堆東西, 但是卻沒有一個集中的地方放這些東西. 想一想還是就放在一開始接觸 blog 的 blogspot 吧.

從脫離學校以來, 一路走來奇奇怪怪. 呵, 從好處想是各式各樣的生活都體驗過了, 應該可以寫一個有趣的 blog.
 
Creative Commons License
著作 係採用創用 CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款授權.