rom源码编译-编译Android源代码制作ROM并烧录。

介绍

Android源码编译完成后,会在out/target/product/generic下生成三个镜像文件:ramdisk.img、system.img、userdata.img及其对应的目录树root、system、data。 ramdisk.img是根文件系统,system.img包括主包、库等文件,userdata.img包括一些用户数据,android加载这3个镜像文件后会将system和userdata加载到ramdisk文件系统中和数据目录

三个镜像文件及其四个目录树的生成关系是我们ROM制作的基础,下面会详细介绍。

内存盘.img

Ramdisk镜像使用cpio打包并使用gzip压缩。 用文件验证:

#文件ramdisk.img

输出:

#ramdisk.img:gzip压缩数据,来自Unix

为了方便说明问题,我们将 ramdisk.img 复制到另一个目录,然后按照以下步骤将 ramdisk.img 恢复到目录树:

#mvramdisk.imgramdisk.img.gz

#gunzipramdisk.img.gz

#mkdirramdisk

#cdramdisk

#cpio–i–F ../ramdisk.img

这样就得到了一个完整的ramdisk目录。 与out/target/product/generic/root进行比较后,我们发现它们的内容是相同的。

通过执行以下操作,我们可以从目录树中重新生成ramdisk镜像

#cdramdisk

rom源码编译-编译Android源代码制作ROM并烧录。

#find.|cpio-o-Hnewc|gzip>../ramdisk-new.img

系统.img&用户数据.img

这两张图片属于yaffs2文件格式,生成方法是一样的。 我们以system.img为例来说明。

System.img>>系统目录树

所需工具unyaffs,下载地址

#mkdirsystem

#cd系统

#unyaffs ../system.img

系统目录树>>system.img

需要的工具mkyaffs2image,该工具会在Android源码编译后生成,在out/host/linux-x86/bin目录下。

命令格式:

进入mkyaffs2image所在目录,设置执行权限chmoda+x./mkyaffs2image

#~/Code/cbin/mkyaffs2image~/Code/system~/Code/system_new.img

理解以上方法的意义在于,我们可以对镜像文件图像进行更改和定制,以满足自己的需求。

如何制作Android ROM 网上有很多制作Android ROM的教程,这里有一些链接:

北京理工大学陈刚写的两篇文章是我目前找到的最好的教程,而且非常详细。

1、Android手机救砖固件ROM的制作与研究:

rom源码编译-编译Android源代码制作ROM并烧录。

2、Android内核编译方法:

这两篇文章参考了美国峰会的几篇经典教程:

:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images

国外也有一篇写得不错的文章,这篇文章更侧重于制作类似Patch的ROM包

根据我自己的理解和测试,这里总结了一些技术步骤。

1、从可用的ROM开始 Android ROM包一般称为update.zip包rom源码编译,您可以从网上下载现成的.zip包。 要学习如何制作ROM包,我们可以从这样一个zip包开始。 解压zip包后,一般有这样一些内容:

启动.img 文件

这是编译内核源码生成的内核镜像,然后通过mkbootimg工具用android源码编译出来的ramdisk.img创建的。 想要省事的同学也可以从网上其他省砖包中复制一个可用的。 但是,基本上是一样的。

META-INF目录

该目录是手动创建的,主要用于存放升级脚本update-script(该脚本的内容与系统目录下包含的文件有很大关系)和签名。

系统目录

该目录是android平台源码编译生成的。 要创建我们自己的 ROM,我们通常涉及以下任务:

1.编译内核,生成内核镜像。 但一般情况下,我们不需要自己编辑,直接从变砖救援包中取出一个即可。 比如你想做一个2.2版本的升级包。 你可以去网上找一个与你的型号相匹配的brickrescue包,然后从中取出对应的kernel.img。

2. ramdisk.img 的更改。 ramdisk.img 是根文件系统,包含启动配置脚本。

3.更新脚本更改。

4.系统变更。

让我们先做一个简单的测试工作,为接下来更复杂的工作铺平道路。 测试内容是:先解压zip,然后分别在ramdisk和system根目录下添加一个小文件,然后生成一个新的ROM,并验证该ROM是否可用。

详细步骤可以参考。 这里要强调的是,本文以及网上很多类似网站提到的方法都是针对HTCG1或者Nexusone的。 而且我测试的时候用的是HTCG3Hero。 上述方法的后果之一是,重新打包刷机后,机器很难正常启动,adbshel​​l也无法登录。后来在美国的一个博客上看到了这个问题的解释。 问题的症结很简单。 从G3开始,打包时需要指定“--base”参数。 对于Hero来说,参数是“--base0x19200000”,但是对于其他类型的机器,“--base”应该设置多少取决于内核代码的实现。

解包和打包可以使用两个脚本完成:unpack-bootimg.pl 和 repack-bootimg.pl。 打包脚本中使用的mkbootimg工具位于out/host/linux-x86/bin目录下。 unpack-bootimg.pl可以直接将boot.img生成为内核映像boot.img-kernel和ramdisk目录树boot.img-ramdisk。 repack-bootimg.pl 可以将 boot.img-kernel 和 boot.img-ramdisk 重新生成为 boot.img。

解压后,我们在ramdisk和system目录下添加一个小测试文件(例如mytest)。 完成这些包后,重新生成 update.zip。 到这里我们的工作还没有完全结束,还有最后一步——签名。 签名需要使用签名工具testsign.jar,该工具是基于java1.6版本的工具。 在编译Android源代码时,我们指出应该使用java1.5。 这里我们要切换到1.6版本。 请参阅此处了解如何切换。

