HTC Desire Stock ROM(原廠ROM) w/ App2SD+

Update 2011/01/12:
因為與 Brandon 協同處理他的Desire App2SD+, 發現我下頭寫的實在太精簡, 所以試著把過程Step by step起來, 應該可以幫助大家更快做好.

  1. 到「設定」=>「關於手機」=>「軟體資訊」中確認軟體號碼是2.10.751.4, 以及確認你的Micro-SD速度夠快, 根據爬各大論壇及自己實測的經驗, 最好是Class 6, 據說Class 10反而會更慢. 如果是Class 2我建議還是算了
  2. 下載android-sdk, 解開後放在C:\下
  3. 安裝HTC Sync, 會同時裝上HTC Sync跟 HTC Drivers, 裝完後移除HTC Sync, 就會保留住HTC Driver
  4. 關機, 按著「後退鍵」跟「電源鍵」開機, 會進入一個白色畫面, 那個叫做 fastboot mode. 用大小聲按鈕移動游標, 用電源鍵選擇到「Bootloader」,然後再選則「Recovery」, 這時手機會重開進Recovery Mode, 在Recovery裡頭用光學軌跡球選擇Backup & Restore, 做一次完整備份. 這一套備份是後頭其她步驟失敗時的重要還原手段, 請務必要做
  5. 請到 Unrevoked 依照指示Root掉你的Desire
  6. Root完成後, 正常重開機進系統, 到Market下載免費版本的Titanium Backup, 下載執行後會出現系統缺乏busybox的說明, 請依照指示讓Titanium Backup為你下載後重新開啟Titanium Backup, 做一次批次備份. 這個備份是用來在你需要用原廠RUU Restore時使用的. 這時也可以使用CallLogs Backup & Resore 及 SMS Backup & Restore 做通話紀錄及簡訊的備份.
  7. 備份完成後請掛上SD卡磁碟, 將SD卡內所有東西備份一份到電腦中, 後頭必須把SD卡重新分割, 這個動作會消除所有SD卡上的資料
  8. 請到 AlphaRev去抓iso檔, 然後在Virtual Box/VMWare之類的虛擬機器中掛起來或是用自己PC開機到裡頭的LiveCD, 照順序做就可以把HBOOT給S-Off, 也會把recovery mode刷成clockworkmod. (這個過程請格外小心, 這是唯一會讓Desire變成磚的步驟, 請確保過程中USB線不會鬆脫, 手機不會沒電, 電腦不會跳掉)
  9. S-Off 完成後, 開機會看到The Dark Knight的小丑醜臉跟Why so serious的畫面, 那表示S-Off成功了, 不喜歡這個畫面沒關係, 等全都完成後會附上修改回原始開機畫面的方法
  10. 下載底下這四樣東西, 放到 c:\android-sdk-windows\tools 中
    busybox
    init.d.tar.gz
    boot-new.img
    desire_stock_splash1.img
  11. 接上USB線, 再次關機, 按照上頭的方法開回Recovery Mode, 這時候你的Recovery Mode應該是不同顏色了, 現在會是clockworkmod版, 用光學軌跡球移動到Mount & Storage並點進去, 選擇 mount /system, mount /data 這兩樣
  12. 在你的Windows開啟一個「命令提示字元」, 如果是Win7或Vista, 請記得使用「以系統管理員身份執行」較為保險. 然後執行

    cd C:\android-sdk-windows\tools
    adb shell

    這時應該會看到一個 「~ #」的提示符號, 這表示已經進入了android的recovery系統中, 這時先輸入「exit」離開, 回到命令提示字元
  13. 在命令提示字元視窗中輸入以下指令

    adb push busybox /system/xbin/busybox
    接著以adb shell 回到 「~ #」下, 輸入以下指令

    ~ # chmod 755 /system/xbin/busybox
    ~ # chown root.shell /system/xbin/busybox
    這的動作是安裝最新版本的 busybox
  14. 在「~ #」下輸入以下指令

    ~ # /system/xbin/busybox fdisk /dev/block/mmcblk0
    進入 fdisk 畫面中切割micro-sd卡, 這時你要開始考慮怎麼分割. 第一個分割區會是FAT32, 也就是你接上USB線選擇磁碟機模式時會使用的那個區塊, 而第二個分割區則是ext3, 準備用來放你的app. 第一個分割區多大都行, 第二個分割區正常不建議超過2G, 假設你的micro-sd是8G, 可以切成6.5G跟1.5G.
    切割方法是在 fdisk prompt 下先用 n 建立第一個, 再用 t 更改分割區id, 其中第一個分割區的 id 是 c, 也就是 Win95 FAT32(LBA); 第二個分割區 id 是 83 的 Linux. 切割完成後請記得用 w 儲存並離開
  15. 在「~ #」下輸入以下指令格式化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
  16. 在手機上的recovery mode中選擇 mount /sd-ext, 並選擇最底下的 mount USB storage, 這時電腦上會出現抽取式磁碟, 請把你剛剛備份的SD卡內容「複製」(請不要剪下啊)回去, 再把上頭下載的四個檔案「複製」(請不要剪下啊)到那個抽取式磁碟根目錄底下, 複製完成後在Windows中使用退出後, 在Recovery Mode下選擇Unmount回到上一層, 選擇 mount /sdcard 把剛剛還原過的FAT32 mount 起來
  17. 到剛剛的「命令提示字元」下的adb shell內, 執行以下指令

    ~ # 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/*
    上頭指令是把 init.d 的 script 放進去並設定好權限及owner
    接著執行以下指令

    ~ # cat /dev/zero > /dev/mtd/mtd2
    ~ # /sbin/flash_image boot /sdcard/boot-new.img
    上頭指令是把 boot 區給洗掉, 換成支援 init.d 的 boot 區
  18. 在adb shell內, 執行以下指令

    ~ # cd /data
    ~ # mv app /sd-ext
    ~ # /system/xbin/busybox ln -s /sd-ext/app
    以上動作是把 app 目錄整個搬移到 ext3 上, 並且在原本的 /data 上做一個symbolic link連結到新位置
  19. 以上都完成後, 在手機上選擇 unmount /system, unmount /data, unmount /sdcard, unmount /sd-ext 後, 用「後退鍵」回上一層並重開機, 一切順利開機的話, App2SD+就完成了, 如果沒有順利開機, 可以拔電池關機後, 用上頭方法回到Recovery Mode去, 選擇Advance Restore, 將boot.img給restore回去, 就回到剛S-Off完的狀態了
  20. 如果重新開機後桌面的widget出現「無法載入桌面小工具」的字樣, 請移除掉之後重新設定就正常了
  21. 如果不喜歡那個小丑, 請關機後按著「後退鍵」及「電源鍵」開進白底的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
  • Unrevoked 去Root掉, 這個對後頭很重要. 在取root的過程中會在/sbin/底下裝上flash_image, 這在後頭改boot.img用的到

  • 安裝Titanium Backup且做一次完整的Full Backup
  • 這是為了預防要是失敗必須還原原廠RUU時, 很可能會沒辦法從nandriod還原回去, 這時候Titanium Backup就很好用.

  • 把HBOOT給S-Off
  • AlphaRev去抓iso檔, 然後看是在Virtual Box中掛起來開機到裡頭的LiveCD, 照順序做就可以把HBOOT給S-Off, 也會把recovery mode刷成clockworkmod.

  • 製作 init.d enable 的 boot.img
  • 參考這裡的方法, 把剛剛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.

  • 用sdparted割好microsd
  • 參考這篇切好一個FAT32跟一個ext2, 其中FAT32就是當作原本的SD Storage, ext2就是放App的地方.

  • 把/data/app 轉移到 /sd-ext
  • 開進recovery mode, 用adb shell進去整個目錄搬到 /sd-ext 去, 記得用 ln 在原地做link.

  • Reboot
  • 順利的話就會有一份App2SD+的原廠ROM了.

