① 安卓如何移植同CPU的刷机包
以小米为例说明安卓手机如何移植刷机包:
首先先清楚的了解本机型的硬件配置,也就是主板平台方案,分辨率等。
通常同系列的CPU不同机型的ROM拼包移植成功率较高。
挑选合适的底包和移植包,底包和移植包尽量同源。
找出底包和移植包两者的不同之处:目的是了解需要改动什么才可以让别的机型ROM能在自己的机型上面使用,在底包、原生包、移植包上进行交叉对比。
卡刷ROM条件:
机器必须先ROOT
必须有支持的第三方Recovery,没有第三方Recovery的也就只能反向从机器中进行提取并移植了
支持卡刷的ROM,对于小白来说,卡刷ROM也是最方便的
移植思路及步骤:
底层硬件驱动不同(内核).
删除移植包里面的boot.img(内核)和systemlib下的moles文件夹.替换成本机型的内核文件
按键配置不同(键值).
将移植包systemusr下的keychars和keylayout两个文件夹替换成本机型的
传感器不同(驱动类)
将移植包systemlib下的hw文件夹替换成本机型的
系统配置文件不同(驱动类)
将移植包systemetc下的bluetooth、firmware、permissions、wifi四个文件夹替换成本机型的(如果有);
其中firmware中的modem.img是负责通信的基带文件!moles中的文件是开机底层引导驱动,只要这两处替换成KIS1的,那么这个ROM一般都能正常启动进入系统,且有信号!
还有enhanced.conf、media_profiles.xml(多媒体配置文件,即视音频配置文件)、vold.fstab(存储分区配置文件);
最后注意system下是否有vendor和wifi文件夹,可以直接用文件对比器进行对比修改;
修改build.prop(属性)
把自定义的内容起进行直接修改,例如:机型、日期、版本号等.参数如果懂可以修改,如果不懂,建议不动它,只修机型、日期、版本号等;
修改updater-script(刷机脚本)
不同机型的ROM,刷机脚本里包含的分区挂载和格式化命令都有所差异,如果不做修改直接使用,把本不该改动的分区挂载并修改了的话,手机将存在变砖风险,前提需了解自己机器的分区结构
脚本开头有验证机型,请删除,例如assert(getprop(“ro.proct.device”)== “**x” || getprop(“ro.proct.proct”) ==
“**xx”)
这是验证机型的代码。没有则无视,也可以修改成自己的机器名称。ROM打包测试;打包测试了,一般如果内核与库文件、库文件与上层框架兼容的话,刷机后至少能开机。
如果卡第一屏了,分析原因,一点点排查,主要看updater-script脚本有无问题,看内核是否已经替换,看传感器等库文件是否合理替换等;
后续修复BUG工作,主要放在etc和lib、libhw文件夹里进行搜索修改。
音频audio,相机camera,感应器sensor,灯light。无线wifi,蓝牙bluetooth….哪项不正常工作,搜索带有这些英文的KIS1驱动,替换进去即可!
② 如何移植android 源代码到自己的手机上
成功将android2.1移植到手机上,需经过以下几个步骤:
一,准备好android2.1源码编译环境以版及手机USB调试环境。权
二,将手机上硬件驱动程序以及相关的配置文件通过ADB命令保存好。
三,针对不同的手机机型,制作相应的vendor配置文件。
四,编译源码。
五,通过手机提供的bootloader刷机或者直接以recovery的方式更新ROM。
在以上五个步骤中,其中最难处理的便是第2个步骤,这个步骤需要熟悉每个手机机型的硬件参数,并且能够在手机上找到相关的驱动程序以及了解他们如何配置。而CyanogenMod团队公布的源码当中,己经将相关的工作做好了,
③ 怎样移植rom
下面说说我的移植方法。因为经验不足。所以方法可能不是很好。
希望有更好方法的朋友可以分享经验。
(1)下载自己设备的官方ROM(假设文件名是myrom.img)和想移植的第三方自定义ROM(假设文件名是newrom.img)
(2)解包。
在网上找到unimg工具。把unimg和ROM文件myrom.img和newrom.img都放在同一个目录下(假设是d:\rom目录)。把myrom.img和newrom.img文件分别拖到unimg上就可以开始解包。解包后,可以得到一个myrom.img.mp和newrom.img.mp的目录。
在d:\rom目录下新建两个目录,myrom和b。把myrom.img.mp目录中的RFSFAT16_BOOT_00000000000文件复制到myrom目录下。把newrom.img.mp目录中的RFSFAT16_BOOT_00000000000复制到newrom目录下。
(3)更新boot分区文件
在网上找bootimg工具。也放到d:\rom目录下。然后打开命令行窗口。依次输入如下命令
d:
cd \rom\myrom
..\bootimg.exe --unpack-bootimg RFSFAT16_BOOT_00000000000
(此命令会输出一些重要的信息,请一定要记下来,等一下打包boot文件时需要用到)
..\bootimg.exe --unpack-ramdisk
cd ..\newrom
..\bootimg.exe --unpack-bootimg RFSFAT16_BOOT_00000000000
..\bootimg.exe --unpack-ramdisk
这样就可以看到在myrom目录和newrom目录下分别解包出如下文件
kernel :Linux内核文件,这个文件不同设备有不同。所以为什么我们直接刷别人的ROM可能会出现白屏问题。
initrd目录 :这其实就是系统的根目录
cpiolist.txt :记录着initrd目录中每个文件的权限和用户信息,这文件是为了等一下打包用的。我们不用管它。
下面,把myrom目录和newrom目录中的initrd目录下的init.sun4i.rc目录分别打开(请不要用记事本或写字板打开这个文件,因为这文件是UNIX格式,如果你用记事本或写字板打开,保存后会自动变成DOS格式,会破坏文件格式)
找到加载驱动的地方,如下图。把myrom目录中init.sun4i.rc文件中对应的内容,替换掉newrom目录中init.sun4i.rc的对应内容。
并记下myrom文件中要使用的驱动的文件名(等一下要更新system分区时需要用到)。
################################
# insmod vibrator
insmod /system/vendor/moles/sun4i-vibrator.ko (这是振动器驱动,如果不想使用振动器,可禁用这行)
chmod 777 /sys/class/timed_output/sun4i-vibrator/enable (如果禁用了振动器驱动,也要同时禁用这行)
#insmod key & tp driver
insmod /system/vendor/moles/goodix_touch.ko (这就是触控驱动,通常替换这个驱动已经足够)
insmod /system/vendor/moles/sun4i-keyboard.ko
# insmod mali driver
insmod /system/vendor/moles/ump.ko
insmod /system/vendor/moles/mali.ko
#csi mole
insmod /system/vendor/moles/videobuf-core.ko
insmod /system/vendor/moles/videobuf-dma-contig.ko
insmod /system/vendor/moles/gt2005.ko
insmod /system/vendor/moles/sun4i_csi0.ko
################################
把更新后的newrom目录中的init.sun4i.rc文件保存到myrom目录中,替换myrom目录的对应的文件。
下面开始重新打包boot分区,请打开命令行窗口,依次输入如下内容:
d:
cd \rom\myrom
..\bootimg.exe --repack-ramdisk
..\bootimg.exe --repack-bootimg 0x40000000 "console=ttyS0,115200 rw init=/init loglevel=8" 2048 2048
(repack-bootimg后面的一大堆参数是根据之前unpack-bootimg时得到,请大家一定要改为自己设备对应的参数,否则无法启动)
打包成功后,得到boot.img文件。把boot.img文件改名为RFSFAT16_BOOT_00000000000,并复制到myrom.img.mp目录下,替换原来的文件。
(4) 更新system分区,如下操作需要在Ubuntu下完成。
把myrom.img.mp和newrom.img.mp中的RFSFAT16_SYSTEM_000000000文件复制到Ubuntu系统下的/root目录,分别改名为system-myrom和system-newrom,
上网下载ext4_utils工具,并编译出simg2img,mkuserimg.sh,make_ext4fs 三个程序。并复制到/root目录下。
然后依次输入如下命令:
cd /root
./simg2img system-myrom system-myrom.img
./simg2img system-newrom system-newrom.img
mkdir /mnt/img /mnt/img2
mount -o loop system-newrom.img /mnt/img
mount -o loop system-myrom.img /mnt/img2
这时候,你就可以看到两个ROM的/system分区的内容。下面我们可以把官方ROM中的驱动复制到新ROM中。
cd /mnt/img/vendor/moles
cp -p /mnt/img2/vendor/moles/需要的文件.ko ./
哪些文件要复制过来,就要看(3)中你的设备要用哪些驱动了。
#########################
下面的文件是否需要替换,就要看你的设备与新ROM的区别大不大了,我的领先版2就没有替换这些文件。
/mnt/img/lib/hw/*.*
/mnt/img/lib/libhardware*.*
#########################
把驱动替换完毕后,就开始打包。
cd /root/
./mkuserimg.sh -s /mnt/img RFSFAT16_SYSTEM_000000000 ext4 system 256M
最后一个参数是说把system打包成一个256MB的分区镜像,如果你的system大于256MB的话,程序执行会出错,试试改为512M。
把RFSFAT16_SYSTEM_000000000复制回到windows中,替换掉myrom.img.mp目录中对应的文件。
最后一步,打包。打开命令行
d:
cd \rom
verifycalc myrom.img.mp\RFSFAT16_SYSTEM_000000000 myrom.img.mp\RFSFAT16_VSYSTEMFS_000000
verifycalc myrom.img.mp\RFSFAT16_BOOT_00000000000 myrom.img.mp\RFSFAT16_VBOOT_0000000000
unimg -e myrom.img
打包后的myrom.img 就可以用livesuite 刷机了。
成功启动后,如果看到显示不正常的话,可能因为移植的ROM与我们设备的分辨率不一样。比如我把极光ROM移植到领先版2后就遇到这个问题。
我是通过添加如下设置到新ROM的/system/build.prop文件来解决的。
################
ro.sf.lcd_density=125
################
125这个值是我试出来,在领先版2下可以正常显示的。你可以自己改成喜欢的数值(在100-200期间改)。
④ 安卓ROM制作需要什么样的步骤如何制作一个安卓刷机包求安卓刷机包制作教程
通常制作一个安卓刷机包需要经过:解包,ROM精简,ROM修改,ROM授权,ROM打包等一系列制作步骤
具体教程如下:
【ROM解包】点击ROM制作工具中间的“选择线上ROM...或选择本地ROM...”,选择ROM后工具开始自动解包。
以上就是制作ROM的全部过程!