housetimer吧 关注:38贴子:1,927

MTK芯片手机通用移植教程 分享推荐

只看楼主收藏回复

【本教程只适用于MTK芯片手机】
理论上只能同安卓版本相互移植,例如4.1移植4.1,4.2移植4.2,不同版本的请自测。


来自Android客户端1楼2016-03-25 22:28回复
    教程开始。
    建议选取分辨率相近的机器,避免部分错位和不开机情况。
    第一部分:同平台移植(例如MTK65××相互移植)
    1.把官方ROM和要移植的ROM解压。
    2.从你的官方系统中提取以下文件(建议整合一下,方便以后更多次的移植)
    需要替换的文件夹有:
    system/vendor/lib/
    system/usr/keychars和keylayout两个文件夹(触屏和按键配置)
    system/lib/modules/【常规】
    system/lib/hw/(传感器)
    system/lib/cam开头的.so(这里呢,我的习惯是先替换libcameracustom.so,如果相机出了问题再替换其它的)
    system/lib/audio开头的.so(这里通常我也只替换libaudio.primary.default.so)
    system/etc/firmware/(基带)【必须】
    system/etc/mddb/
    system/etc/vold.fstab(挂载分区位置,自行调换)
    system/etc/bluetooth(如出现蓝牙问题请替换)
    system/etc/wifi(wifi问题请替换)


    来自Android客户端2楼2016-03-25 22:29
    回复
      二、刷机脚本的修改
      用notepad++打开要移植的ROM中
      META-INF/google/android/updater-script
      ①如果脚本开头有验证机型
      例如assert(getprop(“ro.product.device”)== “**x” || getprop(“ro.product.product”) ==
      “**xx”)
      这是验证机型的代码。没有则无视,有则删除也可以修改成自己的机器名称。
      ②找到format(".......
      只需要修mmcblk0p#这里的#是一个数字,修改这个数字为跟官方包相同的
      mount("...这句也相同
      例如:
      这是要移植的ROM中的刷机脚本的部分内容:
      format("ext4", "EMMC", "/dev/block/mmcblk0p5", "0", "/system");
      mount("ext4", "EMMC", "/dev/block/mmcblk0p5", "/system");
      这是官方包中刷机脚本的部分内容:
      format("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");
      mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");
      那么,你只需把要移植的ROM中的刷机脚本中的mmcblk0p5改为mmcblk0p3
      注意,如果没有基础,请不要直接把官方ROM中刷机脚本的整个内容替换到要移植的ROM的脚本中去


      来自Android客户端3楼2016-03-25 22:29
      回复
        第二部分、跨CPU平台移植 以MT6582移植MT6572为例
        大致步骤差不多,只是还需要注意更多的细节
        1.跟刚才一样的提取文件步骤
        2.打开移植包的build.prop
        找到ro.mediatek.platform=MT65xx
        修改这个MT65xx
        再找到ril.telephony.mode=# 这里#为一个数字
        把这个数字改为官方包里的
        至于机型、版本请酌情处理。
        3.打开刷机脚本
        第一步:修改分区,很上面同平台移植的一样,不在啰嗦。
        第二步:
        在"set_perm"这一大段找到
        set_perm(0, 0, 0644, "/system/vendor/lib/hw/gralloc.mt65xx.so");
        修改这里的mt65xx


        来自Android客户端6楼2016-03-25 22:32
        回复
          4.移植内核(这里可以用BeyondCompare直接对比修改)
          用boot解包工具把官方boot和要移植的boot解包
          这里以6572移植6589为例

          打开要移植的boot解包后的boot.img-ramdisk,然后从中复制所有文件到官方boot中的boot.img-ramdisk 文件夹中。如果文件存在就跳过,相当于把要移植包boot中多余的文件复制到官方中去
          打开官方boot.img-ramdisk文件夹 中的init.rc
          ①.修改default.prop,参照要移植的boot改
          ②.
          #Create Chip Property
          on early_property:ro.hardware=mt6582
          setprop ro.mtk.hardware mt6589
          on early_property:ro.hardware=mt6589
          setprop ro.mtk.hardware mt6589
          修改后面两个mt6589
          例如,我的cpu是MT6572,那么就这样改 :
          #Create Chip Property
          on early_property:ro.hardware=mt6582
          setprop ro.mtk.hardware mt6572
          on early_property:ro.hardware=mt6589
          setprop ro.mtk.hardware mt6572


          来自Android客户端7楼2016-03-25 22:33
          回复
            明天再更


            来自Android客户端9楼2016-03-25 22:36
            回复
              闪屏怎么修复


              IP属地:广东来自Android客户端10楼2016-03-25 23:32
              收起回复
                这贴可以删除不?@HouseTimeR


                IP属地:安徽来自Android客户端12楼2016-03-26 09:08
                收起回复
                  忘更新了


                  来自Android客户端13楼2016-03-27 06:31
                  回复
                    第二步是修改init.rc里的启动项
                    以移植LewaROM为例(MIUI大同小异,只是后面的lewa-framework.jar是miui-framework.jar而已,其它第三方ROM也差不多,具体看第三方ROM的启动项后面)
                    复制以下代码(不放心的可以解开要移植包的内核查看)
                    :/system/framework/lewa-framwork.jar
                    把这一句放到每一段的最后,注意不要漏了前面的冒号
                    修改好的示例:
                    on early_property:ro.build.type=user
                    write /proc/bootprof "INIT: user build setting"
                    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/secondary-framework.jar:/system/framework/CustomProperties.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-op.jar:/system/framework/lewa-framework.jar
                    on early_property:ro.build.type=userdebug
                    write /proc/bootprof "INIT: userdebug build setting"
                    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/secondary-framework.jar:/system/framework/CustomProperties.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-op.jar
                    on early_property:ro.build.type=eng
                    write /proc/bootprof "INIT: eng build setting"
                    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/secondary-framework.jar:/system/framework/CustomProperties.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-op.jar:/system/framework/emma.jar:/system/framework/lewa-framework.jar


                    14楼2016-03-27 08:23
                    回复
                      超厉害。


                      IP属地:安徽来自Android客户端16楼2016-03-27 08:25
                      收起回复
                        修复Bug篇:
                        1、无信号、未知基带、无SIM卡如何修复?
                        替换以下文件为官方:
                        \system\bin\ccci_fsd
                        \system\bin\ccci_mdinit、
                        \system\bin\gsm0710muxd、
                        \system\bin\netd、
                        \system\bin\netdiag
                        \system\bin\p2p_supplicant
                        \system\bin\wpa_supplicant
                        \system\lib/mtk-ril.so
                        2、相机问题,官方提取以下文件替换:
                        \system\lib/hw/camera.default.so
                        \system\lib\libcamalgo.so
                        \system\lib\libmhaldrv.so
                        \system\lib\libcamera_client.so
                        \system\lib\libcameracustom.so
                        \system\lib\libcameraprofile.so
                        \system\lib\libcameraservice.so
                        \system\lib\libmhal***.so(搜索libmhal有多少换多少)
                        部分顽固问题需要修改boot中的init.rc,找到其中的camera部分,对比修改就行了
                        3、GPS问题,替换:
                        /system/xbin/libmnlp


                        17楼2016-03-27 08:25
                        回复
                          4、蓝牙问题,替换:
                          /system/lib/libbluetooth_mtk.so
                          /system/lib/libbluetoothem_mtk.so
                          5、音频问题,替换:
                          \system\lib\libaudio.a2dp.default.so
                          \system\lib\libaudio.primary.default.so
                          \system\lib\libaudiocompensationfilter.so
                          \system\lib\libaudiocustparam.so
                          \system\lib\libaudioeffect_jni.so
                          \system\lib\libaudioflinger.so
                          \system\lib\libaudiosetting.so
                          6、收音机问题,替换:
                          \system\lib\libfmar1000.so
                          \system\lib\libfmcust.so
                          \system\lib\libfmjni.so
                          \system\lib\libfmmt6616.so
                          \system\lib\libfmmt6620.so
                          \system\lib\libfmmt6626.so
                          \system\lib\libfmmt6628.so
                          7、修复wifi和radio:
                          打开build.prop,找到以下内容(可以参考官方包中的改):
                          MT6572不需要修改
                          找到这句:
                          fmradio.driver.chip=1
                          如果你的cpu是MT6628,那么把1改为3
                          然后找到:
                          mediatek.wlan.chip=MT6620
                          修改这里的MT6620,例如我的是mt6628,那么改为: mediatek.wlan.chip=MT6628
                          再找到:
                          mediatek.wlan.module.postfix=_mt6620
                          修改其中的mt6620例如我的是mt6628,那么改为: mediatek.wlan.module.postfix=_mt6628)
                          然后打开刷机脚本,找到下面内容,没找到自己添加
                          symlink("wlan_mt6620.ko", "/system/lib/modules/wlan.ko")
                          同样修改这里的mt6620
                          然后替换以下文件:
                          /system/bin/p2p_supplicant
                          /system/bin/wpa_supplicant /system/lib/libwpa_client.so
                          /system/lib/libhardware_legacy.so
                          /system/lib/有wifi或wlan字样的的so文件
                          8、内置储存和外置储存反了
                          替换/system/etc/vold.fstab为官方
                          9、usb不能挂载储存卡
                          替换/system/bin/vold为官方
                          10、传感类方面
                          替换/system/hw下所有文件和
                          /system/lib/libsensorservice.so
                          10.关机充电动画错位
                          替换system/bin/ipod
                          11.只读到内置存储或者外置SD卡
                          反编译framework-res.apk(不会的请自行百度教程)
                          修改/res/xml/storage-list.xml,参照官方ROM里相同文件修改
                          [这一部分有很多解决办法,这里仅提供一种]
                          12.图标太大或太小
                          修改build.prop
                          ro.sf.lcd_density=xxx
                          后面的xxx是数字,根据你机器的参数修改
                          13.删除虚拟按键
                          qemu.hw.mainkey=1


                          18楼2016-03-27 08:26
                          回复
                            @houseTimeR
                            小吧


                            19楼2016-03-27 08:29
                            回复
                              @houseTimeR


                              20楼2016-03-27 08:30
                              回复