该楼层疑似违规已被系统折叠隐藏此楼查看此楼
众所周知,Windows系统的电脑可以实现双系统,Mac的苹果电脑也可以实现双系统,那么手机是否也可以实现双系统呢?答案是肯定的,当然Windows跟Mac实现双系统的原理不同,这里不多做解释了,可自行百度。
我们可以先来了解一下安卓系统的手机是如何启动的。安卓系统是一种基于Linux的系统,开机的时候会先启动Linux内核,再由Linux内核负责加载剩余文件。也就说,Linux内核告诉了手机需要加载什么文件及其顺序进RAM,那么双系统就是加载进了不同的文件咯。那么问题来了?怎么修改内核让它去加载另一个系统的文件?客官,别急,先来看看安卓手机系统的的分区。
手机都内置了一块Flash闪存芯片,这块闪存会被分为若干个分区。主要有以下几个分区。bootloader分区,用来放置bootloader文件的。boot分区,用来放置内核文件的。recovery分区,用来放置恢复系统文件的。system分区用来放置系统文件。userdata分区用来放置系统产生的文件。主要介绍上面几个分区,还有一些分区放基带文件啊,fastboot的文件啊,各种分区,我们可以不必去了解。而每一个分区都有它自己的编号,相当我们的座位号。内核就是告诉手机要加载哪一个分区的文件,即系统文件,还告诉了系统,待会各个分区对应的功能。
了解完上面的东西之后我们可以动手了,我们需要吧内核文件修改,让内核去加载另一个系统分区的文件,还有吧userdata分区映射到另外一个分区上面。我们还要多弄几个分区出来,在手机内置的Flash重装分区显得太麻烦,我们可以考虑用内存卡。玩过data2ext的人都知道,内存卡是可以被识别并挂载的,可以挂载为userdata也可以挂载为system咯。不过由于Linux本身不支持FAT32之类的文件系统,我们需要把内存卡分区,两个ext4格式的分区,作为system和userdata分区,剩下部分作为内存使用,FAT32就好了。做好上面这些工作之后,多弄出来两个分区我们有了,接下的工作就是让内核把内存卡的两个分区一个识别为系统分区,一个识别为用户数据分区。
我们拿一个普通的卡刷包,可以发现,里面有一个boot.img文件,这个文件会通过recovery刷入boot分区的,就是我们的内核文件。我们就来修改这个文件。首先,我们要用到特殊的工具来解开它,Linux下面很方便,但是大多数用户还是用Windows的。解开这个文件的工具有很多种,比如安卓厨房,工具自行百度=_=解开后我们主要修改init.rc之类的文件,因为init是Linux第一个启动的。由于不同平台,不同厂家,修改的文件会有不同,大家可以通过看代码识别要修改哪一些文件。如果找到文件的时候,只需要把原来的挂载点改为内存卡上面的挂载点就可以了。内存卡如果三个分区的话,第一个分区为mmcblk1p1,第二个分区为mmcblk1p2。然后把这个分区替换原有的分区就可以了。例如原有的挂载代码为
mount ext4 /dev/block/mmcblk0p12 /system wait ro
mount ext4 /dev/block/mmcblk0p13 /data wait noatime nosuid nodev nomblk_io_submit,errors=panic
mount ext4 /dev/block/mmcblk0p14 /cache wait noatime nosuid nodev nomblk_io_submit,errors=panic
则吧mmcblk0p12改为mmcblk1p2或者其他,根据你的分区来改。
然后我们就把内核重装打包,通过recovery或者其他其他工具刷入,替换原来的boot。再者还要修改刷机包的脚本,使其不再刷入原来的system分区,刷入内存卡上面的分区,可参照上面修改方法。
本文只作为参考,不同机器均不同。而且我的知识有限,有错误遗漏之处还望指出。