前一陣子我上下班用來看影片的 PSP Go (買車送的) 突然出現黑畫面, 弄了半天都還一樣, 上網查了一下, 看樣子似乎是掛了. 所以... 就上網看了一下小平板, 就買了台 Acer A1-810 回來. (不過... 買回來那天, 打開 PSP Go 突然又有畫面了....)

其實, 只是用來看看影片, 似乎也沒有 root 需求. 不過看到有 Toolkit 出來, 還是手癢試了一下.

雖然上頭說的方法似乎很簡單, 不過.... 由於我買的是台灣的版本, 不是國際版, 據說直接刷 system.img.gz進去會造成重開機無窮迴圈 (其實有解, 只是等於整個刷成國際版了). 所以... 就只抓 toolkit 回來, 到 linux 底下做.

首先找台 Linux 的機器來用, 如果沒有的話 (對, 我也沒有, 我都是當 server 用, 其他用的機器都是 Windows), 就抓個 Ubuntu 或其他有 live cd/dvd 的版本都可以, 或者是用 SystemRescueCD (我是用這個) 來用就可以了.

1. 打開一個終端機, 如果不是 root, 就 sudo su - 切到 root 的環境.
2. 把 toolkit 抓下來, 解開來, 放在可以執行的目錄下, 例如: /root/toolkit
3. 如果你用的環境沒有 sudo (我用 SystemRescueCD 就沒有, 直接就是 root), 就修改 /root/toolkit/.toolkit.py 的內容, 把 sudo 都換成空白. (如果有 sudo 就不用)
4. 把 A1 用 USB 接上去 (先充飽電吧, 刷一半沒電可能就掛了), 先到設定 -> 顯示, 把休眠改成永不.
5. 如果你的開發人員選項沒打開, 請到設定 -> 關於平板電腦, 好像是影像版本 (或版本號碼, 忘了是那一個), 連續點七下以上, 就會打開開發人員選項.
6. 到設定 -> 開發人員選項, 開啟開發人員選項, 把偵錯 -> USB 偵錯打勾.
7. 執行 /root/toolkit/toolkit.sh
8. 選 2 => A1-810
9. 選 1 => root
10. 選 1 =>Root from scratch
11. 告知需要 10 分鐘, 按 enter 開始做吧 (後面會有一堆問題, 都是按 Enter 就可以).
12. 等出現 Successfully added su binary to system.img 這個時候, 可以按 Ctrl-C 跳開. (你要繼續做也可以, 不過我做到最後, 是有 /system/bin/su, 權限也對, 不過就是不能執行.
13. 這時你就有了一個你的 A1 dump 下來的 system.img.gz 在 /root/toolkit/ 下面.
14. 如果你不嫌檔案太大, 可以抓 toolkit 那討論串第一篇文章裡頭的 system RW workaround 那個連結的 system.img.gz 回來 (有 500MB 左右), 或者直接抓我下面這個檔案 (只抓取那個 system.img.gz 裡頭我們要用的檔案):
a1_su_system_rw.tgz (1.5 MB)
http://www.multiupload.nl/KE8QZ97Z3M

15. 先 gzip -d /root/toolkit/system.img.gz 成為 /root/toolkit/system.img.gz
16. mkdir /mnt/a1
17. mount -o loop/root/toolkit/system.img /mnt/a1
18. 如果你是抓上頭的個 a1_su.tgz 回來, 把它放在 /root/ 底下, 然後 cd /mnt/a1; tar zxvf /root/a1_su.tgz 就可以.
19. 如果你是抓另外那一個 system.img.gz 回來的, 把他放到 /mnt 或其他路徑下,一樣 gzip -d 解成 system.img, 然後 mkdir /mnt/a1_2; mount -o loop /mnt/system.img /mnt/a1_2
20. 用 cp -a 把 /mnt/a1_2/bin/ 下面的 busybox, wrapper.sh 與 wrap.ext (目錄) 複製一份到 /mnt/a1/bin/
21. 用 cp -a 把 /mnt/a1_2/xbin/ 下面的 su 複製一份到 /mnt/a1/xbin/ (還有 /busybox 與一堆 softlink 到 busybox 的指令)
22. 用 rm -f 把 /mnt/a1/bin/su 刪除 (如果有的話)
23. 用 cp -a 把 /mnt/a1_2/app/ 下面的 SuperSU.apk 複製一份到 /mnt/a1/app/
24. 然後 cd /root; umount /mnt/a1; umount /mnt/a1_2
26. 接著執行 gzip -9v /root/toolkit/system.img 把它再壓回 system.img.gz
26. 把 system.img.gz 放到 /root/toolkit/system_image/ 下 (或者copy 到 Windows 的環境下)
27. 再執行一次 /root/toolkit/toolkit.sh (如果你是放到 Windows 下, 就是執行 toolkit.exe, 我是在 linux 試了一次沒有成功, 就到 Windows 下用了, 不確定是 toolkit 那一段沒寫好還是我弄錯了)
28. 重複一開始的動作, 選 2 => A1-810
29. 選 1 =>root
30. 這次選 2 => Root with prerooted system.img.gz
31. 接下去應該就都是 Enter 了, 到刷好為止.
32. 刷好就拔 usb, 電源鈕按著選關機, 然後等關機再按電源鈕開機, 開機後應該就是 root 的環境了.

如果你不想自己動手做, 也不怕抓個 500MB 的大檔案, 可以直接抓我做的 system.img.gz (就是上頭那些步驟做出來的, 我的版本是 Acer_AV052_A1-810_RV18RC11_TWN_GEN1, 如果不是這個, 最好先 OTA 升級到這個版本再用, 如果你是要全部自己動手做就不用管版本):

system.img.7z.001 (100 MB)
http://www.multiupload.nl/HWZ26J92KS


system.img.7z.002 (100 MB)
http://www.multiupload.nl/VBBKSD3JQB


system.img.7z.003 (100 MB)
http://www.multiupload.nl/100Z8U6GKM


system.img.7z.004 (100 MB)
http://www.multiupload.nl/7CEP3B2XCW


system.img.7z.005 (100 MB)
http://www.multiupload.nl/B5N17J854J


system.img.7z.006 (5.3 MB)
http://www.multiupload.nl/AZY694L20A


檔案全抓下後用 7z解回 system.img.gz (不要解過頭成為 system.img 了), 放到 toolkit 下的 system_image 目錄下再執行 toolkit.exe 去 root 就可以了.

2013/7/25 更新:
有修正 /system 寫入的問題, 如果有需要就檔案再抓一次吧.

2013/7/30 更新:
之前對 /system 讀寫的修正是使用 sodaFR 所提供的方案, 由於系統本身多數的指令是透過 /system/bin/toolbox 來處理, 不過對於 mount 指令, 會限制不能把 /system remount 為可讀寫的模式. 而 sodaFR 的解決方法是加入一個 busybox 的程式, 然後透過 busybox 去 mount 就可以避開這個限制.

他寫了一個 /system/bin/wrapper.sh 的指令, 透過它去判斷是否要去 remount /system 為 rw 的狀態, 如果是, 就透過 /system/xbin/mount (softlink 到 busybox) 去處理. 其他就丟給原本的 /system/bin/mount (softlink 到 toolbox). 然後做一個 /system/bin/busybox 的 softlink 到 /system/bin/wrapper.sh, 這樣子, 只要是透過 /system/bin/busybox 去做 remount 的動作就會成功. 不是的話就會失敗.

不過.... 似乎很多程式在 remount /system 時, 並不是透過 /system/bin/busybox 去做 (為什麼要這樣做, 在 Android 有什麼限制要之樣子處理嗎? 一般 linux 的系統, 不都是直接呼叫 mount 指令來處理嗎?), 所以執行的結果就不正常. (所以上一篇我會對 OTA RootKeepert 做修正)

所以... 我就對這個再做了一點修正:

1.由於 busybox 是依據 softlink 的名稱來決定要執行什麼功能, 所以, 我們仍需要一個指到 /system/xbin/busybox 的 mount 指令, 但又不能用 /system/bin/mount 或 /system/xbin/mount, 所以... 就建一個目錄 /system/xbin/.mount_wrapper/ , 然後在裡頭做一個叫 mount 的 softlink 指到 /system/xbin/busybox, 如:
shell@android:/system/xbin/.mount_wrapper # ls -la
ls -la
lrwxrwxrwx root root 2013-07-30 10:09 mount -> ../busybox

2.把 /system/bin/wrapper.sh 改成這個樣子:
#!/system/bin/sh

CMD=`basename $0`
ARG="$*"
NEWARG="-o remount,rw /system /system/"
LArg=$(eval echo \$$#)

case "$CMD" in
"busybox")
if [ $1 == "mount" ] && [ $2 == "-o" ] && ([ $3 == "rw,remount" ] || [ $3 == "remount,rw" ]); then
if [ $LArg == "/system" ] || [ $LArg == "/system/" ]; then
/system/xbin/.mount_wrapper/mount $NEWARG
# return $?
return 0
fi
fi
/system/xbin/busybox $ARG
# return $?
return 0
;;

"mount")
if [ $1 == "-o" ] && ([ $2 == "rw,remount" ] || [ $2 == "remount,rw" ]); then
if [ $LArg == "/system" ] || [ $LArg == "/system/" ]; then
/system/xbin/.mount_wrapper/mount $NEWARG
# return $?
return 0
fi
fi
/system/bin/toolbox mount $ARG
# return $?
return 0
;;
esac

