Android 6.0 adb remount後沒有寫權限,提示Read-only file system

在Android6.0 (Android M)userdebug版本上(eng版本不存在該問題),發現使用adb remount 系統之後,還是不能對system分區進行操作,提示沒有寫權限,爲只讀文件系統Read-only file system

解決方法如下
方法一:使用新的adb工具包
1.下載最新的adb工具包
查看是否爲adb最新版本:
# adb version
Android Debug Bridge version 1.0.32
Revision 09a0d98bebce-android
(有該信息表明是最新的1.0.32版本,舊的1.0.32版本沒有該信息)

最新版本的adb增加了一些adb命令,如 adb disable-verity等,可通過adb help查看安裝的adb是否支持disable-verity命令

最新的adb工具包下載地址如下:
http://download.csdn.net/detail/linuxarm521/9572709

2.執行如下命令
1. adb root
2. adb disable-verity
(最新的adb 工具包才支持adb disable-verity命令,如果是Linux開發環境,則可使用工程編譯結果目錄out/host/linux-x86/bin下的adb執行文件)
3. adb reboot 重啓設備
(只要不刷機,以上步驟執行一次就行)
4. adb root
5. adb remount
現在可以對system分區進行讀寫了

注意點:
1.新版本的adb工具 adb shell 進入命令行之後,Ctrl+c不能退出,可輸入exit退出
2.可點擊adb\run_adb.bat文件直接啓動adb

方法二:修改系統源碼
修改源碼中的fstab文件,把system分區的verify標誌去掉
如把
/dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/system /system ext4 ro wait,verify
修改爲
/dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/system /system ext4 ro wait

其他:
adb disable-verity命令在系統源碼中的控制
system\core\adb\set_verity_enable_state_service.cpp
void set_verity_enabled_state_service(int fd, void* cookie)
{
……
/* Loop through entries looking for ones that vold manages */
for (i = 0; i < fstab->num_entries; i++) {
if(fs_mgr_is_verified(&fstab->recs[i])) {
if (!set_verity_enabled_state(fd, fstab->recs[i].blk_device,
fstab->recs[i].mount_point,
enable)) {
any_changed = true;
}
}
}
……
}

static int set_verity_enabled_state(int fd, const char *block_device,
const char* mount_point, bool enable)
{
……
if (adb_write(device, &new_magic, sizeof(new_magic)) != sizeof(new_magic))
{
WriteFdFmt(fd, “Could not set verity %s flag on device %s with error %s\n”,
enable ? “enabled” : “disabled”,
block_device, strerror(errno));
goto errout;
}
……
}

參考資料
http://blog.csdn.net/wh_19910525/article/details/50263851

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章