2005年11月4日星期五

我的E680i……

這部電話到手都有一段不短的時間了,一直遲遲不動手做點事情,原因除了時間與熱誠外,還有一個很重要的因素,事關當初興奮地帶著新玩具回家後,第一 件事就是查看打開USBNet驅動的方法,使得可以經telnet進行shell環境操作,可是當我成功時,竟多手打下這個指令:

shutdown -h now

所有程序一如意料般殺光,但系統卻沒有重新啟動!大鑊了!無奈地只好拔掉電池重新啟動,所有的資料亦因此而消失,也罷,只是當啟動收件箱時出現了“等待DB”的訊息並無法順利執行,其他軟件亦發生資料無法寫入等各種奇怪的問題,相信即使等到海枯石爛,資料也不會出現,因為那負責管理資料的「惡魔」已經掛掉……

(註:許多人表示過這指令並沒有帶來任何問題)

# db_daemon[301]:Launch…
enable DB_TXN_WRITE_NOSYNC.
db_daemon: DB_ENV->log_flush: LSN of 5/15584 past current end-of-log of 1/19510
db_daemon: Database environment corrupt; the wrong log files may have been removed or incompatible database files imported from another environment.
db_daemon: /ezxlocal/sysDatabase/native.db: unable to flush page: 0
db_daemon: txn_checkpoint: failed to flush the buffer cache Invalid argument
db_daemon: PANIC: Invalid argument
db_daemon[301]:db_daemon: errorcode: -30978, flag: 9

看來設計者沒有考慮到怎樣復完已破損的資料庫,甚至連「重新建立」的念頭也未有過,拿 strace找找會不會有什麼新發現,結果跟上面的訊息一樣,都是掛了在那/ezxlocal/sysDatabase/native.db上。把它抄到 電腦看,發覺那竟是Berkeley Database檔!還記得那可是在科大讀COMP 336( Information Retrieval and Search Engines)時不斷詛咒怨恨的產物之一,想不到再一次面對又是這種境況。

不是未嘗試過補救,但看來除這個資料庫外,還有些格式不明的過渡檔,任何一項死了都會找惡魔一起陪葬,最終也只能把所有檔案刪掉,期望系統會懂得重新建立吧……

經過幾次重啟動後終於得回一部「新」手機,不過也伴隨著惡夢的開始,系統變得十分不穩定,簡中會出現當機而唯有拔電重啟的情況,資料會有20%左右的機會無損,更多是資料損壞,甚至出現「等待DB」的無奈滄景……

(看了好幾個討論區,好像只有我一個人有這個問題……)

這樣子令我十分灰心,之後也沒有什麼心機搞什麼hacking,直至上星期再次陣亡後,一氣之下什麼都不顧,找來了網上流傳的韌體,一於自己動手重灌!

參考文件:

韌體:

200多MB的檔案,令我開始下載時困惑不已,這遠超手機容量極限的東西到底了什麼?在MFC討論區找了好一段時間,才得知原來Motorola所用的二進位影像檔是用一個叫shx的格式,簡單來說是一個極之有效地將小檔案變成大檔案的方案,皆因它採用了ASCII碼來存放二進位碼並加入許多「有用」的資訊。

算吧,還是救機要緊,接下來的過程十分順利,大概用了近20分鐘的時間,就把我原來的C3.A8P版韌體昇級至C5.A4P。一般在香港買到的 e680i普偏都還在用舊的C3.A80版(在撥號盤按WWW008W查找,麻煩請告知若你原廠附了其他版本),而那C5.A4P雖並非最新的版本,之後 還有如A8P及A9P等,但據說沒什麼修改,只是加入了中國移動的商標,所以十分安心使用。

昇級後,如顯示繁體及手寫輸入等對香港人十分重要的功能都保留了下來,而隨機附送的軟件卻有些不同,例如說金山詞霸被X-Lex行動字典取代了,在Shell環境更多了些指令如find,dd等。雖然在試用後感覺系統反應敏捷了許多,不過廣東話語音輸入卻不見了!

會不會只是因為有些選項不同了?為了求証,想把native.db抄出來看看,這時卻發生了非常意想不到的事情,`cp`指令竟然當掉!連`kill -9`也不鳥!用了Linux這麼多年,倒是第一見到這個問題……重新開始,再看一次native.db的內容……

# cd /ezxlocal/sysDatabase
# ls -l
total 82354
-rw——- 1 ezx ezx 73248 Oct 26 09:32 log.0000000004
-rw-rw-rw- 1 ezx ezx 84087296 Oct 26 12:00 native.db
-rw-rw-rw- 1 ezx ezx 2048 Apr 25 2005 native_id.db

嘩,一個檔案就佔了80MB!?,很明顯是partition炒了……大概理解到這部e680i為何那麼與眾不同了,但拿去原廠維修會有用嗎?這種半死不活的問題大概是不會願意換一部給我吧。

概然知道了是什麼原因,之後對症下藥容易得多,不用重新刷新了,我用PST把那個韌體分解,其中一個叫cg34的檔案抱括了/ezxlocal裏的內容,接著先umount /ezxlocal,用一個叫`dd`的指令把cg34的內容抄回去,一切便回復正常了。

現在我寫了一個小script,把/ezxlocal裏的東西做個備份,等下次死機時拿出來……

沒有留言:

Creative Commons License
本網誌Ben Lau製作,以共享創意署名-非商業性-相同方式共享 3.0 香港 授權條款釋出。