exit 0

3.然後把 /system/bin/busybox, /system/bin/mount, /system/xbin/mount 都用 softlink 的方式指到 /system/bin/wrapper.sh, 如:
shell@android:/system/xbin # ls -la mount
ls -la mount
lrwxrwxrwx root root 2013-07-30 10:09 mount -> ../bin/wrapper.sh
shell@android:/system/xbin # cd ../bin
cd ../bin
shell@android:/system/bin # ls -la mount
ls -la mount
lrwxrwxrwx root root 2013-07-30 10:01 mount -> wrapper.sh
shell@android:/system/bin # ls -la busybox
ls -la busybox
lrwxrwxrwx root root 2013-07-30 10:01 busybox -> wrapper.sh

經過這樣子的處理之後, 不管是執行 /system/bin/mount 或 /system/xbin/mount (通常都是用這兩個吧) 或 /system/bin/busybox 來做 remount /system 的動作, 都可以正常執行. 我試過沒改過的 OTA RootKeeper 或 ES File Explorer 都可以正常運作.

我把相關的檔案連同 koush 的 Superuser.apk 與 su 打包成為 su.tgz, 可以由這兒下載:


http://www.multiupload.nl/9XZ7BJ6ZH0



如果要重做 system.img.gz 的話, 就抓回去解開來用就可以. 如果已 root 的機器, 會下指令就依照上頭的方式自己做, 或直接拿 su.tgz 到 /system 解開來用也可以.

