Nokia 770 的上市在 Linux 業界引起了一片喝彩之聲。770 與之前的 Zaurus 不同,也和 Pocket PC 或 Palm 系統有很大區別,它並沒有提供個人信息管理(PIM)功能;實際上,它並不能直接提供一般 PDA 所需要具備的特性。相反,它更像是一個提供諸如 Web 浏覽器和 e-mail 客戶機之類的應用程序的 “Internet tablet”。
Nokia 最近為 770 軟件發布了一個更新包,它對於那些希望研究這個設備的用戶來說更加友好。在之前的版本中,用戶需要進入研發(R&D)模式才能獲得 root 的訪問權限。版本 1.05 使這個問題更容易得到解決。
Nokia 770 有兩個存儲設備可以使用,一個是內部的 flash 設備(被格式化為 JFFS2 文件系統),另外是一個插進來的卡(被格式化為 FAT 文件系統)。770 的連接方式非常有趣。在通過 USB 進行連接時,這個設備的默認行為是作為一個大容量存儲設備使用。770 的內部存儲不會通過這種方式來公開;相反,插進來的卡是作為一個通用 USB 存儲設備給上游計算機使用的,這樣可以簡單地傳輸文件。當 770 以這種方式通過 USB 進行連接時,這塊卡就會從 770 上卸載,這是為了防止出現數據崩潰的情況。這種方式能夠很好地提供對設備上文件的訪問。
在很大程度上,設備並不需要很多手工配置工作;它可以連接到藍牙電話或無線網絡上,這種連接可以自動實現也可以在用戶進行少量干預下實現。基於 Linux 的系統在自動網絡配置技術方面的發展十分顯著。
對 USB 鍵盤的支持Nokia 770 可以非常好地支持 USB 鍵盤,因為它基本上就是一個硬件 hack。問題在於物理設備;770 的 USB 硬件有一個下游設備所常用的那種插孔,它所連接的芯片只有在加上 5 伏電壓時才會激活 —— 如果該設備作為一個下游機器使用,出現這種情況還算正常。這裡還有一個軟件問題:這台機器必須要配置成 USB 主機模式,而不能是 USB 設備模式。這可能會造成 flasher 工具出現一點混亂。奇怪的是,盡管 Nokia 的頁面主要都是根據 Windows® 下載方式來構建的,flasher 工具卻只能用於 Mac OS X 和 Linux。
不過,作為一名軟件開發人員,我感覺 770 最迷人的地方是它開發了一個為 USB 線增加 5 伏電壓的電路。在後面 參考資料 一節中給出了有關這些內容的鏈接。
安裝概述
770 的安裝與類似設備一樣,都是圍繞 BusyBox 而構建起來的。啟動腳本都是相當標准的 Debian 腳本,帶有完整的 README 文件。有趣的部分是用戶界面和開發工具,與相當原始的 Zaurus 環境相比,它有相當明顯的改進。通過 maemo.org 頁面為開發人員提供的支持也相當全面(請參閱 參考資料 中的鏈接)。
與我之前見過的基於 Linux 的設備相比,770 的不同之處在於:對開發人員的支持更加有效,也更加深入。770 並沒有很好地解決其中的所有問題(還好 Web 浏覽是個例外)。然而,Nokia 似乎更想把社區開發的潛能作為這台機器的主要優點之一。開發工具也更偏重於一般的愛好者,而不僅僅是專業開發人員。用來加載新 ROM 鏡像和設置特殊設備標志(例如 R&D 模式)的工具也可以通過下載獲得了。
這種特性引發了大量有趣的開發項目。舉例來說,與大部分 tablet 或 PDA 設備一樣,770 在文本輸入方面具有很大的缺陷:即使您喜歡鍵盤或手寫識別,它也會占據屏幕上很大的地方,這對於一個只有 4 英寸屏幕的設備來說未免代價太高。現在,已經可以在 770 上使用藍牙或 USB 鍵盤;情況好多了(更多信息請參閱 側欄)。
獲得訪問權限
在 770 的早期版本中,用戶必須要使用 flasher 工具將這個設備切換成 R&D 模式,然後運行 gainroot 腳本。這個腳本如清單 1 所示,它本身就非常有趣。
清單 1. gainroot 腳本
#!/bin/sh -e trap exit SIGHUP SIGINT SIGTERM PATH=/bin:/usr/bin:/sbin:/usr/sbin MODE=`/usr/sbin/chroot /mnt/initfs cal-tool --get-rd-mode` if [ x$MODE = xenabled ] then echo "Root shell enabled" /bin/sh else echo "Enable RD mode if you want to break your device" fi
默認的 sudoers 文件允許任何人通過 sudo 命令來運行這個腳本;如果您的 770 現在就處於 R&D 模式,您就會獲得一個 shell;否則,您會看到一條幽默的警告信息。
在最新的版本中提供了一個更加簡單的選擇:可以以 root 用戶的身份使用 ssh 登錄到系統中。這需要下載一個第三方的 dropbear 包,然後以 root 用戶的身份使用 ssh 登錄系統,其密碼為 rootme。這個允許 root 登錄的默認密碼隨處可見,未免太過簡單直接;如果您安裝了 ssh 服務器,請務必修改自己的 root 密碼。您沒有修改?真的麼?那就請修改一下吧。一種常見的解決方案是設置用戶的密碼,配置 /etc/sudoers,然後運行 passwd -l root 徹底禁止 root 登錄。
我們之所以要離題介紹這些內容,是為了說明:盡管有些供應商可以提供 Linux 的一些最小子集,並嚴加保護;Nokia 現在提供給我們也還不過是個編譯器。就目前而言,這個設備對於大部分人來說還不是個大眾的消費品;目前它只是個 “玩具盒” 而已。有關如何找到一個適合在如此小的設備上使用的特性完整的 Linux,這裡有很多有趣的東西。
桌面系統問題
770 的安裝並不能決定它究竟是一個嵌入式系統還是一個功能完整的桌面 Linux。早期的版本提供了一個系統影像,其中所安裝的文件都不受包管理系統的控制;在我曾經見過的版本中,包管理器提供了 900 多個包,其中有些可選,有些不可選,如清單 2 所示。
清單 2. 一個很長列表的開頭
# dpkg -l Desired=Unknown/Install/Remove/Purge/Hold Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed / Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) / Name Version Description +++-==============-==============-============================================ ii adduser 3.51 Add and remove users and groups ii apt 0.6.42.3osso13 Advanced front-end for dpkg ii archtunjo 0.0.8-4 the D-BUS wrapper for games ii autoipd 0.9.6-1osso9 Autoipd from Howl ii base-files 3.1.osso2 Debian base system miscellaneous files ii base-passwd 3.5.7.osso1 Debian base system master passWord and group ii bluez-utils 2.25-cvs200605 Bluetooth tools and daemons
這為更加靈活的安裝提供了基礎,有時您可能會希望騰出一些空間來安裝其他文件 —— 倒不是因為系統可能很快就沒有空間了。在可移動設備上使用的一些大文件大都保存在可移走的卡上,而不是放在主存上。
一般來說,我們需要刪除一些不太有用的程序或腳本;舉例來說,glibc.sh 腳本負責警告 AMD64 系統上 glibc 的兼容性要求,在 770 上它顯然就是不必要的(它實際上多少涉及到了 ARM 系統;它們需要內核版本 2.4 或之後的版本。我所見過的版本中的 2.6.16 內核可能就可以)。另外,我所見過的每個系統都有一些這種東西;在實踐中,想方設法將這些沒用的東西刪除掉可能很麻煩,不太值得。
開發
770 的軟件開發環境比較新,不過 770 的最終用戶卻看不到,因為這些開發工具並不會真正加載到 770 設備上,而是在一個工作站或 PC 上運行。大約 3 年前,我為 Sharp Zaurus 編寫了一些交叉編譯方面的東西(請參閱 參考資料 中的鏈接)。這個過程非常棘手。770 使用了一個新的交叉編譯環境,名為 Scratchbox,由 Nokia 主導開發。這個工具中有很多改進,它提供了一個環境,目標系統上的二進制文件在交叉開發過程中就能在這個環境上運行(以仿真模式)。其最終結果是所有用於解決那些編寫得很差的可移植性測試的麻煩和混亂都消失了;您獲得的是主機系統的性能(包括編譯器工具鏈的本地執行)和目標系統的行為能力。
盡管這些工具仍然處於早期的開發階段中,但它們已經比較穩定,功能也比較強大,且在積極地維護之中。為各種其他系統開發工具的道路可能還很長。另外,一個很好的交叉編譯環境,並已消除了較傳統用法的一些弊端,可以幫助減少由於機器沒有太多內存和 CPU 來進行大型的軟件編譯所帶來的不便。
必須要進行的比較
從 770 可以看出它吸取了 Zaurus 中的很多經驗和教訓。在前面我曾經提到過缺少物理鍵盤,但是這卻吸引了很多外部的開發努力。更加微妙的一個改進是可用內存的數量;盡管與以前的設備相比, 770 的內存更多,但是它也很容易就能將內存消耗殆盡。即使只多一點內存,也會大有幫助。另一方面,全屏視頻回放也不能不提,能夠提供此功能的設備會給人印象深刻。
770 並不像有些 PDA 設備那樣有一些擴展選項(使用 CompactFlash 和 Secure Digital 卡插槽)。它唯一的擴展槽使用了一種簡化型的 SD 卡,無疑它非常適合這種非常擁擠的設備。另一方面,很少有 PDA 設備可以配置成作為 USB 主機設備來工作;如果您願意花一些時間和精力,770 甚至可以使用 USB 硬盤。
由於 770 是一個手持設備,因此人們不免會拿它與各種掌上型設備進行比較。770 並不是一個 PDA。它是一個 Internet 小部件。770 中所提供的 Opera Web 浏覽器是一般的手持設備所不具有的。770 並沒有用戶對於 PDA 所期望的那種 PIM 應用程序,不過,很多以 PDA 為目標而設計的設備也都紛紛用於其他應用程序了,例如 Web 和 e-mail 的訪問。在很多情況下,對比這類設備而言,770 的表現非常優秀,不過如果能夠更好地支持鍵盤 —— 舉例來說,支持傳統 IR 鍵盤 —— 就再好不過了。
Nokia 在增強 770 對愛好者和玩家的友好性方面進行了很多努力,不過默認的安裝並沒有包含任何 shell;這與 Zaurus 有很大的不同。呈現在用戶面前的更像是一個簡化的 Internet kiosk 終端,而不像是一個桌面工作站。與 TiVo 類似,要有效地利用 770 的基本特性並不需要我們必須了解或關心自己是在運行 Linux 系統。但是與 TiVo不同的是,770 歡迎用戶利用 Linux 來添加自己的特性。
770 的發展目標
在為撰寫這篇文章而進行調研時,我閱讀了大量有關 770 的評論,我的感覺是很多人都不清楚 770 到底是什麼。人人都宣稱希望有一個基於 tablet 的 Web 浏覽器,但是很多人並不清楚自己究竟要用它來干什麼。
770 提供了無線和藍牙訪問能力,這使得它作為一個在 Web 上查找內容的設備來說非常引人矚目。它還很有潛力可用來開發定制應用程序;舉例來說,它可以成為一個優秀的無線網絡嗅探器。
盡管 770 的目標還不甚明確,但是 Nokia 對此已經進行了大量的研究工作;他們開發了一整套新的交叉編譯架構,這在 770 上得到了廣泛的應用。對開發人員友好的環境好像是把許多黑客也帶了進來,不過開發人員所提供的反饋和補丁必然有助於這個開發環境的不斷改進。即使它不會直接取得很大的成功,770 對於嵌入式 Linux 開發領域的貢獻也相當大,最終會使今後基於 Linux 的設備更好,價格也會更便宜。
原文鏈接:http://www-128.ibm.com/developerworks/cn/linux/l-lob770.Html