Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

Acer A1-810 rooted /system read-write workaround
post by tommy @ 30 七月, 2013 12:46

之前對 /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 做修正)

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

  • 由於 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
  • 把 /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
  • 然後把  /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 進去改一改比較好, 當然.... 想重刷也可以. (不過重刷的風險畢竟比較大一些)

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:Acer A1-810 rooted /system read-write workaround [ 回覆 ]

請教大大.
更新 superuser 的su..ok
安裝 xposed, 提示 could not mout /sytem writable
應該也是類似的情形, 能否研究一下..

commons icon [2] Re:Acer A1-810 rooted /system read-write workaround [ 回覆 ]

xposed 會透過自己的 busybox 來 mount, 指令與 A1 需要的不一樣, 所以會失敗.

要自己手動處理.
1. 自己 remount /system 為可讀寫.
2. 把 /data/data/de.robx.android.xposed.installer/bin/app_process 複製到 /system/bin/ 下面.
3. chmod 755 /system/bin/app_process
4. chown root:shell /system/bin/app_process
5. /system/bin/restorecon /system/bin/app_process
(這一步執行有問題也沒關係)

然後在 xposed installer 裡頭 installation mode 改成用 Recovery (flash manually) 那一個, 再按 安裝/更新 就可以了.

commons icon [3] Re:Acer A1-810 rooted /system read-write workaround [ 回覆 ]

謝謝大大. XPOSED 裝好了.

迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 93 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS