Reverse USB tethering

By cwhuang, 2010 年 05 月 18 日

Tethering 是一種讓手機之類的行動裝置分享上網功能的技術。PC、筆電或其它裝置,可透過 wifi、藍牙或 USB 線,連接到手機,再透過手機的 3G 或 wifi 上網。這是十分方便的一種行動上網技術。可惜的是,Android 系統目前並未內建 tethering 功能(據說,下一版的 Android 2.2 Froyo 將會內建)。所幸,可以安裝第三方軟體,如 android wifi tether 來提供 tethering 的功能。或是改刷 Cyanogenmod ROM,也內建了 USB tethering 的功能。不過,這些動作都需要先取得 root 權限才能進行(也意味著失去保固)。

不過,這篇文章要談的不是如何在 Android 上使用 tethering。網路上已經可以找到許多教學文章了。我要做的是相反的事,也就是讓手機透過 PC 或筆電上網。如果你像我一樣,僅使用 2G sim 卡(因此沒有 3G 上網),剛好又在沒有 wifi 的環境,這時 reverse tethering 便派得上用場了!

基本上 tethering 的原理很簡單,就是利用 NAT 的功能,其中一端做為 NAT router 負責轉送封包,另一端當 client 將封包送給 router 來達到上網目地。普通的 tethering 是由手機端當 NAT router,PC 端當 client。而本文介紹的 reverse tethering 剛好反過來,由 PC 端當 NAT router,手機做為 client。現代的 Linux 都已內建 NAT 功能,Android 的 kernel 也是 Linux,因此要支援 NAT 並不困難。

我測試的環境如下:Android 手機是 Nexus One,已經改刷 Cyanogenmod 5.0.6-N1。因為這個版本已內建 USB tethering 功能,方便多了。其它的 Android 只要是跑 Cyanogenmod ROM 的應該都可以用。否則的話,可能就要自己重編 kernel,打開 netfilter,並安裝 iptables 等工具程式。

PC 端我跑的是 Fedora Linux 12。基本上任何的 Linux 發行版本應該都可以,但步驟可能略有不同。用 Windows 的話理論上也可以,但我不熟,抱歉啦!

測試方法如下: Read more »

OESF Android Steps Ahead 2010/Tokyo

By cwhuang, 2010 年 04 月 23 日

OESF 在日本東京舉行的 Android Steps Ahead 研討會已順利結束。Android-x86 在 technical track 分享了我們的開發經驗和成果,獲得不少回響。還意外見到了 Android-x86 在日本的一位開發者 Kinneko,他曾貢獻自動掃瞄硬體裝置並載入驅動程式的功能給 Android-x86 。能夠親眼見到各位業界先進,以及各種基於 Android 而開發的產品,更感到 Android 的潛力無限。這是此行的最大收獲。

在此特別感謝邀請 Android-x86 與會的 OESF 台灣辦公室 Tad 先生,以及在演講會場負責日文口譯的 Mika 川口美香小姐。藉由他們的幫助,使得 Android-x86 計劃能夠在國際發聲,並使當地聽眾更了解 Android-x86。

這裡有一個短片,是由 OESF future system working group 所製作,勾畫出將來 Android 系統可能深入我們的家庭和生活。

以下是一些照片的分享: Read more »

Android-x86 向前走:OESF 演講

By cwhuang, 2010 年 04 月 20 日

OESF 是在日本成立的一個非營利組織,以推廣和交流 Android 作業系統的應用為宗旨,特別是 Android 在非手機系統上的使用。成員除日本大公司外,也包含美國、台灣、韓國和中國大陸等地的公司或法人。例如負責驗證測試的工作小組(Working Group)就是由台灣的工研院所主導。

明天 OESF 將在日本東京舉行一場「Android 向前走」(Android Steps Ahead)的研討會。Android-x86 計劃應邀於 Technical Track 進行演講。比較特別的是,演講將以中文進行,現場並有日文同步口譯。

如果現場狀況許可,我將以 Android-x86 1.6-r2 做為簡報展示平台。演講所使用的簡報已公開在此:

Eclair-x86 更新

By cwhuang, 2010 年 04 月 18 日

最近 Yi 和我都比較忙碌,因此 Android-x86 計劃沒什麼大進展。不過為了 OESFAndroid Steps Ahead 會議演講,花了些時間,將 eclair-x86 重新 rebase 到 AOSP 的 eclair branch 最新版本(2.1-update1),並修正了已知的編譯問題。取得的方法先前一模一樣:

$ repo init -u git://git.android-x86.org/manifest.git -b eclair-x86
$ repo sync

也可以從 SourceForge mirror 下載:

$ repo init -u git://android-x86.git.sf.net/gitroot/android-x86/manifest.git -b eclair-x86
$ repo sync

值得一提的是,加入了 0xdroid 計劃對 frameworks/base 的效能修正,使得界面操作的流暢性增加許多,大概和 1.6 版差不多了吧。
Read more »

新版 Google Maps 4.1

By cwhuang, 2010 年 04 月 17 日

先前提到在 Android-x86 上能跑 Odroid 修改過的 Google maps。不過那版本還是 3.x 的,有點舊。最近在 XDA developers 論壇上,看到有高手放出修改過的 Google Maps 4.1。抓下來試試,果然在 Android-x86 上也能執行,連導航功能也可以使用。而且這個 apk 直接安裝就好,不用像 Odroid 的檔案那麼麻煩。

用 Android-x86 的瀏覽器直接去 XDA developers 論壇的文章下載就好,或者抓這裡的 mirror。附帶一提,要把 apk 放在 apache 上讓 Android 下載後就可安裝,必須將 apk 的 mime type 設為 application/vnd.android.package-archive 才行(資料來源)。

誰偷了 Android-x86?

By cwhuang, 2010 年 03 月 31 日

先前曾提到,有個山寨版的 Android-x86 網站,明明對 Android-x86 計劃沒有任何的貢獻,卻大剌剌的在首頁放了要大家捐款的圖示。想藉本計劃的名氣來吸金嗎? 只可惜本計劃人氣低落,至今為止只收到三筆,總共 20 元美金的捐款而已。他人想藉本計劃吸金發財的夢想可能要破滅了! 當然我想得到捐款來買一支 Android 手機的希望也幻滅了。(還是說我們捐款都被山寨版網站給吸走了?)

無獨有偶,現在又發生了疑似剽竊 Android-x86 的成果,改成自己的名字來發表的事。話從我們的 eclair 2.0 porting 開始說起。先前在 Android-x86 2.0 初體驗一文曾提到在 bionic linker 處理 weak symbols 上有瑕疵,導致在 x86 上出問題。Yi 首先做出修正,我經過整理後,已提交給 AOSPcode review,代號 12801。這已經是去年 12 月 8 號左右的事情了。

不料,Android team 一直沒有 review 這個修正(就像絕大多數修改一樣)。直到昨天,我才收到第一個 review 的結果,這位叫 David Turner 的 Android 開發工程師,希望我拿掉非必要的 debug 訊息修改後,再重新提交。我立刻依照要求做了修改,並重新提交為 14117 號修正。(其實不應該提交成新的 patch,應該取代掉舊的。但我不熟悉 repo upload,所以犯了錯誤。後來發現應該用 repo upload –replace 才對。)

今天 David 說已 approve 這個修改,但 merge 時有 conflict,希望我 merge 或 rebase 後重新提交。我抓了最新的 bionic 要 rebase 時,卻驚訝的發覺這個修改已經存在於 bionic master branch 中,只不過,作者被換了一個人,由 Yi Sun 變成了 Min-su Kim. (姓金? 韓國人?)

如果這位金先生是自己獨立發現相同的問題,並且跟我們做出了相同的修正,那也很好。英雄所見略同,這樣的例子在歷史上屢見不鮮。然而,仔細閱讀了他提交的 14063 號修正後,我的想法有了 180 度的轉變。很顯然的這是我去年就提交的 12801 號修正,只不過被改成了他的名字來發表,連 git log summary 也一模一樣,只是後面的補充說明被拿掉。

為什麼我能如此肯定? 請仔細看 12801 號修正,它其實只改了兩行。第一行才是真正的問題修正,第二行其實只是調整 debug 訊息的輸出,跟問題的修正無關。這部分也是 David Turner 在第一次的 review 意見中希望我拿掉的部分。但是金先生第一次提交的 14063 號修改卻和我們的 12801 號修正一模一樣,連 debug 訊息的修改也一樣。後來的修改才拿掉 debug 的部分。這難道只是巧合? 英雄所見略同? 我難以相信。

說實在的,這只是一個一行的小修正,似乎不值得大驚小怪。本來 Android-x86 就是開放源碼計劃,成果歡迎取用。然而,剽竊他人的成果來改成自己的名字,這是開放源碼界的大忌! 更何況這個小小的修正,也是我們開發者花費數天的時間,辛苦 debug 的成果。因此不能不據理力爭!

當然,我也要再度對 Google Android 團隊提出抱怨。你們 review 社群所提交修改的速度實在太慢了! 如果在去年我提交這個修改的時候,你們就已經 review 並 approve,怎麼會發生幾個月後,其他人又提交了相同的修改,而且還先被 approve 的事情? (14063 號修改是今年三月 25 號才被提交的)

我已經發英文信給 14063 號修正的所有 reviewers 和相關人員,包括金先生,仔細說明事情的前後始末,並要求一個合理的解釋。全文重貼於此:

Hi,
I wrote this email to you due to recent change in bionic
(commit id: 3cab22c8cf0dcf30718a1452ce9cbb637876cea3)
and you are the reviewer or related person.
The problem I'm going to argue is not about the patch itself,
but who did it.

Actually, the issue was first found by the Android-x86 project
(http://www.android-x86.org) when we tried to port eclair 2.0
to x86 platform. We fixed the issue and pushed to our git
server on Dec 2nd, 2009,
(http://git.android-x86.org/?p=platform/bionic.git;a=commitdiff;h=e4b007657165f74b23540af542d77f6a05118f26)
The original author is Yi Sun. Later, I think the issue is
a flaw of the bionic linker itself, so I decided to submit
the patch to AOSP. I cleaned up the patch and repo upload it
on Dec 8th, 2009. (http://review.source.android.com/12801)
However, the Android team didn't review it, until March 30th, 2010.
The reviewer, Davi Turner, asked me to remove unrelated debug change,
so I repo upload another patch immediately.
(http://review.source.android.com/14117,
sorry I failed to replace the old patch since I'm not so
familiar with repo upload)

Today David said he approved the patch, but it can't be merged
due to conflict. When I tried to rebase the patch,
I was surprised the patch is already in, but in a different
author name, Min-su Kim.

Mr. Kim, if you are an independent developer who found the same issue
and fixed it in the same way as us, that's totally fine.
However, after carefully read change 14063
(http://review.source.android.com/14063)
I really believe this is just the patch I uploaded on Dec 8th 2009,
except the log is simplified and the author is changed.
I feel unhappy since it seems our work was kidnapped.

Though this is just a small patch, I'm not so care about the credit.
But I really hope you can explain why it happened.

Regards,

在 Android-x86 上跑 Google maps

By cwhuang, 2010 年 03 月 25 日

Odroid 的朋友最近發了一則消息,說成功修改 Google maps 和 YouTube,在 Odroid 上跑起來。我下載了他們修改過的檔案,放到 Android-x86 1.6-r2 上測試,果然也跑得起來。真是太酷了!

以下就是 Google maps 在 Eee PC 901 上執行的情況:

Google maps on Android-x86
Taipei Streets (Google maps)

看 YouTube 影片也沒問題:

YouTube on Android-x86
YouTube Playback

安裝方法很簡單。 Read more »

Android-x86 1.6-r2 釋出

By cwhuang, 2010 年 03 月 20 日

最近在 donut-x86 branch 新增不少功能或修正,因此釋出了 1.6 release 2。主要的特色包括

細節以及下載地點,請參考 release note

加入 busybox source

By cwhuang, 2010 年 03 月 17 日

我已經將來自 CyanogenMod 計劃的 busybox source code 加到 Android-x86 上。經過一些小修改後,已經可以在 x86 上編譯成功。

如果有人不知道什麼是 busybox 的,它是一個 Linux 的工具集合。把一些常用的指令,集合在一個小小的執行檔中。只要用不同的名字去叫用它,就有不同的功能。例如 ls、ps、grep、find… 每個功能都叫做一個 applet。在大多數的 Linux embedded system 上都可以見到它的蹤影。不過不包括 Android — Android 內建一個類似的工具叫 toolbox,不過它提供的功能遠少於 busybox。

請注意目前 busybox 執行檔是放在 /system/xbin。它的優先順序低於系統執行檔放的位置 /system/bin。部分 busybox 和 toolbox 有重疊的功能,例如 ls、ps 等。因此直接打這些指令時仍是叫用 Android 的 toolbox。若要使用 busybox 中的功能,要用 busybox <applet> 的方式呼叫,例如 busybox ls。至於兩者有何不同? 請自行比較一下就知道了。

注意 Android-x86 發展的人也許會發現,Android-x86 不是已經有 busybox 了嗎? 和現在加的有何不同? 其實原本的 busybox 的版本是 1.15.0,以 prebuilt 的方式被加進來,而且是 link glibc。現在的 busybox 是 1.16.0,以 source 的形式加到 Android-x86 tree 當中,因此編譯後才會產生執行檔,而且是 link Android 的 bionic。簡單的講,原本的做法是比較暴力的非正統(偷懶)方式,因此當初決定僅有在 DEBUG=1 或 BUSYBOX=1 的情況下才 enable 它。而以 source 的形式加入才是正確的做法,不論在什麼 mode 之下都可使用。

將來或許會把 prebuilt 的 busybox 移除,直接用新的 busybox 替代。不過這牽扯到 Android-x86 loader 的設計和修改,有點麻煩。有時間再來想辦法。

Android-x86 加入 3G 上網功能

By cwhuang, 2010 年 03 月 15 日

我已經將實驗性的 3G USB 網卡支援功能加入到 Android-x86 的 donut-x86 branch 當中。請 repo sync 取得編譯。測試過的網卡是 Haiwei E160 和 E172。目前可以傳送簡訊,並透過 3G 無線上網。

如下圖,這是在 Eee PC 701 上測試 3G 網卡的情形。

Eee PC 701 接 3G USB modem

插上 3G 網卡後,系統應該就能自動偵測到。可以注意右上角的無線訊號 icon 已經能正確秀出訊號強度。這時開啟桌面的「簡訊」程式,就可以收送簡訊了。

用 3G 網卡傳簡訊

Read more »

OfficeFolders theme by Themocracy