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
  • Brandon.H 11 1 月, 2011 at 15:56

    Dear Nekob,
    我照著你的步驟一直到S-off 都ok, 而且我的desire版本跟你一樣都是 2.10.751.4.
    所以就直接下載了您包好的boot-new.img,但是接下來的步驟我就看不懂了,
    要如何flash掉你包好的boot-new.img?
    可以請您說明的更詳細些嗎,萬分感謝啊~
    Best regards,
    Brandon

  • nekobe 11 1 月, 2011 at 16:10

    @Brandon:
    1. 把boot-new.img放進sd卡中
    2. 關機後按住 “back” 跟 “power” 開進fastboot, 然後到recovery mode
    3. adb shell 連進去
    4. 下以下的指令 (有做過unrevoked root的應該在 /sbin/ 下有 flash_image 可以用)
    # cat /dev/zero > /dev/mtd/mtd2
    # /sbin/flash_image boot /sdcard/boot-new.img
    5. 確認 /system/etc/init.d/ 裡頭東西都放好, 權限跟owner都改好, 沒放好的話用adb push丟進去
    # mount /system
    # cd /system/etc/init.d/
    # chmod 755 *
    # chown root.shell *
    6. 確認 /sd-ext 有mount起來, 把/data/app 整個搬過去 + symbol link (要記得先用sdparted割好SD卡, 還有, 備份!!!!)
    # mount /sd-ext (或者在recovery mode中mount)
    # mount /data
    # cd /data
    # mv app /sd-ext
    # ln -s /sd-ext
    7. reboot, 理論上就會有了

    如果做到最後開機停留在HTC那個畫面, 你可以用adb shell 進去查問題所在
    或者乾脆再開到recovery mode把之前nandroid的backup再restore回去, 也可以回復原來狀態
    基本上S-Off那關過了, 就不會變磚了
    因為我自己的機器已經做完, 手邊沒sample做step by step, 等有人想破拿給我做時我在來寫更詳細的step by step 🙂

  • Brandon Hung 11 1 月, 2011 at 20:46

    Dear Nekobe,
    感謝你的協助~
    我剛在adb shell裡執行”/sbin/flash_image boot /sdcard/boot-new.img”
    出現了” failed with error: -1
    error opening /sdcard/boot-new.image~# ”
    我確定你包好的boot-new.image我已放在sdcard的根目錄裡,但
    我用Root Explorer就是找不到我的手機系統跟sdcard裡有”flash_image”,有可能是什麼問題呢?
    再次感謝你的耐心指教。
    Brandon

  • Brandon Hung 11 1 月, 2011 at 20:52

    從這個錯誤訊息退出後,我要在nandroid 裡restore boot 才能再度開機….
    一開始還以為手機被我搞掛了(有嚇到) ^^

  • nekobe 11 1 月, 2011 at 21:48

    @Barndon:

    別擔心, 只要你過了S-Off這關, 你的手機永遠不會變磚.

    1. 首先請先開進recovery mode, 然後在 mount and storage 那區把 /system /data /sdcard /sd-ext 全都mount 起來 (用光學軌跡球去點)

    2. 用adb shell 進去, 這時候應該在 /sbin/ 下有 flash_image, 可以用以下指令確認
    ~ # ls -la /sbin/flash_image
    ls -la /sbin/flash_image
    lrwxrwxrwx 1 root root 8 Jan 1 1970 /sbin/flash_image -> recovery

    3. 確認你的 boot-new.img 有出現在 /sdcard 底下
    ~ # ls -la /sdcard/boot-new.img

    4. 確認該放進 /system/etc/init.d/ 裡頭的東西都放了, 也設定了 owner & prem
    (如上頭那個comment講的)

    5. 一切確認完成後, 執行以下, 第一個指令會出現 space warning, 別理會
    ~ # cat /dev/zero > /dev/mtd/mtd2
    ~ # /sbin/flash_image boot /sdcard/boot-new.img

    6. 確認 /sd-ext 有 mount 起來 (你應該先做完了 sdparted 跟 tune2fs -j /dev/block/mmcblk0p2 )
    ~ # df /sd-ext
    df /sd-ext
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/block/mmcblk0p2 1874248 95127 1679119 5% /sd-ext

    7. 照上頭 (最後一個 cd / 必須做, 讓你可以在手機上 umount 掉
    ~ # cd /data
    ~ # mv app /sd-ext
    ~ # ln -s /sd-ext/app
    ~ # cd /

    8. 用手機在recovery mode下把剛剛mount起來的都umount掉

    9. reboot, 理論上就可行

    如果重開機還是不成, 停留在白色畫面時你可以用adb shell 進去 df, 看是否無法把 /sd-ext mount起來造成的. 若還是不行, 我晚點把手機洗回原始版本再來寫step by step. 讓你試這麼多次真不好意思.

  • Brandon Hung 12 1 月, 2011 at 00:29

    Dear Nekobe,
    感謝你的熱心協助,我想我現在的問題卡在:

    “4. 確認該放進 /system/etc/init.d/ 裡頭的東西都放了, 也設定了 owner & prem
    (如上頭那個comment講的)”;
    我是下載你作好的的”init.d.tar.gz” unzip後直接用root explorer 丟進system/etc,
    我不確定是不是要再把你post在頂樓 Xda 聯結那章文裡寫的要再把另一個”99complete.zip”加進去…

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

    先救回來後等明天加入您的msn後再向你請教了~
    Best regards,
    Brandon

  • Brandon.H 13 1 月, 2011 at 09:19

    真的很感謝 Nekobe的耐心跟熱情花了這麼多時間帶著我跟小白 step by step 的完成了
    保持原廠不刷Rom 的 App2SD+,對我這個Linux 一竅不通的人來說,真是感動啊!!

  • dannylws 15 1 月, 2011 at 14:32

    做到 ~ # /system/xbin/busybox chown root.root /system/etc/init.d
    及 ~ # /system/xbin/busybox chown root.shell /system/etc/init.d/*
    這兩個步驟出現沒有些用戶等信息,結果未能成功做到.

  • dannylws 15 1 月, 2011 at 15:48

    cat /dev/zero > /dev/mtd/mtd2
    這步驟也做不到
    write error

  • nekobe 15 1 月, 2011 at 18:16

    @dannylws:
    1. 能把錯誤訊息擷取下來給我參考嗎? 我拿別人的來照手續做沒問題, 我想應該是哪個步驟出錯了.
    2. cat /dev/zero > /dev/mtd/mtd2 會出現 write error 是正常的.

  • Ban 18 1 月, 2011 at 20:03

    大大您好:

    請教一下,android-dls.com那篇文章我有看過了,但是遇到不小的問題
    我在解出boot.img有成功,但始終無法打包回去
    一直卡在mkbootimg
    請問mkbootimg要如何裝呢?我在網路找了很久,一直找不到比較詳細的流程
    ps:小弟是新手,還有望大大包涵指導

  • nekobe 18 1 月, 2011 at 23:56

    android 官方 git 有 source, 可以直接在SDK裡頭自己編譯一份
    懶的編譯的話哩, 下載這包
    http://blog.nekobe.tw/download/Desire/toolkit.zip
    加油, 有問題隨時問吧 🙂

  • Ban 19 1 月, 2011 at 20:50

    感謝大大的回覆,小弟再研究看看,若有不懂之處,還請大大多多幫忙,萬分感激^^

  • Ban 20 1 月, 2011 at 15:29

    nekobe大您好:您提供的檔案裡split_bootimg.pl會出現錯誤,我延用android-dls.com可以正常執行,另外mkbooting及mkbootfs都可以正常執行,超感謝大大^^

  • Ban 20 1 月, 2011 at 15:31

    大大不好意思,小弟另外有個問題請教,因為上網找了許久找不到相關資訊,就是於android裡,電信業者的名者不知道可否修改?

  • nekobe 21 1 月, 2011 at 22:12

    理論上是放在radio firmware裡頭, 那個我還沒想過要怎麼解出來, 讓我研究一下.

    抱歉沒幫上你的忙 🙂

  • Ban 24 1 月, 2011 at 20:57

    感謝回覆,小弟我也努力研究看看好了^^

  • Wei 24 1 月, 2011 at 21:49

    請問一下,我一開始就進不去Recovery Mode…,它出現紅色三角形~
    按下音量+電源鍵後~下面有一排英文「E:Can’t open /cache/recovery/command」…
    現在僵在這~啥都不敢動~囧~

  • Wei 24 1 月, 2011 at 22:39

    大大~我直接ROOT後~recovery Mode就可以進去了~這樣OK嗎?

  • nekobe 24 1 月, 2011 at 23:57

    ok 的, 你就從Root 後下一步開始繼續做就可以.

  • ls 25 1 月, 2011 at 02:47

    不知為何,我照著這些步驟下去弄,總是會卡在白色的HTC+quietly brilliant的開機畫面,不停的boot loop,我試過將init.d中,只留下99complete的檔案,結果也是一樣,似乎是支援init.d的部分,出了問題。
    就算用了xda上面公版的99complete (其實與這邊附的完全相同),結果也是一樣。只能重新刷原本的boot.img才能正常開機(但是當然沒有app2SD的功能了),請問問題可能出現在哪裡呢?
    Thanks!

  • Wei 25 1 月, 2011 at 07:21

    想請問一下~Backup & Restore後~我要如何確定成功備份?它會存在SD卡裡面嗎?
    因為怕弄壞~想確定一下是否成功備份…

    順便再問一下~
    如果我刷了其他客製化的ROM~現在要使用之前Backup & Restore的備份還原~
    是不是直接進入Recovery模式Backup & Restore~選Restore就OK了呢?
    還需要其他步驟嗎?
    感恩^^

  • nekobe 25 1 月, 2011 at 08:34

    @Wei: 是的, 那個Backup & Restore 就像Ghost一般, 可以靠它還原回去以前的版本.
    一般會放在SD卡上clockworkmod或是nandroid目錄

  • Wei 25 1 月, 2011 at 09:53

    那我了解了,可是我因為一開始進不去Recovery Mode~所以先root後再Backup。所以我以後用備份檔還原後也是已經root的狀態了,是吧…

  • Wei2 25 1 月, 2011 at 10:19

    我了解了,可是因為我一開始進不去recovery mode,所以先root後再backup,所以我以後用備份檔還原後,就是已經被root的狀態了,是吧?

  • nekobe 25 1 月, 2011 at 12:48

    是的, 備份檔也是root狀態的.

  • nekobe 25 1 月, 2011 at 12:51

    @ls: loop reboot通常是有東西mount不起來, 大概是 /sd 或是 /sd-ext
    確認一下你的分割是對的, 也都mkfs過

  • ls 25 1 月, 2011 at 14:21

    nekobe
    @ls: loop reboot通常是有東西mount不起來, 大概是 /sd 或是 /sd-ext
    確認一下你的分割是對的, 也都mkfs過

    我原本想也是,所以將init.d中的檔案只留下99complete.完全沒有任何其他的script.即使在這個狀況下,也會bootloop。(依照xda的討論,只有99complete正常的程序應該可以繼續才對)完全沒有任何mount的動作。
    另,由於fdisk不太會用,所以我是用windows下的minitool做的FAT32,並用CWM做1G的sd-ext,之後也用CWM及mkfs對sd-ext做format(分別做了一次)。我用CWM將sd-ext mount後,可以使用adb正常讀寫FAT32及sd-ext的磁碟,所以磁碟應該沒問題才對。(比較奇怪的,是我沒法於adb中下mount的指令mount sd-ext,所以我才會如上所提,將init.d中只剩下99complete)

    不好意思,問題有點怪。

  • nekobe 25 1 月, 2011 at 15:51

    ls

    nekobe
    @ls: loop reboot通常是有東西mount不起來, 大概是 /sd 或是 /sd-ext
    確認一下你的分割是對的, 也都mkfs過

    我原本想也是,所以將init.d中的檔案只留下99complete.完全沒有任何其他的script.即使在這個狀況下,也會bootloop。(依照xda的討論,只有99complete正常的程序應該可以繼續才對)完全沒有任何mount的動作。
    另,由於fdisk不太會用,所以我是用windows下的minitool做的FAT32,並用CWM做1G的sd-ext,之後也用CWM及mkfs對sd-ext做format(分別做了一次)。我用CWM將sd-ext mount後,可以使用adb正常讀寫FAT32及sd-ext的磁碟,所以磁碟應該沒問題才對。(比較奇怪的,是我沒法於adb中下mount的指令mount sd-ext,所以我才會如上所提,將init.d中只剩下99complete)

    不好意思,問題有點怪。

    那我建議你還是開到recovery mode, 用adb shell進去後再用fdisk, mkfs.vfat, mkfs.ext2, tune2fs -j 的方式做sd 卡. 正常過程, Recovery mode應該可以在mount那邊直接mount /sd-ext 起來, 不能mount應該就是格式有問題. 要記得第一個分割要是FAT32 LBA, 第二個分割要是Linux, 而且都要是主分割區. 割完mkfs後看一下 /dev/block/mmcblk0p1 跟 /var/block/mmcblk0p2 是否存在, 可以用選單去mount /sd 跟 /sd-ext 應該就可以了

  • ls 25 1 月, 2011 at 18:21

    感謝你的解說,今晚會試試看您說的方法。
    有趣的是,我下午用「手動」法,在手機為正常待機的狀況下,用adb進su後,手動mount /sd-ext,並將/data/app移到/sd-ext後,建立ln,竟然成功了!所有的軟體都不知不覺的搬到了/sd-ext而且一切正常運作。唯一的問題是,如果手機重新開機,就會找不到所有的app (因為/sd-ext沒法於boot時直接掛上)所以不能重新開機。

    這樣看來我的sd-ext應該是正常的吧?

    另,我已經檢查過了,第一個分割為FAT32 LBA,第二個確認是Lunix,兩個都為主分割區。另,是否要設定為「bootable」及「active」?

  • nekobe 25 1 月, 2011 at 19:04

    是的, /sd-ext 沒辦法開機時掛上會造成loop reboot, 這是已經知道的狀況.

    由於我的scripts只有針對ext3, 很可能是你的/sd-ext 是 ext2 而非ext3, 所以你晚上測試時記得執行 tune2fs -i /dev/block/mmcblk0p2 把 /sd-ext 轉成 ext3
    可以在recovery mode把 /sd-ext mount起來時用mount指令確認你的/sd-ext究竟是什麼type.
    bootable & active 都是可有可無, 我自己是沒做.

  • ls 26 1 月, 2011 at 00:00

    結果重新用fdisk做 /sdcard及/sd, 還是擺脫不了boot loop的命運。怪的是,如果我把你放在05mountsd裡面的指令用adb一個一個下,那麼完全沒有問題,可以順利的mount /sd-ext。但是如果直接boot,就會boot loop。有夠怪的。
    看來加上我之前測試過的,只留下了99complete那個,也會boot loop,表示與mount應該無關才對。
    還有哪裡錯了呢?

    另,我用CWM backup下來的boot.img大小有3072k,從您的網站下載的只有2412k,有關係嗎?還是我可以將我的boot.img寄給您,請您幫我改一下init.rc呢?(我沒有Lunix可以執行.pl)

    不好意思

  • nekobe 26 1 月, 2011 at 10:52

    關於size問題, 那是正常的, 我剛開始做也怕了一下

    我會發信跟你聯絡的 🙂

  • ls 27 1 月, 2011 at 01:19

    謝謝啦!等您的email囉。
    目前的作法是將/system/app下不需要及舊版的軟體移到/sdcard上暫存,並將/data/app中的軟體盡量移到/system/app下,也空出了不少空間。
    但是我還是希望能夠執行您的script,之後就可以用相同方法,將dalvik-cache也移到/sd-ext中,就會達到真正的「空間無上限」呢!

  • ls 28 1 月, 2011 at 02:08

    感謝您的協助,今天晚上利用了新的boot.img後,剛才將/data/dalvik-cache及/data/data全部搬到/sd-ext中,裝了一大堆軟體後,手機現在還有138MB (還不會減少呢!)真是太棒了!我建議您可以將搬移及建立/dalvik-cache及/data/data的方法也寫出來,可以更加嘉惠大眾!

  • Lenny 13 2 月, 2011 at 00:12

    您好:
    跟著您的說明做, 第四步, 一開始進入fastboot mode時, 選擇Bootloader後, 螢幕會閃過一些訊息, “SD Checking… Loading…[PD99DIAG.zip]… No Image!…”, 好像需要從SD load兩個image, 之後回到畫面上才能繼續選擇”Recovery”, 但是只出現一個手機+驚嘆號的畫面就停住, 請問SD Card需要先做什麼處理嗎?

    我手邊的機器剛買不久, default就是2.2版, 版本也確認過了, 一開始就卡住了, 可否麻煩幫忙解答, 感謝!!

  • nekobe 13 2 月, 2011 at 14:19

    @Lenny:
    到第四步驟前是為了備份整個系統, 可能新的出廠版本在Recovery Mode的部份有變動
    你可以試著直接去root掉, root完應該會把Recovery Mode換成clockwork, 那時再做nandroid也沒關係.

  • Jeff 14 2 月, 2011 at 22:03

    請問一定要 S-Off 才可以辦到嗎??

  • nekobe 15 2 月, 2011 at 02:45

    @Jeff: 不S-Off的話, 就不能寫 /system, 就不能做出支援init.d 的 init.rc 了
    當然還是可以在開機狀態把東西移過去, 但是後遺症是每次開機都得重作一次
    所以我還是建議S-Off掉吧.

    理論上在Recovery Mode下應該可以remount /system 成read/write, 但是我沒試過
    若是可以這樣, 同時也能寫 /dev/mtd* 的話, 應該有機會在不S-Off下完成
    如果你實驗成功, 記得發表一下給大家做參考, 謝謝.

  • Lenny 15 2 月, 2011 at 10:29

    @nekobe: 感謝您! 試過直接Unrevoked後還是有些錯誤, 似乎是HBOOT PVT4的問題, 目前還沒找到解決方法, 只好先恢復原始ROM.

    不知道有沒這方面的解決方法?

  • nekobe 15 2 月, 2011 at 20:34

    @Lenny: 很可能你的sd卡換過, 所以裡頭沒有recovery.img, 試著從你原始那張sd卡找看看吧.

  • Jeff 15 2 月, 2011 at 22:16

    謝謝版主,請問一下 un-pack boot image 後,init.rc 要如何修改?
    另外我沒有 S-Off,我是在 recovery mode 下去做…
    做到 ~ # /sbin/flash_image boot /sdcard/boot-new.img 時,有一堆
    mtd: read all-zero block at 0x00000000; skipping
    mtd: read all-zero block at 0x00020000; skipping
    mtd: read all-zero block at 0x00040000; skipping
    mtd: read all-zero block at 0x00060000; skipping
    的訊息,不知道是否正確,然後我今天做完結果一直 boot loop…>_<
    不知是不是 boot image 的關係….thanks

  • nekobe 15 2 月, 2011 at 22:19

    @Jeff:
    http://forum.xda-developers.com/showthread.php?t=894445
    這裡有講怎麼改init.rc 🙂
    那個skipping應該是正常的訊息, 雖然我沒碰到這個, 可能是有沒有S-Off的差異吧

  • Lenny 16 2 月, 2011 at 02:35

    我找到解決的方法了, 應該就是unrEVOked 內建 clockworkmod 版本問題, 找到一個修改過的版本, 已經完成root了!

    在經過s-off之後, 大概就剩最後的步驟, 還是失敗了!

    錯誤基本上跟jeff的一樣, “No space left on device”正常嗎?

    如果不管這個錯誤, 結果就是boo loop…

    /sbin/flash_image boot /sdcard/boot-new.img
    mtd: read all-zero block at 0x00000000; skipping
    mtd: read all-zero block at 0x00040000; skipping
    mtd: read all-zero block at 0x00080000; skipping
    mtd: read all-zero block at 0x000c0000; skipping
    mtd: read all-zero block at 0x00100000; skipping
    mtd: MEMGETBADBLOCK returned 1 at 0x00140000 (errno=0)
    mtd: read all-zero block at 0x00180000; skipping
    mtd: read all-zero block at 0x001c0000; skipping
    mtd: read all-zero block at 0x00200000; skipping
    mtd: read all-zero block at 0x00240000; skipping
    mtd: read all-zero block at 0x00280000; skipping
    mtd: read all-zero block at 0x002c0000; skipping
    mtd: read all-zero block at 0x00300000; skipping
    error reading boot: No space left on device
    flashing boot from /sdcard/boot-new.img
    mtd: not writing bad block at 0x00140000

  • zero 12 4 月, 2011 at 13:41

    您好:
    跟著您的說明做, 第四步, 一開始進入fastboot mode時, 選擇Bootloader後,繼續選擇”Recovery”, 按了電源後,它重開機出現HTC大標示後,就出現一個手機+驚嘆號的畫面就停住, 我的手機 default就是2.2版, 版本也確認過了, 一開始就卡住了, 可否麻煩幫忙解答, 感謝!!

  • zero 12 4 月, 2011 at 20:18

    為何,我裝了Titanium Backup後,它說,我root未成功呢?
    我應該是新版的Desire,不能直接做備份,只能執行第5點後,才能做備份了。拜託您了…

  • zero 12 4 月, 2011 at 20:21

    我只能先做,第5項做完後,才能做第4項,但我裝了Titanium Backup後,它卻說我root沒成功,怎麼辦,好苦腦喔…

  • zero 12 4 月, 2011 at 20:23

    我做備份呀,選backup and restore後,在點進去卻是一個是backup、一個是restore、一個是Advanced Restore,我要選那一個呢?

  • Gary 20 7 月, 2011 at 00:53

    Hi
    我照著您的程序一直做, 最後還是停在HTC boot loop. 你可以幫忙我debug一下嗎?
    我做到 ~ # /sbin/flash_image boot /sdcard/boot-new.img 時,有一堆
    mtd: read all-zero block at 0×00000000; skipping
    mtd: read all-zero block at 0×00020000; skipping
    mtd: read all-zero block at 0×00040000; skipping
    mtd: read all-zero block at 0×00060000; skipping
    該怎麼解決呢?

    謝謝您

  • Gary 20 7 月, 2011 at 00:53

    Hi
    我照著您的程序一直做, 最後還是停在HTC boot loop. 你可以幫忙我debug一下嗎?
    我做到 ~ # /sbin/flash_image boot /sdcard/boot-new.img 時,有一堆
    mtd: read all-zero block at 0×00000000; skipping
    mtd: read all-zero block at 0×00020000; skipping
    mtd: read all-zero block at 0×00040000; skipping
    mtd: read all-zero block at 0×00060000; skipping
    該怎麼解決呢?

  • Post a comment

    Threaded commenting powered by interconnect/it code.

1 2