2024年1月30日发(作者:暴萧玉)
教程开始:
1.你需要有一个CM的包
2.你需要有一个机型相差不大MIUI的包(CPU要一样的,其他的不行)
3.要将MIUI移植到CM,首先第一步就是解包,可以使用厨房解包,简单快捷
4.删除CM的ROM中的system下的app、framework、media文件夹
5.将MIUI中的文件夹移入CM的包中
6.下载Beyond Compare(文件比较工具)对比两个ROM中的bin目录下的文件,除了wlan,wl之类的文件,其余CM包中缺少的都必须加入
7.对比etc文件夹,内部文件夹不能碰!MIUI多余的文件夹进行加入,多余的文件加入
8.对比lib文件夹下的so驱动文件,MIUI包里多余的文件放进CM的lib下
9.对比xbin文件,CM的ROM中多余的果断的删除掉
,主要修改设备信息,没什么大问题
11.两个ROM的解包,替换MIUI的kernel文件进CM的,之后打包内核
12.打包出来的新内核替换进CM的ROM
13.打包ROM,签名,试刷,刷入则成功,刷不入,则失败
Rom移植的方向有 正向 和 逆向 之分:
正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。
这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者库文件的差异而导致成功率不够高。
逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。
这样做要复杂一些,需要准确两个包的差异,知道应该改哪里;
优点自然是不成则已,一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。
我这个教程以逆向法为例。
另外,Rom移植有风险,刷机测试需谨慎,如有本人操作不当导致出现任何问题,本人概不负责。
Rom移植5步法:
移植涉及的东西比较偏底层,所以在移植之前必须清楚目标机型的硬件配置,分区结
构。
这里的配置不是说主频多少、内存多少,这两个参数基本上不会影响移植的进行。
对于移植,最关键的因素是主板平台,通常采用同一系列的cpu的不同机型的Rom移植的成功率要高很多。
比如,U8800+和U8860均是高通8255处理器,虽然主频不一样,但它们却同属于同样的MSM7x30平台。
他们之间的互相移植,绝对要比与MSM7K平台的中兴V880互相移植来的容易得多。
至于为什么要弄清分区结构,会在下面讲到。
所以,5步法的第一步就是弄清楚自己目标机型的配置,从而选定一个合适的Rom源包。
同时,也必须找一个或多个目标机型上能用的合适的底包,尽量与源包同源或者属于同一Android版本。
例:我要移植JoyOS到华为荣耀U8860,在对比配置和分区结构后选择了华为U8800+的JoyOS包作为Rom源包。
由于JoyOS也是基于CM7修改的,所以我找的底包是U8860的CM7.
2,同时也把华为官方的B876拿出来作为参考。
为什么选U8800+,而不选U8800?
因为U+采用和荣耀一样的wifi芯片,接口均为eth0,而U8800的却是wlan0,自然用U+会省下不少麻烦。
2.第一步里你已经了解了两款机型配置的相同或相近之处,这一步则相反,我们需要找出二者的不同之处。
这样做的目的是为了知道我们到底需要改动什么来使一款机器的包能在另一款上使用。
首先,二者的底层硬件驱动会有所不同,我们通常都是直接替换内核来解决这个问题,即。
有时,还需要在system/bin文件夹里添加必要的程序和服务。
system/usr下的key打头的两个文件夹是按键配置相关的,通常也需要替换。
其次,二者的传感器通常会有所差别,system/lib/hw目录下的库文件都是传感器等相关的。
再次,system/etc文件夹下放置着许多的系统配置文件。
我们需要关注的文件或文件夹通常有 bluetooth、firmware、permissions、 wifi 四个文件夹(如果有的话)。
还有(G大脚本的配置文件)、media_(媒体配置文件)、(存储分区配置文件)。
最后,再检查一下system目录下是否还有vendor、wifi文件夹。
上述不同的地方,通常就先对比,如有不同,就需要我们用目标机型的替换之。
例:U8800+的平台主板一致,内核可以通用,无需替换。
bin下需要添加 akmd8975 蓝牙芯片相关服务,hdmid HDMI输出服务(非必要)等,这里要同时参考底包和官方包。
弄清这些程序或服务的名字的最好办法是解开关官方的,看注释。
system/lib/hw 下的传感器库文件有差异,删掉带u8800名称的,用来自u8860的CM的相应文件替换。
此时也可以参考一下官方包中此文件夹的内容。
二者 wifi 芯片一致,system下的vendor、wifi文件夹无需替换(这就是我为什么选U+,而不选U8800的原因)。
system/usr下的按键配置文件一致,无需替换。
etc下的bluetooth、firmware、wifi一致,无需替换。
文件不一致,U+是1G主频,荣耀是1.4,需要替换。
media_不一致,U+无前置摄像头,荣耀有,需要替换。
一致,二者均有内部存储分区和sd,而且挂载点也是一致的,无需替换。
以上操作,建议用 beyond compare 程序进行对比,能用文本编辑器打开的简单文件也可肉眼比对。
找出差异,如有不同,替换即可。
3.经过上面两步,该相近或者相同的地方我们已经利用了,不同的关键之处我们已经修改为相同了。
原则上应该差不多完成了,接下来要检查和修改的有两处。
, 机型改过来,其他必要的参数改过来,前提是你要熟稔这些参数是干什么的,否则暂时只改机型就够了。
刷机脚本 ,第一步我们说到要了解机子的分区结构,刷机脚本内含分区挂载和格式化的命令。
不同厂商的不同机型的分区结构是不一样的,而且还一般不能做修改。
买台电脑回家,我们可以自己任意分区,重装系统,手机却不能这样
如果分区结构不同,而刷机脚本不做修改,将不该改动的分区挂载并修改了的话,等着变砖吧。
我举个例子:
华为荣耀的分区结构是 /dev/block/mmcblk0p1为 .cust_backup 分区,在这里
/dev/block/mmcblk0p6为 cache 分区
/dev/block/mmcblk0p12为 system 分区
/dev/block/mmcblk0p13为 data 分区
如果你用文本编辑器(记事本也可以)打开system/etc下的,会看到
dev_mount emmc /HWUserData 14 /devices/platform/msm_sdcc.2/mmc_host/mmc0
内部SD卡
dev_mount sdcard /mnt/sdcard auto /devices/platform/msm_sdcc.4/mmc_host/mmc2
SD卡
其他分区暂不需要关注。
华为荣耀的分区和U8800+是一致的,二者Rom可以互刷而不会变砖,只是功能会不完善,所以才要移植。
三星i9100的分区结构则是
/dev/block/mmcblk0p9 为 system
dev/block/mmcblk0p7 为 cache
/dev/block/mmcblk0p10 为 data
假如你要把三星i9100的rom刷进荣耀(或者你移植i9100的rom而不修改刷机脚本)的话,
那么,惨了。。。
你把荣耀的/dev/block/mmcblk0p9分区给格式化,把rom刷写进去了,结果自然是变砖了。
这就是我在 这个帖子 里写下下面这段话的原因。
assert(getprop("") == "blade" || getprop("t") == "blade" ||
getprop("") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀。
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。
4.接下来就是测试了,一般如果内核与库文件、库文件与上层框架兼容的话,至少能开机。
如果卡第一屏了,分析原因,一点点排查,看脚本有无问题,看内核是否的确已经替换,看传感器等库文件是否合理替换...
失败并不可拍,怕的就是没有正视失败,重头再来的勇气。
5.如果能成功进入系统,最后就是要一点点地完善了。
如声音不正常那个,可更换system/lib下声音相关的库文件;
相机不正常,同样是这个目录下的有关文件;
这个过程要遵循单一变量原则,一次性尽可能只改动你确定的一点点,否则你无法确定到底是哪出修改发挥了作用。
遇见最多的自然是wifi、蓝牙、相机、信号等问题。
这时要善于利用手边的rom包,尤其是别人已经在本机型或相近机型移植成功的包。
看看他们是怎么修改的,或者能联系到Rom作者本人,向他们咨询那是最好的。
能开机进入系统是移植成功的第一步,真正好需要完善的东西是上层的应用,这是后话。
例如:JoyOS没做过500万以上像素的机型,所以,移植过来的相机的参数设置最大只能500万,囧。。。
这时只好用cm或者mq的的相机替换了。
2024年1月30日发(作者:暴萧玉)
教程开始:
1.你需要有一个CM的包
2.你需要有一个机型相差不大MIUI的包(CPU要一样的,其他的不行)
3.要将MIUI移植到CM,首先第一步就是解包,可以使用厨房解包,简单快捷
4.删除CM的ROM中的system下的app、framework、media文件夹
5.将MIUI中的文件夹移入CM的包中
6.下载Beyond Compare(文件比较工具)对比两个ROM中的bin目录下的文件,除了wlan,wl之类的文件,其余CM包中缺少的都必须加入
7.对比etc文件夹,内部文件夹不能碰!MIUI多余的文件夹进行加入,多余的文件加入
8.对比lib文件夹下的so驱动文件,MIUI包里多余的文件放进CM的lib下
9.对比xbin文件,CM的ROM中多余的果断的删除掉
,主要修改设备信息,没什么大问题
11.两个ROM的解包,替换MIUI的kernel文件进CM的,之后打包内核
12.打包出来的新内核替换进CM的ROM
13.打包ROM,签名,试刷,刷入则成功,刷不入,则失败
Rom移植的方向有 正向 和 逆向 之分:
正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。
这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者库文件的差异而导致成功率不够高。
逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。
这样做要复杂一些,需要准确两个包的差异,知道应该改哪里;
优点自然是不成则已,一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。
我这个教程以逆向法为例。
另外,Rom移植有风险,刷机测试需谨慎,如有本人操作不当导致出现任何问题,本人概不负责。
Rom移植5步法:
移植涉及的东西比较偏底层,所以在移植之前必须清楚目标机型的硬件配置,分区结
构。
这里的配置不是说主频多少、内存多少,这两个参数基本上不会影响移植的进行。
对于移植,最关键的因素是主板平台,通常采用同一系列的cpu的不同机型的Rom移植的成功率要高很多。
比如,U8800+和U8860均是高通8255处理器,虽然主频不一样,但它们却同属于同样的MSM7x30平台。
他们之间的互相移植,绝对要比与MSM7K平台的中兴V880互相移植来的容易得多。
至于为什么要弄清分区结构,会在下面讲到。
所以,5步法的第一步就是弄清楚自己目标机型的配置,从而选定一个合适的Rom源包。
同时,也必须找一个或多个目标机型上能用的合适的底包,尽量与源包同源或者属于同一Android版本。
例:我要移植JoyOS到华为荣耀U8860,在对比配置和分区结构后选择了华为U8800+的JoyOS包作为Rom源包。
由于JoyOS也是基于CM7修改的,所以我找的底包是U8860的CM7.
2,同时也把华为官方的B876拿出来作为参考。
为什么选U8800+,而不选U8800?
因为U+采用和荣耀一样的wifi芯片,接口均为eth0,而U8800的却是wlan0,自然用U+会省下不少麻烦。
2.第一步里你已经了解了两款机型配置的相同或相近之处,这一步则相反,我们需要找出二者的不同之处。
这样做的目的是为了知道我们到底需要改动什么来使一款机器的包能在另一款上使用。
首先,二者的底层硬件驱动会有所不同,我们通常都是直接替换内核来解决这个问题,即。
有时,还需要在system/bin文件夹里添加必要的程序和服务。
system/usr下的key打头的两个文件夹是按键配置相关的,通常也需要替换。
其次,二者的传感器通常会有所差别,system/lib/hw目录下的库文件都是传感器等相关的。
再次,system/etc文件夹下放置着许多的系统配置文件。
我们需要关注的文件或文件夹通常有 bluetooth、firmware、permissions、 wifi 四个文件夹(如果有的话)。
还有(G大脚本的配置文件)、media_(媒体配置文件)、(存储分区配置文件)。
最后,再检查一下system目录下是否还有vendor、wifi文件夹。
上述不同的地方,通常就先对比,如有不同,就需要我们用目标机型的替换之。
例:U8800+的平台主板一致,内核可以通用,无需替换。
bin下需要添加 akmd8975 蓝牙芯片相关服务,hdmid HDMI输出服务(非必要)等,这里要同时参考底包和官方包。
弄清这些程序或服务的名字的最好办法是解开关官方的,看注释。
system/lib/hw 下的传感器库文件有差异,删掉带u8800名称的,用来自u8860的CM的相应文件替换。
此时也可以参考一下官方包中此文件夹的内容。
二者 wifi 芯片一致,system下的vendor、wifi文件夹无需替换(这就是我为什么选U+,而不选U8800的原因)。
system/usr下的按键配置文件一致,无需替换。
etc下的bluetooth、firmware、wifi一致,无需替换。
文件不一致,U+是1G主频,荣耀是1.4,需要替换。
media_不一致,U+无前置摄像头,荣耀有,需要替换。
一致,二者均有内部存储分区和sd,而且挂载点也是一致的,无需替换。
以上操作,建议用 beyond compare 程序进行对比,能用文本编辑器打开的简单文件也可肉眼比对。
找出差异,如有不同,替换即可。
3.经过上面两步,该相近或者相同的地方我们已经利用了,不同的关键之处我们已经修改为相同了。
原则上应该差不多完成了,接下来要检查和修改的有两处。
, 机型改过来,其他必要的参数改过来,前提是你要熟稔这些参数是干什么的,否则暂时只改机型就够了。
刷机脚本 ,第一步我们说到要了解机子的分区结构,刷机脚本内含分区挂载和格式化的命令。
不同厂商的不同机型的分区结构是不一样的,而且还一般不能做修改。
买台电脑回家,我们可以自己任意分区,重装系统,手机却不能这样
如果分区结构不同,而刷机脚本不做修改,将不该改动的分区挂载并修改了的话,等着变砖吧。
我举个例子:
华为荣耀的分区结构是 /dev/block/mmcblk0p1为 .cust_backup 分区,在这里
/dev/block/mmcblk0p6为 cache 分区
/dev/block/mmcblk0p12为 system 分区
/dev/block/mmcblk0p13为 data 分区
如果你用文本编辑器(记事本也可以)打开system/etc下的,会看到
dev_mount emmc /HWUserData 14 /devices/platform/msm_sdcc.2/mmc_host/mmc0
内部SD卡
dev_mount sdcard /mnt/sdcard auto /devices/platform/msm_sdcc.4/mmc_host/mmc2
SD卡
其他分区暂不需要关注。
华为荣耀的分区和U8800+是一致的,二者Rom可以互刷而不会变砖,只是功能会不完善,所以才要移植。
三星i9100的分区结构则是
/dev/block/mmcblk0p9 为 system
dev/block/mmcblk0p7 为 cache
/dev/block/mmcblk0p10 为 data
假如你要把三星i9100的rom刷进荣耀(或者你移植i9100的rom而不修改刷机脚本)的话,
那么,惨了。。。
你把荣耀的/dev/block/mmcblk0p9分区给格式化,把rom刷写进去了,结果自然是变砖了。
这就是我在 这个帖子 里写下下面这段话的原因。
assert(getprop("") == "blade" || getprop("t") == "blade" ||
getprop("") == "blade");
获取手机信息,验证你的手机到底是不是V880,否则将无法刷入。
这是为了防止让一些其他机型的小白误刷咱们V880的Rom从而发生变砖的惨剧。
不加这行的Rom所有机型都可以刷入,建议Rom同行或者补丁制作者们一定要加上,人性化关怀。
当然,你不加这些,但在补丁或Rom发布时仔细说明适用机型的话也是可以的。
4.接下来就是测试了,一般如果内核与库文件、库文件与上层框架兼容的话,至少能开机。
如果卡第一屏了,分析原因,一点点排查,看脚本有无问题,看内核是否的确已经替换,看传感器等库文件是否合理替换...
失败并不可拍,怕的就是没有正视失败,重头再来的勇气。
5.如果能成功进入系统,最后就是要一点点地完善了。
如声音不正常那个,可更换system/lib下声音相关的库文件;
相机不正常,同样是这个目录下的有关文件;
这个过程要遵循单一变量原则,一次性尽可能只改动你确定的一点点,否则你无法确定到底是哪出修改发挥了作用。
遇见最多的自然是wifi、蓝牙、相机、信号等问题。
这时要善于利用手边的rom包,尤其是别人已经在本机型或相近机型移植成功的包。
看看他们是怎么修改的,或者能联系到Rom作者本人,向他们咨询那是最好的。
能开机进入系统是移植成功的第一步,真正好需要完善的东西是上层的应用,这是后话。
例如:JoyOS没做过500万以上像素的机型,所以,移植过来的相机的参数设置最大只能500万,囧。。。
这时只好用cm或者mq的的相机替换了。