這個是 TWN RV18RC11 版本以上面說的方式做出來的 system.img.gz (因為用 dd 清過, 所以壓起來小了許多), 如果需要請自己抓回去用吧.


system.img_20130730.7z.001 (100 MB)
http://www.multiupload.nl/OG1RK9HYT9



system.img_20130730.7z.002 (100 MB)
http://www.multiupload.nl/FI6XFN8YOC



system.img_20130730.7z.003 (100 MB)
http://www.multiupload.nl/BHEPGDGXAN



system.img_20130730.7z.004 (100 MB)
http://www.multiupload.nl/KJFEVR3J6P



system.img_20130730.7z.005 (7.5 MB)
http://www.multiupload.nl/8AHGTHL6CD


解開來的 system.img.gz 的檢查碼為:
File: system.img.gz
CRC-32: ed63aebd
MD4: dbd6eafff674c4428248e6f77cc80304
MD5: f63b516201fe8d484cae9ee733bee39c
SHA-1: 1d610b9aa7339591651252404858d4601643c20e

原則上, 如果已經 root 的機器, 應該自己用 adb 進去改一改比較好, 當然.... 想重刷也可以. (不過重刷的風險畢竟比較大一些)

2013/9/19:
這是 RV21RC03_TWN root 之後的 system.img.gz, 抓回去自行改名為 system.img.gz 用 toolkit 就可以了.
File: RV21RC03_TWN.rooted.img.gz
CRC-32: adbdcb27
MD4: cf7206efec5f47991e9c3f9d71639fc3
MD5: 5bf5706461b7941e9c7199c7b373b0e7
SHA-1: 007730b4c70106d86e14e8c88aeb551542442658
RV21RC03_TWN.rooted.img.gz
https://mega.co.nz/#!hNhAlYpI!Ka7ha02qf8peTj4HV_bF1XpXC_4mUgYwSURJlTsUoss