製作過程中, 我嘗試過ext2/ext3, 畢竟stock rom只有支援到ext3而已. 實際用起來沒什麼速度上的差別, 但是由於如果沒有clean unmount, ext2很有可能掛不起來, 所以我還是選擇 ext3.

原本有試著想乾脆整個 /data 都轉移到/sd-ext 去, 但是stock rom的kernel並不支援 loopfs, 所以肯定是會失敗的.

有碰到問題的話盡管發問吧, 我知道的盡力回答.

init.d.tar.gz
boot-new.img

Comments
  • nekobe 26 7 月, 2011 at 00:03

    @Gary:

    我猜是你的boot.img 跟我的不相容, 我建議自己手做一份, 在我文章裡頭連結都有詳細說明.
    不然我推薦 Insert Coin 版的ROM, 我現在已經都換到Insert Coin CM7去了 XD

  • isabella 18 8 月, 2011 at 15:42

    第二個分割區正常不建議超過2G <– why??

  • isabella 19 8 月, 2011 at 17:17

    Brandon Hung
    可能差在這個地方,我照上面9項作完後執行”reboot”,它就在有htc logo的那個開機頁面一直重覆著開機,
    而且這次用advance restore boot 也不行,我正在試整個restore中。

    請問這如何解決??

  • nekobe 20 8 月, 2011 at 04:16

    通常要確認的點是.
    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 了.

  • nekobe 20 8 月, 2011 at 04:20

    說來話長.

    由於Stock的ROM只支援到ext3, 所以正常不是掛ext2就是ext3. ext3裡頭沒有2G問題, 而ext2有.
    在這個分割區出狀況時, 在recovery內修復, 會把該分割區當成ext2, 而busybox內附的e2fsck掃2G以上的分割區會出錯
    所以割超過2G時, 「有可能」會在記憶卡不穩定時無法修復回去, 大致是這樣.
    2G裝App實在太夠用, 所以我也不建議割超過2G

  • isabella 7 9 月, 2011 at 12:26

    明白了~thanks~

  • neo 2 1 月, 2012 at 00:27

    請問你知道我該怎麼還原s-on跟hboot嘛?
    目前手機有一些問題想要送修
    但是我完全沒有方向該怎麼還原

  • nekobe 6 1 月, 2012 at 16:41

    Google一下Desire Stock Room 應該有很多
    簡單說就是直接用Stock Room刷回去就好.

  • Post a comment

    Threaded commenting powered by interconnect/it code.

1 2