- 論壇徽章:
- 0
|
Android智能手機交換用戶分區(qū)和存儲分區(qū)的方法(適用于用戶分區(qū)較小的手機)
本文檔只談思路,不含實際可操作軟件
操作需謹慎,后果自負
***** 手機必須先root *****
測試手機:聯(lián)想s899t
RAM:1G
ROM: 4G
實際使用過程中發(fā)現(xiàn),默認的用戶分區(qū)(/data)只有435MB,嚴重阻礙了應(yīng)用軟件的安裝(因為有些軟件必須裝在用戶分區(qū))
而,默認的存儲分區(qū)(/sdcard, or /mnt/sdcard)有>2GB空間可用,大部分閑置。思路是交換兩者以獲得足夠的用戶分區(qū),而較小的存儲分區(qū)完全不用擔心(可以外插sd卡)。
**********************************************
****************** 實戰(zhàn) **********************
**********************************************
有3個地方需要修改:
boot.img
/init.rc
recovery.img
/init.rc
system 分區(qū)內(nèi)
/etc/vold.fstab
boot.img & recovery.img 可以從官方ROM中解壓縮提取出來,可以把二者視為兩個獨立的小系統(tǒng),互不關(guān)聯(lián)。一個好處是,一個系統(tǒng)損壞了,可以通過另一個系統(tǒng)修復。
正常情況下,boot.img & recovery.img 被直接復制到手機的ROM中的2個“軟件分區(qū)”(software partition).
(software partition 和 hardware partition 區(qū)別可參考
https://www.google.co.jp/url?sa= ... HwQySphjE54IXoDIr2g
簡言之,hw partition 是由eMMC 廠商寫在硬件寄存器上的。一般不改。sw partition 是OS能識別的分區(qū)。在一個hw partition 中,可以劃分多個sw partition.)
修改時候,需要涉及4個分區(qū),我的手機上默認情況是:
p5 /data
p7 /boot
p8 /recovery
p11 /sdcard
具體識別方法先略過,看操作先:
下一步,解開boot.img,修改/init.rc文件,重新打包boot.img,然后覆蓋原分區(qū)
1. 解包:可用軟件bootimg_tools.zip from http://forum.xda-developers.com/showthread.php?t=2319018
2. 修改/init.rc
搜索行:mount ext4 /dev/block/mmcblk0p5 /data nosuid nodev nodelalloc,noauto_da_alloc #存儲boot.img的分區(qū)是mmcblk0p5 (不同機器p#不同,識別方法見后文)
修改mmcblk0p5 到 mmcblk0p11 (后者是我的原/sdcard的分區(qū),識別方法見后文)
3. 重新打包,工具在bootimg_tools.zip
4. 覆蓋原分區(qū)
先上傳boot.img 到 /sdcard 目錄
adb shell su - "dd if=/sdcard/boot.img of=/dev/block/mmcblk0p7" (同樣,不同的機器mmcblk0p# 有不同的#,見后文識別這些分區(qū))
完全相同的上述4個步驟應(yīng)用于recovery.img,同樣燒錄到包含recovery的分區(qū)中。
最后步驟,修改當前系統(tǒng)的/system 分區(qū)中/etc/vold.fstab,可以找個app:“root explorer” 修改前,先設(shè)置/system 為"mount rw",改好后設(shè)回”mount ro".
原文件中,行
dev_mount sdcard /mnt/sdcard/external_sd 5 /devices/sdi4/mmc_host/mmc0/mmc0:0001/block/mmcblk0
修改為
dev_mount sdcard /mnt/sdcard/external_sd 11 /devices/sdi4/mmc_host/mmc0/mmc0:0001/block/mmcblk0
好了,重啟系統(tǒng)到recovery 模式,格式化/data分區(qū),完成后正常重啟。
在新系統(tǒng)中,進入“設(shè)置”-》“存儲”,格式化你的存儲分區(qū)。一切就安靜了。
*******************************************************
************************ 備注 *************************
*******************************************************
識別分區(qū)方法:(很重要)
/data
執(zhí)行
adb shell
$su -
#mount |grep -w '/data'
/dev/block/mmcblk0p5 /data ext4 rw,...
找到p5是我的/data分區(qū)
/sdcard
用上述方法執(zhí)行
#mount |grep -w '/mnt/sdcard'
/dev/block/vold/179:11 /mnt/sdcard vfat rw,...
不用介意179, 11就表示p11分區(qū)
/boot,/recovery
因為只存boot.img 和 recovery.img,所以相對較小,一般不超過16MB。
但是,默認這兩個分區(qū)用戶看不到,所以需要直接搜系統(tǒng)文件(小復雜)。
進/sys/block,有兩個目錄
mmcblk0 手機存儲
mmcblk1 外置sd卡
進mmcblk0,有一堆目錄,類似于
mmcblk0boot0
mmcblk0boot1
mmcblk0p1
mmcblk0p10
mmcblk0p11
mmcblk0p2
mmcblk0p3
mmcblk0p4
mmcblk0p5
mmcblk0p6
mmcblk0p7
mmcblk0p8
mmcblk0p9
mmcblk0boot0,mmcblk0boot1不知道干啥用,估計和手機信號模塊什么的有關(guān),ignore
mmcblk0p#就是我們要找的分區(qū)。檢查每個分區(qū)的大小,一個笨辦法是
#cat mmcblk0p7/size
32768
數(shù)值以512B為單位,所以32768 大概是16MB。(這是我的/boot分區(qū),原因見下文)
掃描過每個分區(qū)size后發(fā)現(xiàn)有2個分區(qū)是16MB,其他的低于4MB和大于16MB的都可忽略,這是因為/boot,/recovery 分區(qū)不需要大空間存儲。
直接將兩個分區(qū)內(nèi)容復制下來
adb shell su - "dd if=/dev/block/mmcblk0p7 of=/sdcard/p7.img"
adb shell su - "dd if=/dev/block/mmcblk0p8 of=/sdcard/p8.img"
p7.img p8.img 就是boot.img 和 recovery.img,然后按照上面的方法解包,兩者區(qū)別是,recovery 分區(qū)中有/res 目錄。所以在我的手機上p8.img是recovery.img,相應(yīng)的,mmcblk0p8是我的recovery分區(qū)。mmcblk0p7是boot分區(qū)
注意,網(wǎng)上有些說明可以通過查看/proc/mtd找到boot recovery分區(qū),我的手機看不到。 |
|