




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Build update.zip from your own android source code .. 在Android 21-update1版本中 一个最基本的updatezip包的结构如下2. 一个系统更新 updatezip 包的制作步骤在一台ubuntu pc上做的实验如有命令缺失请自行安装本文介绍如何从一个已经编译好的android源码树中提取一个update.zip所需要的所有资源, 从而最终构建一个可以在android recovery模式下刷机的update.zip包.在介绍之前,我们先假定你已经有了一个编译好的android源码树 myandroid. 在Android 2.1-update1版本中, 一个最基本的update.zip包的结构如下:.|- META-INF| - com| - google| - android| |- update-binary| - updater-scriptsystem update-binary : 二进制文件, 相当于一个脚本解释器, 能识别 updater-script 中描述的操作。该文件由 myandroid/out/target/product/YOU_PRODUCT/system/bin/updater 重命名所得。具体用什么名字是由 myandroid/bootable/recovery/install.c 文件中的宏 ASSUMED_UPDATE_BINARY_NAME 的值而定. updater-script : 该文件需要自己根据更新包需要更新的内容自行编写. 具体用什么名字是由 myandroid/bootable/recovery/updater/updater.c 文件中的宏 SCRIPT_NAME 的值而定.(注意: 是updater-script, 而不是 update-script). system : 该目录下放需要更新的内容. 比如, 如果你只是需要添加几个系统软件, 则在此目录下添加一个 app 目录, 然后把待添加的系统软件copy进来即可. 如果你是要制作一个系统更新包. 那myandroid/out/target/product/YOU_PRODUCT/system/ 中的所有文件copy到这个目录里来.一个系统更新 update.zip 包的制作步骤(在一台ubuntu pc上做的实验,如有命令缺失,请自行安装)1. $mkdir update #在任意目录下,创建一个叫update的目录2. $cd upadte #进入该目录3. $mkdir p META-INF/com/google/android/ & mkdir system #在update目录下, 创建2个子目录4. $cp myandroid/out/target/product/YOU_PRODUCT/system/bin/updater META-INF/com/google/android/update-binary #获取update-binary文件5. $cp myandroid/out/target/product/YOU_PRODUCT/system/ system/ #获取更新系统MTD所需要的文件6. $cp myandroid/out/target/product/YOU_PRODUCT/boot.img ./ #获取更新系统boot区域所需要的文件.这个boot.img = kernel + ramdisk7. $vim META-INF/com/google/android/updater-script # 打开updater-script脚本, 开始编写更新过程.(下文详述)8. $zip update.zip -r ./META-INF/ ./system/ ./boot.img #编辑完updater-script脚本后, 把update内的所有内容打成一个 update.zip包.9. $java jar -签名- # 使用java对update.zip包进行签名 (下文详述) updater-script 脚本的编写(解释步骤7)updater-script 的内容其实为一行一行update-binery能识别的命令序列. 文件 myandroid/bootable/recovery/update/install.c 末尾描述了所有可执行命令.下面介绍部分命令的使用实例:o mount :eg : mount(“MTD”, “system”, “/system”);挂在 MTD的system分区到文件系统的 /system 目录下. o ui_print :eg :ui_print(“Hello word!”);在屏幕上打印提示信息. o format :eg :format(“MTD”, “system”);格式化MTD的system分区 o package_extract_dir :eg : package_extract_dir(“system”, “/system”);把update包中system中的内容全部拷贝到文件系统/system下 update.zip签名(解释步骤9)update.zip包完成以后, 需要对该zip包进行签名, 否则在recovery模式刷机的时候, 会出现认证失败的错误提示.上文中的步骤9的完整命令为:$java jar myandroid/out/host/linux-x86/framework/signapk.jar w myandroid/build/target/product/security/testkey.x509.pem /testkey.pk8 update.zip update_signed.zip通过这条命令, 会对update.zip包进行签名, 然后输出一个update_signed.zip的签好名update包. 以此作为最终更新包。这条命令需要5个条件:1. host机需装有java环境, ubuntu上为 sun-java5-jdk DEB包2. signapk.jar 文件. 在编译好的myandroid/out/host/linux-x86/framework目录下3. testkey.x509.pem 在源码的 myandroid/build/target/product/security 目录下4. testkey.pk8 在编译好的 myandroid/build/target/product/security 目录下5. update.zip 没有经过签名的ZIP包.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文件系统中的system和 data目录下。 三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。 Ramdisk镜像是采用cpio打包,gzip压缩的。用file验证: # file ramdisk.img 输出: # ramdisk.img: gzip compressed data, from Unix 为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树: # mv ramdisk.img ramdisk.img.gz # gunzip ramdisk.img.gz # mkdir ramdisk #cd ramdisk # cpio i F ./ramdisk.img 这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。 通过执行以下的操作,我们可由目录树再生成ramdisk镜像 # cd ramdisk# find . | cpio -o -H newc | gzip ./ramdisk-new.img 这两个镜像都属于yaffs2文件格式,生成方式是一样的。我们就以system.img为例来说明。 System.img system目录树 所需工具unyaffs, 下载地址 # mkdir system # cd system # unyaffs ./system.img system目录树 system.img 所需工具 mkyaffs2image,Android源码编译后会生成该工具,在 out/host/linux-x86/bin 目录下。 命令格式: # mkyaffs2image system/ system_new.img 了解以上方法的意义在于,我们可以对镜像文件镜像修改,定制,以符合自己的需求。 网上有很多制作Android ROM的教程,这里罗列一些链接: 北理工的陈罡写的两篇文章,是我目前发现的最好的教程,写的非常详细 这两篇文章参考了国外论坛的几个经典教程: _Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images 国内还有一篇文章写的也不错,这篇文章更侧重于制作类似Patch的ROM包 这里基于自己的理解和测试,总结了一些方法步骤。 Android 的ROM包通常称为update.zip包,你可以到上下载现成的.zip包。要学习ROM包的制作,我们可以从这样一个 zip包开始。解开zip包后,通常有这样一些内容: boot.img 文件 这是编译内核源代码生成的内核映像,然后与android源码编译出来的ramdisk.img一起通过mkbootimg工具创建出来的,图省事的朋友 也可以从网上其他的刷机包里面拷贝一个能用的出来即可,基本上都差不多。 META-INF 目录 这个目录是手工创建的,主要用来存放一个升级脚本update-script(这个脚本的内容与system目录中包含的文件有很大关联)以及签名。 system 目录 这个目录就是编译android的平台源代码生成的 要创建自己的ROM,我们通常会涉及到以下的一些工作: 1 编译内核生成内核映像。但一般情况下,我们没有必要自己去编,直接从刷机包里面取出一个就可以。譬如,你要做一个2.2版本的升级包。可以到网上找一个与自己机型相匹配的刷机包,从里面取出相应的kernel.img。 2 ramdisk.img的修改。ramdisk.img 是根文件系统,Ugg boots,里面包含了启动配置脚本。 3 update-script的修改。 4 System的修改。 我们先做个简单的测试工作,来为后面更复杂的工作做好铺垫。测试内容为:先对zip进行解包,然后分别在ramdisk和system的根目录下添加一个小文件,接着,生成新的ROM,并验证ROM是否可用。 详细的步骤可以参考 html。这里要指出的是,这篇文章以及网上许多类似网站提到的方法都是针对HTC G1或 Nexus one的。而我在测试的时候,用的是HTC G3 Hero。以上的方法导致的一个后果是,重新打包后再烧录,机器无法正常启动,adb shell也无法登陆。后来在国外的一篇博客上看到了对此问题的说明,问题的根源很简单,从G3开始,打包的时候需要指定“-base”参数。对于 Hero,参数为”-base 0x19200000”,但对于其它型号的机器,”-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,这是一个基于java 1.6版本的工具。在编译Android源码的时候,我们强调要用java 1.5。在这里,我们必须切换到1.6版本。切换办法见这里。 1)重新生成boot.img 将前面解包得到的boot.img-ramdisk 和 编译源码后out/target/product/generic/下的root目录树放在一个目录下,然后用repack-bootimg.pl重新生成boot.img 2) 创建一个目录 myupdate,将上面生成的boot.img放到这个目录下 3)将编译Android后,out/target/product/generic/生成的system目录树拷贝到myupdate目录 4)在myupdate目录下创建update-script脚本目录 # mkdir -p META-INF/com/google/android 5)删除system/bin目录下的“符号链接”,创建update-script脚本 update-script脚本的语法可以参考 这里 。研究原有的update-script脚本,我们可以大致看出update-script负责文件删除拷贝,权限设置,符号链接创建等工作。我们可以在 原有update-script的基础上进行修改以得到我们自己的update-script。这里,我们要注意的是,要保证update-script 的link创建成功,必须把/system/bin下的link删除。我们可以用一个脚本来做这个工作 delsymlink。我修改后与自己编译的Android2.2 system目录树相匹配的脚本。 6)重新打包并签名 7)自制ROM下载时报错 在试验过程中,我经常遇到如下的报错 Cant open/sdcard/download/update.hiapk 问题原因:当 update-script 中有命令操作错误,脚本就会停止,并报这个错误,解决的办法就是修正脚本。你可以从这个错误前面的提示,知道脚本哪一行出错了。 很多时候,你并不需要创建一个完整的ROM包。你需要的只是,添加删除或修改一些功能(譬如你仅想添加一个应用,或者你想添加busybox工具)。我们 可以参考这里,来实现这个目的。 我用一个简单的例子来说明这个过程。该例子是在system目录下添加一个mytest文件,同时创建一个指向这个文件的符合链接mylink。以下是过程: 1) 创建patch_update目录,并在该目录下执行 # mkdir system # mkdir p META-INF/com/google/android 2) 在system目录下生成mytest文件 3)在 META-INF/com/google/android 创建如下的update-script show_progress 0.1 0 copy_dir PACKAGE:system SYSTEM: symlink mytest SYSTEM:mylink set_perm 0 0 0755 SYSTEM:mytest 4) 打包签名 如果前面的3步曲,你已经很好的掌握了,应付你的日常工作应该没有太大的问题。但要成为真正的ROM高手,你还有很多东西要修炼。你要了解整个启动过程,内核编译,Android源码的编译及配置,文件系统及启动配置。 HTC的官网上有一篇文章 这里 详细介绍了镜像包及烧机方法。通常用两种烧录方式:recovery模式,fastboot模式。通过一些组合键,可以进入烧录模式。以HTC G3 Hero为例,“Home + Power”同时按,可以进入Recovery模式,“Back + Power”可以进入fastboot模式。 Recovery模式比较常用,它相当菜单界面的下载模式。直接把前面所述的update.zip文件放到SD卡上,然后通过在机器上操作控制菜单,就 可完成烧录。Fastboot是基于命令行的较低级的下载模式,它可直接烧录.img文件。Fastboot工具也在out/host/linux- x86/bin目录下。 在我测试过程中,发现fastboot模式无法烧录,当我试图烧录system.img的时候,出现下面的出错信息: # fastboot flash system system.img # writing system. INFOsignature checking. FAILED (remote: signature verify fail) 在网上查了之后,发现这和签名有关系,SPL要重新刷一下才可,默认是SPL-on,即检测签名,改成SPL-off,就不会出现这个问题,目前没有什么好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门店租赁合同
- 廊坊市中医院管理潜能如班组管理情景模拟测试
- 保定市人民医院髋臼骨折Stoppa入路考核
- 建设用地出让权使用合同
- 在北京租房 合同
- 张家口市人民医院护肤品配方学知识考核
- 饲草订单合同
- 通辽市中医院老年人综合能力评估技能考核
- 鄂尔多斯市中医院无菌操作规范考核
- 邯郸市人民医院体液检验技术考核
- (正式版)DB32∕T 5184-2025 《海域使用权立体分层设权技术规范》
- 医院培训课件:《医疗事故的防范与处理》
- 2025鄂尔多斯伊金霍洛旗九泰热力招聘专业技术人员考试模拟试题及答案解析
- 积小善成大德课件
- 2025年10月自考00315当代中国政治制度试题及标准答案
- DB62∕T 3183-2020 建筑物移动通信基础设施建设标准
- 2025年人力资源管理师考试试卷及答案
- 4.1 认识厘米 课件 人教版数学二年级上册
- 人身意外险理赔细则手册
- (2025秋新版)湘科版二年级上册科学全册教学设计(教案)
- 种植二期修复的护理配合
评论
0/150
提交评论