Update 2011/01/12:
因為與 Brandon 協同處理他的Desire App2SD+, 發現我下頭寫的實在太精簡, 所以試著把過程Step by step起來, 應該可以幫助大家更快做好.
- 到「設定」=>「關於手機」=>「軟體資訊」中確認軟體號碼是2.10.751.4, 以及確認你的Micro-SD速度夠快, 根據爬各大論壇及自己實測的經驗, 最好是Class 6, 據說Class 10反而會更慢. 如果是Class 2我建議還是算了
- 下載android-sdk, 解開後放在C:\下
- 安裝HTC Sync, 會同時裝上HTC Sync跟 HTC Drivers, 裝完後移除HTC Sync, 就會保留住HTC Driver
- 關機, 按著「後退鍵」跟「電源鍵」開機, 會進入一個白色畫面, 那個叫做 fastboot mode. 用大小聲按鈕移動游標, 用電源鍵選擇到「Bootloader」,然後再選則「Recovery」, 這時手機會重開進Recovery Mode, 在Recovery裡頭用光學軌跡球選擇Backup & Restore, 做一次完整備份. 這一套備份是後頭其她步驟失敗時的重要還原手段, 請務必要做
- 請到 Unrevoked 依照指示Root掉你的Desire
- Root完成後, 正常重開機進系統, 到Market下載免費版本的Titanium Backup, 下載執行後會出現系統缺乏busybox的說明, 請依照指示讓Titanium Backup為你下載後重新開啟Titanium Backup, 做一次批次備份. 這個備份是用來在你需要用原廠RUU Restore時使用的. 這時也可以使用CallLogs Backup & Resore 及 SMS Backup & Restore 做通話紀錄及簡訊的備份.
- 備份完成後請掛上SD卡磁碟, 將SD卡內所有東西備份一份到電腦中, 後頭必須把SD卡重新分割, 這個動作會消除所有SD卡上的資料
- 請到 AlphaRev去抓iso檔, 然後在Virtual Box/VMWare之類的虛擬機器中掛起來或是用自己PC開機到裡頭的LiveCD, 照順序做就可以把HBOOT給S-Off, 也會把recovery mode刷成clockworkmod. (這個過程請格外小心, 這是唯一會讓Desire變成磚的步驟, 請確保過程中USB線不會鬆脫, 手機不會沒電, 電腦不會跳掉)
- S-Off 完成後, 開機會看到The Dark Knight的小丑醜臉跟Why so serious的畫面, 那表示S-Off成功了, 不喜歡這個畫面沒關係, 等全都完成後會附上修改回原始開機畫面的方法
- 下載底下這四樣東西, 放到 c:\android-sdk-windows\tools 中
busybox
init.d.tar.gz
boot-new.img
desire_stock_splash1.img - 接上USB線, 再次關機, 按照上頭的方法開回Recovery Mode, 這時候你的Recovery Mode應該是不同顏色了, 現在會是clockworkmod版, 用光學軌跡球移動到Mount & Storage並點進去, 選擇 mount /system, mount /data 這兩樣
- 在你的Windows開啟一個「命令提示字元」, 如果是Win7或Vista, 請記得使用「以系統管理員身份執行」較為保險. 然後執行
cd C:\android-sdk-windows\tools
adb shell
這時應該會看到一個 「~ #」的提示符號, 這表示已經進入了android的recovery系統中, 這時先輸入「exit」離開, 回到命令提示字元 - 在命令提示字元視窗中輸入以下指令
接著以adb shell 回到 「~ #」下, 輸入以下指令
adb push busybox /system/xbin/busybox
這的動作是安裝最新版本的 busybox
~ # chmod 755 /system/xbin/busybox
~ # chown root.shell /system/xbin/busybox
- 在「~ #」下輸入以下指令
進入 fdisk 畫面中切割micro-sd卡, 這時你要開始考慮怎麼分割. 第一個分割區會是FAT32, 也就是你接上USB線選擇磁碟機模式時會使用的那個區塊, 而第二個分割區則是ext3, 準備用來放你的app. 第一個分割區多大都行, 第二個分割區正常不建議超過2G, 假設你的micro-sd是8G, 可以切成6.5G跟1.5G.
~ # /system/xbin/busybox fdisk /dev/block/mmcblk0
切割方法是在 fdisk prompt 下先用 n 建立第一個, 再用 t 更改分割區id, 其中第一個分割區的 id 是 c, 也就是 Win95 FAT32(LBA); 第二個分割區 id 是 83 的 Linux. 切割完成後請記得用 w 儲存並離開 - 在「~ #」下輸入以下指令格式化micro-sd卡, 並將ext2轉換成ext3
~ # /system/xbin/busybox mkfs.vfat /dev/block/mmcblk0p1
~ # /system/xbin/busybox mkfs.ext2 /dev/block/mmcblk0p2
~ # /sbin/tune2fs -j /dev/block/mmcblk0p2
- 在手機上的recovery mode中選擇 mount /sd-ext, 並選擇最底下的 mount USB storage, 這時電腦上會出現抽取式磁碟, 請把你剛剛備份的SD卡內容「複製」(請不要剪下啊)回去, 再把上頭下載的四個檔案「複製」(請不要剪下啊)到那個抽取式磁碟根目錄底下, 複製完成後在Windows中使用退出後, 在Recovery Mode下選擇Unmount回到上一層, 選擇 mount /sdcard 把剛剛還原過的FAT32 mount 起來
- 到剛剛的「命令提示字元」下的adb shell內, 執行以下指令
上頭指令是把 init.d 的 script 放進去並設定好權限及owner
~ # cd /system/etc
~ # /system/xbin/busybox tar -xzpvf /sdcard/init.d.tar.gz
~ # /system/xbin/busybox chmod 755 /system/etc/init.d
~ # /system/xbin/busybox chown root.root /system/etc/init.d
~ # /system/xbin/busybox chmod 755 /system/etc/init.d/*
~ # /system/xbin/busybox chown root.shell /system/etc/init.d/*
接著執行以下指令
上頭指令是把 boot 區給洗掉, 換成支援 init.d 的 boot 區
~ # cat /dev/zero > /dev/mtd/mtd2
~ # /sbin/flash_image boot /sdcard/boot-new.img
- 在adb shell內, 執行以下指令
以上動作是把 app 目錄整個搬移到 ext3 上, 並且在原本的 /data 上做一個symbolic link連結到新位置
~ # cd /data
~ # mv app /sd-ext
~ # /system/xbin/busybox ln -s /sd-ext/app
- 以上都完成後, 在手機上選擇 unmount /system, unmount /data, unmount /sdcard, unmount /sd-ext 後, 用「後退鍵」回上一層並重開機, 一切順利開機的話, App2SD+就完成了, 如果沒有順利開機, 可以拔電池關機後, 用上頭方法回到Recovery Mode去, 選擇Advance Restore, 將boot.img給restore回去, 就回到剛S-Off完的狀態了
- 如果重新開機後桌面的widget出現「無法載入桌面小工具」的字樣, 請移除掉之後重新設定就正常了
- 如果不喜歡那個小丑, 請關機後按著「後退鍵」及「電源鍵」開進白底的fastboot模式, 這時不要進入bootloader或recovery mode, 在這個畫面下到剛剛的「命令提示字元」中下以下指令
接著重開機, 這樣就把討厭的小丑給消掉了.
fastboot flash splash1 desire_stock_splash1.img
如果成功了請留個言讓大家知道你成功了, 給別人一點信心, 如果失敗了也請盡量發問, 我會就狀況盡量回答. 謝謝.
Update 2011/01/08:
從HTC Hero換到HTC Desire, 幾乎是速度三級跳, 用得很順暢的我終於也碰到內建記憶體不足的毛病了.
本想從精簡一些App開始, 但是麻煩的是聯絡人, Mail, Gmail, 簡訊等等一向不砍的我空間會越來越吃緊, 但是又不想刷掉現成原廠的 2.10.751.4, 畢竟整合的還不錯, 而且xda-developer也沒有這個版本的整合ROM, 所以決定自己做.
事前要準備的有
a. android-sdk, 主要是要需要adb.
b. HTC Sync, 主要是需要裡頭的Driver, 裝完移除HTC Sync本體, 就會留下Driver
c. Ubuntu, 可以裝在Virtual Box或VMWare裡頭, 主要是為了拆解boot.img.
d. 一張夠快的micro-sd卡, 建議要class 6以上.
e. 空白光碟片一張, 或是Virtual Box/VMWare, 做S-Off時會需要
做之前有幾件事要注意
- 由於有SLCD/AMOLED版, 據說SLCD版Root後不能Unroot, 請三思(不過我摸索的過程中發現其實是可以刷回去的, 只要有保留好原始的recovery.img, 替換掉S-Off那關用的img就可以把HBOOT/Recovery mode都刷回原廠)
- 如果要用我做好的boot.img, 請特別注意這個是專給 2.10.751.4 這個版本用的, 請不要抓錯
- 保持耐性, 有些過程會花一些時間, 不要亂拔除電池或是USB連接線, 尤其是在S-Off時, 那會把手機變成磚塊的
以下就是流程.
- 做一次nandriod備份
- Root原廠的ROM
- 安裝Titanium Backup且做一次完整的Full Backup
- 把HBOOT給S-Off
- 製作 init.d enable 的 boot.img
- 用sdparted割好microsd
- 把/data/app 轉移到 /sd-ext
- Reboot
備份永遠不會是錯的.
到 Unrevoked 去Root掉, 這個對後頭很重要. 在取root的過程中會在/sbin/底下裝上flash_image, 這在後頭改boot.img用的到
這是為了預防要是失敗必須還原原廠RUU時, 很可能會沒辦法從nandriod還原回去, 這時候Titanium Backup就很好用.
到 AlphaRev去抓iso檔, 然後看是在Virtual Box中掛起來開機到裡頭的LiveCD, 照順序做就可以把HBOOT給S-Off, 也會把recovery mode刷成clockworkmod.
參考這裡的方法, 把剛剛nandroid備份好的boot.img拿出來, 拆解出kernel跟ramdisk. 替換掉 init.rc 後包回去完整的boot.img. 最後在recovery mode底下用adb shell進去把boot給flash掉, 後面的手續可以參考這篇文章. 底下是我寫好的init.d可以下載.
如果懶的自己弄boot.img, 我底下連結的boot.img是我做好的版本, 但是請注意要配合自己的版本, 必須是 2.10.751.4.
參考這篇切好一個FAT32跟一個ext2, 其中FAT32就是當作原本的SD Storage, ext2就是放App的地方.
開進recovery mode, 用adb shell進去整個目錄搬到 /sd-ext 去, 記得用 ln 在原地做link.
順利的話就會有一份App2SD+的原廠ROM了.
製作過程中, 我嘗試過ext2/ext3, 畢竟stock rom只有支援到ext3而已. 實際用起來沒什麼速度上的差別, 但是由於如果沒有clean unmount, ext2很有可能掛不起來, 所以我還是選擇 ext3.
原本有試著想乾脆整個 /data 都轉移到/sd-ext 去, 但是stock rom的kernel並不支援 loopfs, 所以肯定是會失敗的.
有碰到問題的話盡管發問吧, 我知道的盡力回答.
@Gary:
我猜是你的boot.img 跟我的不相容, 我建議自己手做一份, 在我文章裡頭連結都有詳細說明.
不然我推薦 Insert Coin 版的ROM, 我現在已經都換到Insert Coin CM7去了 XD
第二個分割區正常不建議超過2G <– why??
請問這如何解決??
通常要確認的點是.
1. SD卡割好 fat32, ext2
2. flash好改過的boot.img. 要注意boot,img 最好是自己手做一份, 已經有很多案例顯示我提供的boot.img跟某些版本的Desire不相容, 我猜是批號的問題, 所以最好自己照連結說明做一份
3. 放好 init.d 裡頭的所有script, 包含chmod/chown
4. 停在htc logo時, 能不能用adb shell 連進手機, 如果可以, 下 dmesg 看訊息到底是卡在哪邊
大概做完這些檢核就差不多, 如果還是不行, 用 clockworkmod recovery 做完整restore回復回去可以救回.
如果還是搞不定, 我推薦InsertCoin CM7 的 Custom Rom, xda有放. 大致上就是刷HBOOT, wipe, 刷CM7 ROM即可, 流程也很簡單. 我現在已經全面轉到InsertCoin CM7 了.
說來話長.
由於Stock的ROM只支援到ext3, 所以正常不是掛ext2就是ext3. ext3裡頭沒有2G問題, 而ext2有.
在這個分割區出狀況時, 在recovery內修復, 會把該分割區當成ext2, 而busybox內附的e2fsck掃2G以上的分割區會出錯
所以割超過2G時, 「有可能」會在記憶卡不穩定時無法修復回去, 大致是這樣.
2G裝App實在太夠用, 所以我也不建議割超過2G
明白了~thanks~
請問你知道我該怎麼還原s-on跟hboot嘛?
目前手機有一些問題想要送修
但是我完全沒有方向該怎麼還原
Google一下Desire Stock Room 應該有很多
簡單說就是直接用Stock Room刷回去就好.