2.使用自己编译的镜像生成ROM1)重新生成boot.img

将上面解压出来的boot.img-ramdisk和源码编译后的out/target/product/generic/下的根目录树放到一个目录下,然后使用repack-bootimg.pl重新生成boot.img

2)创建目录myupdaterom源码编译,将之前生成的boot.img放到该目录下

3)Android编译完成后,将out/target/product/generic/生成的系统目录树复制到myupdate目录下

4)在myupdate目录下创建update-script脚本目录

#mkdir-pMETA-INF/com/google/android

5)删除system/bin目录下的“符号链接”并创建update-script脚本

update-script脚本的语法可以参考这里。 研究一下原来的update-script脚本,我们大致可以看出update-script负责删除和复制文件、设置权限、创建符号链接。 我们可以在原来的update-script的基础上进行修改,得到我们自己的update-script。 这里需要注意的是,为了保证update-script的链接创建成功,必须删除/system/bin下的链接。 我们可以使用脚本 delsymlink 来完成这项工作。 我更改了脚本以匹配我编译的Android2.2系统目录树。

6) 重新包装并签字

7)自制ROM下载早上报错

在实验过程中,我经常遇到以下错误

无法打开/sdcard/download/update.hiapk

问题原因:当update-script中出现命令操作错误时,脚本会停止并报告此错误。 解决方案是更正脚本。 从这个错误后面的提示就可以知道脚本的哪一行出了问题。

3. 创建具有Patch功能的ROM 很多时候,您并不需要创建完整的ROM包。 您所需要的只是添加、删除或更改某些功能(例如,您只想添加一个应用程序,或者您想添加 busybox 工具)。 我们可以参考这里来达到这个目的。

rom源码编译-编译Android源代码制作ROM并烧录。

我用一个简单的例子来说明这个过程。 示例是在系统目录下添加一个mytest文件,并创建一个指向该文件的匹配链接mylink。 这是过程:

1)创建patch_update目录并在该目录下执行

#mkdirsystem

#mkdir – pMETA-INF/com/google/android

2)在系统目录下生成mytest文件

3)在 META-INF/com/google/android 中创建以下更新脚本

显示进度0.10

copy_dirPACKAGE:系统系统:

符号链接mytestSYSTEM:mylink

set_perm000755系统:mytest

4)包签名

如果您已经很好地掌握了以下 3 个步骤,那么处理日常工作应该不会有太大问题。 但要成为真正的ROM前辈,你还有很多东西需要练习。 你需要了解整个启动过程、内核编译、Android源码的编译和配置、文件系统和启动配置。 。 。

烧录安卓机

这里HTC官网上有一篇文章,详细介绍了镜像包和烧机方法。 一般有两种编程模式:恢复模式和fastboot模式。 通过一些组合键,可以进入编程模式。 以HTCG3Hero为例,同时按“Home+Power”进入Recovery模式,“Back+Power”进入fastboot模式。

Recovery模式比较常用,它相当于菜单界面的下载模式。 直接将上面提到的update.zip文件放到SD卡上,然后通过操作机器上的控制菜单来完成编程。 Fastboot是一种基于命令行的底层下载方式,可以直接刷写.img文件。 Fastboot工具也在out/host/linux-x86/bin目录中。

在我的测试过程中,我发现fastboot模式很难编程。 当我尝试编写system.img时,出现以下错误消息:

#fastbootflashsystemsystem.img

rom源码编译-编译Android源代码制作ROM并烧录。

#写入“系统”...INFOsignaturechecking...

FAILED(远程:签名验证失败)

上网查了一下,发现这和签名有关系。 SPL 需要刷新。 默认为SPL-on,即测量签名。 如果改成SPL-off,就不会出现这个问题。 没有什么好的办法解决。 处理这个问题。 好在recovery模式早已能够很好地满足需求,可以先放弃fastboot。

如果在recovery模式下编程后发现系统无法正常启动,没关系,recovery仍然可以进入。 在恢复模式下,您可以通过adbshel​​l登录机器。 可能进去后发现SD卡没有挂载(执行mount查看挂载状态)。 但是recovery模式要求update.zip必须放在SD卡根目录下,怎么办? 很简单,执行“mount -a”挂载SD卡区域。 如果这个招不行的话,还有一个招,就是自动将userdata分区挂载到sdcard目录下,从而欺骗recovery。

#挂载/dev/mtdblock5/sdcard

之后,使用adbpush将新的update.zip复制到sdcard目录中,并重新编程。 一般来说,在执行“Flashzipfromsdcard”之前,必须执行Wipe操作以消除旧的用户数据。

如何更新恢复?

您可以参考,按照这个策略,将自己的G3Hero更新为recovery-RA-hero-v1.6.2-blue.img。 不过,通常没有特殊需要,最好不要更新recovery。 其实是有一定风险的,一不小心就会变成砖头。

其他参考信息:

著名的 Android 峰会:

外国的:

美国:引用或翻译了很多国外峰会的文章

国外一个很好的博客:,有很多关于Android的研究主题

美国一个非常好的博客:这个博客帮助我解决了我烧写HTCG3HERO后创建的ROM包无法启动的问题。

安卓文件系统

;a=blob;f=文档/文件系统/ramfs-rootfs-initramfs.txt

Androidinit脚本的句型

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 rom源码编译-编译Android源代码制作ROM并烧录。 https://www.wkzy.net/game/154023.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务