OPPO find7怎么刷入双系统?
刚看到说OPPO find7可以刷入双系统使用了,想求下教程!
0
1)原理
安卓系统的启动是由内核中的ramdisk完成,而内核启动过程中由挂载点决定系统/用户/缓存数据的存放位置,因此通过修改挂载点,让它们指向手机内置存储或者SD卡上的system/data/cache分区,就可以实现双系统独立启动。(这也是本教程理论支持所有机型的原因,只是具体步骤需要变通一下)
2)给SD卡分区
先啰嗦一句,由于第二系统安装在SD卡上,所以对SD卡速度的要求是很高的,在SD卡上的系统不如内置存储上的系统流畅(但是也不错),因此选用的SD卡速度越快,系统越流畅,我这里选用的是c10的卡,实际体验不错。
1)备份SD卡上的数据,防止分区时数据意外丢失。
2) 系统除boot分区(内核所在)外至少还需要cache、data、system三个分区。分区具体步骤我就不阐述了,网上有很多教程和工具,以前玩过app2sd+的机油都清楚。下面讲一下分区数量和大小(以find7的cm11为例):
1)SD卡存储文件的分区 fat32 主分区 根据后面的大小决定
2)cache分区 ext3 主分区 我分了300MB,我的两个系统用的空间不足十兆,SD卡小可以从这里压缩空间
3)data分区 ext3 主分区 安装软件的分区,根据你的习惯自己制定,我分了1GB
4)system分区 ext3 主分区 安装系统的分区,根据你刷的系统大小自定,由于cm包比较小,我分700MB(已用389MB),colorOS find7至少需要1g(官方分区1.3g左右),MIUI需要700MB
注意:1)以上分区全都是主分区且都格式化为规定文件系统,其中ext3也可格式化为ext4。
2)后三个分区顺序可以调换,但是如果使用我提供的内核和刷机包,必须按照这个顺序分区。
3)分区是刷系统的基础,这步不能出问题。
4)大家可以按我提供的信息自定分区大小,但要有少量的剩余空间。
自测没问题,内核改好,在刷机包里自己提取。分好区后可以直接刷,但一定按上面的顺序分区!!!
三、修改刷机脚本,电脑操作。(以cm11-find7 2014-9-3 刷机包为例)
通常的刷机包都将系统刷写到内置存储的相关分区中,由刷机脚本控制,我们只需要修改刷机脚本,就可以将系统按我们的意愿刷写到SD卡相关分区中。
1)用压缩软件打开原版刷机包,解压出\META-INF\com\google\android\updater-script文件,用notepad++软件打开,没有的去下载一个,不要用记事本!!
2)如果文件开头没有以下几句卸载命令,则强烈建议加入,因为如果这些目录前面已经挂载了分区,就无法挂载SD卡上的分区了,后面的操作变成了针对内部存储分区,造成原有内部存储分区上数据丢失。
unmount("/data");
unmount("/cache");
unmount("/system");
3)看第八行
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/userdata", "/data");
这是挂载data的指令,我们要将
/dev/block/platform/msm_sdcc.1/by-name/userdata
改为SD卡中指定分区
/dev/block/mmcblk1p3
即改后的语句
mount("ext4", "EMMC", "/dev/block/mmcblk1p3", "/data");(注意后面的分号)
注意:
SD卡上第一二三四分区分别为
/dev/block/mmcblk1p1
/dev/block/mmcblk1p2
/dev/block/mmcblk1p3
/dev/block/mmcblk1p4
你要按照你给SD卡分区的顺序决定填什么,由于上面我打算将第三分区作为data,所以这里填
/dev/block/mmcblk1p3
继续往下读看到
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
这是挂载system分区的语句,我们要将原来的分区
/dev/block/platform/msm_sdcc.1/by-name/system
改为SD卡上的分区,我的是
/dev/block/mmcblk1p4
改后的语句是
mount("ext4", "EMMC", "/dev/block/mmcblk1p4", "/system");
继续往下
format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "0", "/system");
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
分别是格式化和挂载system的语句,都要将
/dev/block/platform/msm_sdcc.1/by-name/system
改为
/dev/block/mmcblk1p4
即
format("ext4", "EMMC", "/dev/block/mmcblk1p4", "0", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk1p4", "/system");
这几步的目的很简单,就是让刷机脚本对挂载在/system /cache /data的内部分区的操作改为对SD卡对应分区的操作。
在find7上,将刷机脚本中所有的
/dev/block/platform/msm_sdcc.1/by-name/userdata或/dev/block/mmcblk0p15
改为
/dev/block/mmcblk1p3
将所有
/dev/block/platform/msm_sdcc.1/by-name/system或/dev/block/mmcblk0p14
改为
/dev/block/mmcblk1p4
将所有
/dev/block/platform/msm_sdcc.1/by-name/cache或/dev/block/mmcblk0p17
改为
/dev/block/mmcblk1p2
其他机型不要按照这个改,但是原理相同。
有些刷机脚本会加入双清的语句,一定要看好,删除他们或改到SD卡对应分区。
4)将改后的文件保存,替换进刷机包中。
4)修改内核。
1)用压缩软件打开刷机包,解压出boot.img文件。
2)下载附件(会用厨房的跳过)Android Image Kitchen.zip,解压。(如果软件运行有问题,请配置Java环境,具体配置方法百度)
3)将boot.img放到解压出的Android Image Kitchen文件夹下,将boot.img拖到unpackimg.bat上,会自行解压出两个文件夹ramdisk和split_img,我们什么也不要做。
ramdisk中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc、init.spade.rc、init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。
4)双击进入ramdisk文件夹,里面我们看见许多文件和文件夹,我们要在这里修改挂载点。
5)用notepad++打开fstab.qcom文件,相信你进去一看就明白改什么了,
将
/dev/block/platform/msm_sdcc.1/by-name/system或/dev/block/mmcblk0p14
改为
/dev/block/mmcblk1p4
将所有
/dev/block/platform/msm_sdcc.1/by-name/cache或/dev/block/mmcblk0p17
改为
/dev/block/mmcblk1p2
将
/dev/block/platform/msm_sdcc.1/by-name/userdata或/dev/block/mmcblk0p15
改为
/dev/block/mmcblk1p3
6)将修改的文件保存。
7)检查ramdisk下所有文件,都用notepad++打开看看,确保没有其他遗漏,否则全部按照上面规则替换。对于
cm11-find7 2014-9-3 刷机包,上面修改足够。有些ROM是在init.spade.rc中修改挂载点。
8)双击repackimg.bat,程序自动打包内核为image-new.img,修改名称为boot.img,替换进刷机包里。
9)cleanup.bat是清除所有Android Image Kitchen文件夹下工作遗留下来的文件(除了原boot.img)
5)在刷机之前将你的手机root(论坛里有)、刷入无验证原版recovery或cwm recovery(在论坛里找)、安装re文件管理器、Gscript。
6)通过ADB或终端模拟器导出原内核,具体语句如下:
su
cat /dev/block/mmcblk0p7 > /sdcard/boot1.img
将在电脑上修改过的内核复制到/sdcard,命名为boot2.img
7)强烈建议在刷机之前将原系统备份,可以用cwm recovery的备份功能,将SD卡插入手机,进入recovery开始刷机(ROM包不签名也能正常用,你如果不放心也可以签名后使用),注意,千万不要双清!!!
8)正常刷入后重启,你就会进入SD卡系统,第一次开机比较慢,耐心等待,如果开机第一屏过不了,就失败了,请到fastboot刷入刚备份的boot1.img或从cwm recovery中恢复boot分区数据。如果刷机过不了,是刷机脚本的问题,或者是recovery问题,要检查刷机脚本,或者刷别的rec。
9)双系统的切换
1)现在你只能启动到sd卡系统了(因为刚刚刷入了修改后的内核),在sd卡的系统上,安装Gscript软件,点击菜单键,add script,新建脚本,自己起个名字,脚本内容如下(要勾选su):
flash_image /dev/block/mmcblk0p7 /sdcard/boot1.img
reboot
(再次提醒:只适用于find7,其他机型需要知道boot分区设备名)
2)执行脚本,就会正常重启到原系统,若想从原系统启动到SD卡系统,在原系统的Gscript软件中新建一个脚本,内容相似,只是将boot1.img改为boot2.img
注意:coloros本身不带flash_image,需要将我提供的附件flash_image.zip解压,里面有无后缀的flash_image(也可以cm的ROM中提取),将它复制到colorOS系统中的/system/bin下,权限改为:
读全勾上,写勾第一个,执行全勾上。然后可以在colorOS下执行脚本,切换到SD卡系统。
10)也可以将第二系统内核直接刷在recovery分区,这样按音量下键启动就会启动到第二系统,但选用这种方法需要再改刷机脚本,将在倒数几行的刷boot语句删去,然后用flash_image或fastboot将内核刷在revocery分区(find7是mcblk0p18),其实从本质来说boot和recovery都是启动分区,只是启动方式不同(按不按音量下键的区别)。呵呵,我曾经就尝试将内核刷在recovery分区,将recovery刷在boot分区,两个分区都能正常启动,如果刷机包里没有内核或recovery的话,还可以正常刷机!(只是启动系统有点怪,需要按音量下键)
个人不喜欢这种方法,总感觉去动recovery不安全,但是也没关系,我们还有fastboot,一旦出问题我们也不会变砖。再一个当我们需要刷机或系统升级时还要重刷recovery,不是太方便。
如果想在SD卡上重刷别的系统,需要在电脑上将cache和data重新格式化(相当于手动双清),system一般不用,刷机脚本里有格式化语句。
自测cm11-find7 2014-9-3每夜版刷机包问题:
NFC用不了
手电筒用不了,但是相机闪光灯正常
其他功能正常。也不知是不是我修改的问题。。。。
有些第三方recovery会在清除数据操作时自动判断是否有sd-ext分区并清除数据,它会直接将SD卡第二分区当做sd-ext,导致第二系统的数据被清除,建议在对第一系统清除数据之前将SD卡拔出,防止数据被清除。
MIUI for find7修改完后需要用第三方recovery刷,官方无验证版刷不进去。
通过这种方式安装的系统不能正常ota升级,请注意!!
安卓系统的启动是由内核中的ramdisk完成,而内核启动过程中由挂载点决定系统/用户/缓存数据的存放位置,因此通过修改挂载点,让它们指向手机内置存储或者SD卡上的system/data/cache分区,就可以实现双系统独立启动。(这也是本教程理论支持所有机型的原因,只是具体步骤需要变通一下)
2)给SD卡分区
先啰嗦一句,由于第二系统安装在SD卡上,所以对SD卡速度的要求是很高的,在SD卡上的系统不如内置存储上的系统流畅(但是也不错),因此选用的SD卡速度越快,系统越流畅,我这里选用的是c10的卡,实际体验不错。
1)备份SD卡上的数据,防止分区时数据意外丢失。
2) 系统除boot分区(内核所在)外至少还需要cache、data、system三个分区。分区具体步骤我就不阐述了,网上有很多教程和工具,以前玩过app2sd+的机油都清楚。下面讲一下分区数量和大小(以find7的cm11为例):
1)SD卡存储文件的分区 fat32 主分区 根据后面的大小决定
2)cache分区 ext3 主分区 我分了300MB,我的两个系统用的空间不足十兆,SD卡小可以从这里压缩空间
3)data分区 ext3 主分区 安装软件的分区,根据你的习惯自己制定,我分了1GB
4)system分区 ext3 主分区 安装系统的分区,根据你刷的系统大小自定,由于cm包比较小,我分700MB(已用389MB),colorOS find7至少需要1g(官方分区1.3g左右),MIUI需要700MB
注意:1)以上分区全都是主分区且都格式化为规定文件系统,其中ext3也可格式化为ext4。
2)后三个分区顺序可以调换,但是如果使用我提供的内核和刷机包,必须按照这个顺序分区。
3)分区是刷系统的基础,这步不能出问题。
4)大家可以按我提供的信息自定分区大小,但要有少量的剩余空间。
自测没问题,内核改好,在刷机包里自己提取。分好区后可以直接刷,但一定按上面的顺序分区!!!
三、修改刷机脚本,电脑操作。(以cm11-find7 2014-9-3 刷机包为例)
通常的刷机包都将系统刷写到内置存储的相关分区中,由刷机脚本控制,我们只需要修改刷机脚本,就可以将系统按我们的意愿刷写到SD卡相关分区中。
1)用压缩软件打开原版刷机包,解压出\META-INF\com\google\android\updater-script文件,用notepad++软件打开,没有的去下载一个,不要用记事本!!
2)如果文件开头没有以下几句卸载命令,则强烈建议加入,因为如果这些目录前面已经挂载了分区,就无法挂载SD卡上的分区了,后面的操作变成了针对内部存储分区,造成原有内部存储分区上数据丢失。
unmount("/data");
unmount("/cache");
unmount("/system");
3)看第八行
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/userdata", "/data");
这是挂载data的指令,我们要将
/dev/block/platform/msm_sdcc.1/by-name/userdata
改为SD卡中指定分区
/dev/block/mmcblk1p3
即改后的语句
mount("ext4", "EMMC", "/dev/block/mmcblk1p3", "/data");(注意后面的分号)
注意:
SD卡上第一二三四分区分别为
/dev/block/mmcblk1p1
/dev/block/mmcblk1p2
/dev/block/mmcblk1p3
/dev/block/mmcblk1p4
你要按照你给SD卡分区的顺序决定填什么,由于上面我打算将第三分区作为data,所以这里填
/dev/block/mmcblk1p3
继续往下读看到
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
这是挂载system分区的语句,我们要将原来的分区
/dev/block/platform/msm_sdcc.1/by-name/system
改为SD卡上的分区,我的是
/dev/block/mmcblk1p4
改后的语句是
mount("ext4", "EMMC", "/dev/block/mmcblk1p4", "/system");
继续往下
format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "0", "/system");
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
分别是格式化和挂载system的语句,都要将
/dev/block/platform/msm_sdcc.1/by-name/system
改为
/dev/block/mmcblk1p4
即
format("ext4", "EMMC", "/dev/block/mmcblk1p4", "0", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk1p4", "/system");
这几步的目的很简单,就是让刷机脚本对挂载在/system /cache /data的内部分区的操作改为对SD卡对应分区的操作。
在find7上,将刷机脚本中所有的
/dev/block/platform/msm_sdcc.1/by-name/userdata或/dev/block/mmcblk0p15
改为
/dev/block/mmcblk1p3
将所有
/dev/block/platform/msm_sdcc.1/by-name/system或/dev/block/mmcblk0p14
改为
/dev/block/mmcblk1p4
将所有
/dev/block/platform/msm_sdcc.1/by-name/cache或/dev/block/mmcblk0p17
改为
/dev/block/mmcblk1p2
其他机型不要按照这个改,但是原理相同。
有些刷机脚本会加入双清的语句,一定要看好,删除他们或改到SD卡对应分区。
4)将改后的文件保存,替换进刷机包中。
4)修改内核。
1)用压缩软件打开刷机包,解压出boot.img文件。
2)下载附件(会用厨房的跳过)Android Image Kitchen.zip,解压。(如果软件运行有问题,请配置Java环境,具体配置方法百度)
3)将boot.img放到解压出的Android Image Kitchen文件夹下,将boot.img拖到unpackimg.bat上,会自行解压出两个文件夹ramdisk和split_img,我们什么也不要做。
ramdisk中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc、init.spade.rc、init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。
4)双击进入ramdisk文件夹,里面我们看见许多文件和文件夹,我们要在这里修改挂载点。
5)用notepad++打开fstab.qcom文件,相信你进去一看就明白改什么了,
将
/dev/block/platform/msm_sdcc.1/by-name/system或/dev/block/mmcblk0p14
改为
/dev/block/mmcblk1p4
将所有
/dev/block/platform/msm_sdcc.1/by-name/cache或/dev/block/mmcblk0p17
改为
/dev/block/mmcblk1p2
将
/dev/block/platform/msm_sdcc.1/by-name/userdata或/dev/block/mmcblk0p15
改为
/dev/block/mmcblk1p3
6)将修改的文件保存。
7)检查ramdisk下所有文件,都用notepad++打开看看,确保没有其他遗漏,否则全部按照上面规则替换。对于
cm11-find7 2014-9-3 刷机包,上面修改足够。有些ROM是在init.spade.rc中修改挂载点。
8)双击repackimg.bat,程序自动打包内核为image-new.img,修改名称为boot.img,替换进刷机包里。
9)cleanup.bat是清除所有Android Image Kitchen文件夹下工作遗留下来的文件(除了原boot.img)
5)在刷机之前将你的手机root(论坛里有)、刷入无验证原版recovery或cwm recovery(在论坛里找)、安装re文件管理器、Gscript。
6)通过ADB或终端模拟器导出原内核,具体语句如下:
su
cat /dev/block/mmcblk0p7 > /sdcard/boot1.img
将在电脑上修改过的内核复制到/sdcard,命名为boot2.img
7)强烈建议在刷机之前将原系统备份,可以用cwm recovery的备份功能,将SD卡插入手机,进入recovery开始刷机(ROM包不签名也能正常用,你如果不放心也可以签名后使用),注意,千万不要双清!!!
8)正常刷入后重启,你就会进入SD卡系统,第一次开机比较慢,耐心等待,如果开机第一屏过不了,就失败了,请到fastboot刷入刚备份的boot1.img或从cwm recovery中恢复boot分区数据。如果刷机过不了,是刷机脚本的问题,或者是recovery问题,要检查刷机脚本,或者刷别的rec。
9)双系统的切换
1)现在你只能启动到sd卡系统了(因为刚刚刷入了修改后的内核),在sd卡的系统上,安装Gscript软件,点击菜单键,add script,新建脚本,自己起个名字,脚本内容如下(要勾选su):
flash_image /dev/block/mmcblk0p7 /sdcard/boot1.img
reboot
(再次提醒:只适用于find7,其他机型需要知道boot分区设备名)
2)执行脚本,就会正常重启到原系统,若想从原系统启动到SD卡系统,在原系统的Gscript软件中新建一个脚本,内容相似,只是将boot1.img改为boot2.img
注意:coloros本身不带flash_image,需要将我提供的附件flash_image.zip解压,里面有无后缀的flash_image(也可以cm的ROM中提取),将它复制到colorOS系统中的/system/bin下,权限改为:
读全勾上,写勾第一个,执行全勾上。然后可以在colorOS下执行脚本,切换到SD卡系统。
10)也可以将第二系统内核直接刷在recovery分区,这样按音量下键启动就会启动到第二系统,但选用这种方法需要再改刷机脚本,将在倒数几行的刷boot语句删去,然后用flash_image或fastboot将内核刷在revocery分区(find7是mcblk0p18),其实从本质来说boot和recovery都是启动分区,只是启动方式不同(按不按音量下键的区别)。呵呵,我曾经就尝试将内核刷在recovery分区,将recovery刷在boot分区,两个分区都能正常启动,如果刷机包里没有内核或recovery的话,还可以正常刷机!(只是启动系统有点怪,需要按音量下键)
个人不喜欢这种方法,总感觉去动recovery不安全,但是也没关系,我们还有fastboot,一旦出问题我们也不会变砖。再一个当我们需要刷机或系统升级时还要重刷recovery,不是太方便。
如果想在SD卡上重刷别的系统,需要在电脑上将cache和data重新格式化(相当于手动双清),system一般不用,刷机脚本里有格式化语句。
自测cm11-find7 2014-9-3每夜版刷机包问题:
NFC用不了
手电筒用不了,但是相机闪光灯正常
其他功能正常。也不知是不是我修改的问题。。。。
有些第三方recovery会在清除数据操作时自动判断是否有sd-ext分区并清除数据,它会直接将SD卡第二分区当做sd-ext,导致第二系统的数据被清除,建议在对第一系统清除数据之前将SD卡拔出,防止数据被清除。
MIUI for find7修改完后需要用第三方recovery刷,官方无验证版刷不进去。
通过这种方式安装的系统不能正常ota升级,请注意!!