2013/10/8:
toolkit 0.7.5 把上面的 /system rw workaround 加進去了, 以後用 Root from scratch 直接處理就可以了, 不用上面那麼多步驟停下來自己去加料了.

2013/12/2:
更正 Superuser 無法更新 su 的問題.
http://www.mobile01.com/topicdetail.php?f=605&t=3470158&p=8#47510164#47510164
真是佛心來著, 連做好的system image都丟上來了
晚點來試試
直接用 system.img.gz 的人, 記得看一下版本.
因為台灣賣的機器, 好像不只有 TWN 的版本.... 我有碰到過 WW 的版本.

twu2 wrote:
前一陣子我上下班用來...(恕刪)


有一點點小複雜
請問 cp -a 、 rm -f 等一些字串(這些是語法嗎?)
不熟很怕刷失敗
請問ROOT之後還能更新嗎?
先前好像有人說ROOT之後不能更新
攝影~要先感動自己,才能感動別人

twu2 wrote:
前一陣子我上下班用來...(恕刪)


這篇一定要留...
Root 後聽說會沒保固? Root 後打算刷回原廠要照哪篇的步驟與檔案下載作?

Sean2001twtw wrote:
這篇一定要留...R...(恕刪)

root 沒保固?
友站有人之前用這個 toolkit 直接刷 WW 版的 system.img.gz 到 TWN 版本上, 就進不去系統了.
據他說送 Acer 修不用錢.

要刷回去也很簡單. 如果有保留原本的 system.img.gz (沒有就自己 mount 已 root 的那一個, 把加上的那幾個檔案都刪除了), 就再用那一個刷回去就變回沒 root 了.
那個 toolkit 提供的 Unroot 功能就是這樣處理. (只是不適用我的方法弄出來的版本, 因為新增的那些檔案數量與所放的路徑不一樣)

ev520 wrote:
請問ROOT之後還能更新嗎?
先前好像有人說ROOT之後不能更新

我剛試我的不行更新 (不過我有刪除一些我用不到的東西)....
等有空我再刷回原本完整的版本 + root 看看能不能更新吧.

twu2 wrote:
不過我有刪除一些我用不到的東西 ...(恕刪)


這是ROOT主要目的
再期待您的測試結果囉
攝影~要先感動自己,才能感動別人
試了一下, 如果有 /system/xbin/su 存在, 就無法執行系統更新.
只要把這個檔案改名, 就可以更新.

不過... OTA RootKeeper 這軟體在我 root 的 A1 上頭不能正常運作 (備份 root 的動作執行後只顯示備份好了, 但實際上無改變), 所以不能先備份 root 再 unroot 去 OTA....

如果會用 adb 的話, 可以這樣子處理:
1. 執行 adb shell (會進入 shell 畫面)
2. 執行 su (可能會在 SuperSU 上頭會詢問, 要允許)
3. 確定出現 # 表示取得 root 權限之後, 執行 /system/bin/busybox mount -o remount,rw /system
4. 如果沒出現錯誤, 表示可以對 /system 寫入了, 執行 mv /system/xbin/su /system/xbin/su_backup
5. 如果沒錯誤, 就可以執行系統更新了.

如果有更新, 重開機後, 再用 adb 去把 su_backup 改回 su.
1. 執行 adb shell (會進入 shell 畫面)
2. 執行 su_backup
3. 確定出現 # 表示取得 root 權限之後, 執行 /system/bin/busybox mount -o remount,rw /system
4. 如果沒出現錯誤, 表示可以對 /system 寫入了, 執行 mv /system/xbin/su_backup /system/xbin/su

其實指令很簡單 (如果用過 linux 應該都懂), 或許可以寫個類似 OTA RootKeeper 的程式來處理, 等有空再來看看 Android 的 app 要怎麼寫就寫個來用吧.
寫的很詳細的分享,
一定要幫忙推一下啦!



twu2 wrote:
前一陣子我上下班用來...(恕刪)
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 12)

今日熱門文章 網友點擊推薦!