




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下面的做法是在linux下面完成的(slackware 13.1):(1)下载和编译android的源代码,具体过程不再赘述如果各位还不知道repo sync之类的命令的话,可以参考网上的关于下载android源代码以及编译的文章,据偶所知这些文章非常丰富。编译之前一定要注意平台的选择,不同平台的驱动程序是不一样的!这些参数可以通过:$ cd android-src -进入android的源代码目录$ . build/envsetup.sh -设置环境变量,运行完毕后,你可以输入一下help命令,看看google的团队提供了多少有用的便利命令,这对于我们以后修改代码重新编译非常有帮助。$ lunch generic-eng -开始配置android的源代码的编译选项运行上述命令后会看到如下输出:waynewayne:/android-src$ lunch generic-eng=PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=2.1-update1TARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=falseTARGET_BUILD_TYPE=releaseTARGET_ARCH=armHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=ECLAIR=$ make -j2 -只有双核的CPU的朋友可以尝试此参数,四核的朋友可以试试-j4,否则就老老实实运行make即可:D。然后就是一个漫长的等待,这个时间大概有1-2小时左右(偶的机器比较慢),完全编译完毕以后硬盘的占用大概需要8个G左右。(2)编译完成以后,进入waynewayne:/android-src/out/target/product/generic目录,应该会看到如下的文件:android-info.txtdata obj ramdisk.imgsdk system userdata.imgclean_steps.mk installed-files.txtprevious_build_config.mkroot symbolssystem.img这里的system.img是不是很眼熟?!对拉,这个就是刷机包里面好像也有一个叫做什么system的目录,那么这个system.img里面都有什么呢?这里面的东西其实就是当前目录下的一个叫做system的目录里面的内容了,只是保存成了yaffs文件系统的格式。我们可以通过unyaffs工具来把system.img给解开来看看,就明白偶说话了。unyaffs的代码下载地址为:/p/unyaffs/downloads/list编译方法非常地简单,只需要下载源代码,然后运行:$ gcc -c unyaffs.c$ gcc -o unyaffs unyaffs.o即可生成这个unyaffs的解包工具,利用这个工具就可以把自己生成的system.img进行解包,然后修改里面的内容了。unyaffs使用方法非常简单:$ unyaffs system.img 回车即可将system.img解包成一个叫做system的目录,里面包含了整个android的文件系统(何为文件系统?!如果提出这个问题的话,偶就不多说什么了,回家啃啃大学里面计算机专业的操作系统那本书吧)(3)刚刚开始,不适合一切从头来,还是老实一些,先从修改别的大牛们做得刷机包开始吧首先拷贝一个从网上下载下来的刷机包,然后找一个目录解压缩(当然,这是最保险的做法,自己做这些目录也没有任何问题,只是比较费时间而已)$ unzip xxxxxx.zip - 这个xxxxx.zip就是从网上下载的某刷机包(一定要跟你的代码版本基本一致喔,偶在这里用的是2.1的刷机包)(4)替换原有的system目录解压缩刷机包以后,会看到在开篇的时候提到的两个目录,一个文件:boot.imgMETA-INFsystem好了,可以把system目录拷贝到别的路径下备份一给,防止这些修改发生别的问题。然后把waynewayne:/android-src/out/target/product/generic这个目录下面的system拷贝到当前的工作目录下。注意,这个system目录里面有很多“符号链接”指向了toolbox。这些链接其实没啥用,可以通过后面的update-script自动进行创建的,因此,需要用一个脚本把这些链接都删掉。可以参考:/showthread.php?t=566235这个网页附件给出来的DeleteExtras.txt改写成一个DeleteExtras.sh脚本来清除这些符号链接。(5)修改update-script脚本修改META-INF/com/google/android目录下的那个叫做updatescript的脚本,只要修改一下即可,主要是删除一些不存在的文件以及增加一些文件的权限之类的定义(语法十分清晰,一目了然)。把需要“预装”到刷机包里面的apk安装程序都准备好,将这些apk拷贝到system/app目录下即可。那个boot.img能不改就不改,因为这东西涉及到驱动和内核的问题,出了问题刷机包就启动不了了。(6)重新打包成update.zip$ zip -r update.zip . /sdcard/recovery.img# cat /dev/mtd/mtd2 /sdcard/boot.img(注意added by lxros,只有手机获取了ROOT权限以后才能够执行上述的备份命令)第二件事情,你您应该把你您最喜欢的update.zip刷机包放置到你您的sd卡的根目录上面。如此一来,即使你您在后续的操作中出了问题,也可以启动到recovery模式进行恢复。另外一个你您需要知道的重要文件是在android系统目录下的/system/recovery.img,此文件是mtd1存储设备的完全拷贝。这个文件在每次关机的时候,会自动地被写回到mtd1存储设备里面。这会意味着两个事情:(1)任何对/dev/mtd/mtd1中数据的直接修改都会在下一次重启手机以后消失。(2)如果希望对/dev/mtd/mtd1进行修改,最简单的做法是用你您自己的recovery.img替换掉/system/recovery.img。当你您创建自己的update.zip刷机包的时候(特别是在做刷机包的适配的时候),如果你您忘记替换这个/system/recovery.img,这个recovery.img就会在关机的时候被烧写到mtd1里面去或许会变砖。一定要注意这一点!(译者的话,关于这个/system/recovery.img文件,在2.1的android的平台里面并没有找到,或许这个机制已经out了?!或者偶本人对这段话的理解不够深入?!希望明白的朋友不吝斧正)2、boot和recovery映像的文件结构boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。(译者的话,原文是一个叫做mkbootimg.h的文件,但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。/* +-+ * | boot header | 1 page* +-+* | kernel | n pages* +-+* | ramdisk | m pages* +-+* | second stage | o pages* +-+* n = (kernel_size + page_size - 1) / page_size* m = (ramdisk_size + page_size - 1) / page_size* o = (second_size + page_size - 1) / page_size* 0. all entities are page_size aligned in flash* 1. kernel and ramdisk are required (size != 0)* 2. second is optional (second_size = 0 - no second)* 3. load each element (kernel, ramdisk, second) at* the specified physical address (kernel_addr, etc)* 4. prepare tags at tag_addr.kernel_args is* appended to the kernel commandline in the tags.* 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr* 6. if second_size != 0: jump to second_addr* else: jump to kernel_addr*/ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。如果你您希望了解更多关于此文件的信息可以参考以下网址:/?p=kernel/common.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt以下是一个典型的ramdisk中包含的文件列表:./init.trout.rc./p./proc./dev./init.rc./init./sys./init.goldfish.rc./sbin./sbin/adbd./system./datarecovery映像包含了一些额外的文件,例如一个叫做recovery的二进制程序,以及一些对该程序支持性的资源图片文件(当你您按下home+power组合键的时候就会运行这个recovery程序)。典型的文件列表如下:./res./res/images./res/images/progress_bar_empty_left_round.bmp./res/images/icon_firmware_install.bmp./res/images/indeterminate3.bmp./res/images/progress_bar_fill.bmp./res/images/progress_bar_left_round.bmp./res/images/icon_error.bmp./res/images/indeterminate1.bmp./res/images/progress_bar_empty_right_round.bmp./res/images/icon_firmware_error.bmp./res/images/progress_bar_right_round.bmp./res/images/indeterminate4.bmp./res/images/indeterminate5.bmp./res/images/indeterminate6.bmp./res/images/progress_bar_empty.bmp./res/images/indeterminate2.bmp./res/images/icon_unpacking.bmp./res/images/icon_installing.bmp./sbin/recovery3、对映像文件进行解包、编辑、打包的常规方法(注意,下面我给你您介绍的是手工命令行方式进行解包以及重新打包的方法,但是我仍然创建了两个perl脚本,这两个脚本可以让你您的解包和打包工作变得轻松许多。可以参考本文的附件unpack-bootimg.zip和repack-bootimg.zip)如果你您很擅长使用16进制编辑器的话,你您可以打开boot.img或者recovery.img,然后跳过开始的2K的头数据,然后寻找一大堆0的数据,在这一堆0的数据后面,紧跟着1F 8B这两个数字(1F 8B是gzip格式的文件的结束标记)。从此文件开始的地方(跳过2K的头),一大堆0后面紧跟着到1F 8B这两个数字为止的全部数据,就是gzip压缩过的linux内核。从1F 8B后面紧跟着的数据一直到文件的结尾包含的全部数据,就是ramdisk内存盘的数据。你您可以把把内核和ramdisk两个文件分别保存下来,在进行分别的修改和处理。我们可以通过un-cpio和un-gzip操作来读取ramdisk文件中的数据,可以使用如下的命令来实现这个目的,以下操作会生成一个目录,直接cd进去就可以看到ramdisk中的数据了:gunzip -c ./your-ramdisk-file | cpio -i此命令可以将ramdisk中的所有的文件解包到当前的工作目录下面,然后就可以对它进行编辑了。当需要重新打包ramdisk的时候,就需要re-cpio然后re-gzip这些数据和目录,可以通过如下命令来实现:(cpio会把所有当前目录下面的文件都打包进去,因此,在进行此步骤之前,请把不需要的文件都清除掉。)find . | cpio -o -H newc | gzip ./newramdisk.cpio.gz最后一步就是通过mkbootimg这个工具,把kernel和ramdisk打包在一起,生成一个boot.img:mkbootimg -cmdline no_console_suspend=1 console=null -kernel your-kernel-file -ramdisk newramdisk.cpio.gz -o mynewimage.img这里的mkbootimg工具会在编译android的源代码的时候会在/android-src/out/host/linux-x86/bin目录下面自动生成。下载地址:/?p=platform/system/core.git;a=tree;f=mkbootimg现在,如果不想背这些复杂的命令或者摆弄那个让人眩晕的16进制编辑器的话,可以尝试使用我编写的用于解包和打包的perl脚本了。希望这些脚本能够节约各位的键盘。3.1、另一种解包、编辑、打包的方法下载split_bootimg.zip文件(译者注,会在本文的附件中提供),在此zip文件中包含一个perl文件,split_bootimg.pl脚本,该脚本可以读取boot.img头(根据Android源码中的bootimg.h读取)将kernel和ramdisk读取出来,此脚本也会输出内核命令行和板子名字。(注意,不要使用从/dev/mtd/mtd2直接拷贝出来的boot.img,此映像可能在读取过程遭到损坏。)下面是一个从TC4-RC28更新中提取出来的boot.img进行解包操作:% ./split_bootimg.pl boot.img Page size: 2048 (0x00000800)Kernel size: 1388548 (0x00153004)Ramdisk size: 141518 (0x000228ce)Second size: 0 (0x00000000)Board name: Command line: no_console_suspend=1Writing boot.img-kernel . complete.Writing boot.img-ramdisk.gz . complete.解包ramdisk的命令如下:% mkdir ramdisk% cd ramdisk% gzip -dc ./boot.img-ramdisk.gz | cpio -i% cd .解码完毕后,就可以修改了(例如,在p设置ro.secure=0等等)使用mkbootfs工具(mkbootfs工具是编译完毕Android源代码以后,就会在/android-src/out/host/linux-x86/bin自动生成)来重新创建ramdisk,可以使用如下命令来操作:% mkbootfs ./ramdisk | gzip ramdisk-new.gz使用mkbootimg来重新创建boot.img,mkbootimg也可以在/android-src/out/host/linux-x86/bin目录中可以找到:% mkbootimg -cmdline
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合练习说课稿中职基础课-职业模块 工科类-语文版-(数学)-51
- 2025年中国甘宝素行业市场分析及投资价值评估前景预测报告
- 2025年中国复合环氧树脂行业市场分析及投资价值评估前景预测报告
- 4.2 携手促发展2023-2024学年九年级下册道德与法治同步说课稿
- 2025年中国封接玻璃粉行业市场分析及投资价值评估前景预测报告
- 六年级信息技术下册 眨眼动画说课稿 青岛版
- 保姆培训知识课件
- 高二数学考试真题及答案
- 港务局考试题目及答案
- 保健食品基本知识培训课件
- 高考英语一轮专项复习:高考试题中的熟词生义(含解析)
- 吸痰护理课件
- 《中国心力衰竭诊断和治疗指南2024》解读
- 部编版四年级上册语文大单元教学设计范例
- 2025年高考政治一轮复习:统编版必修一到必修四综合测试卷(含答案解析)
- 第三单元整体阅读之人物篇 统编版高中语文选择性必修上册
- 高二上学期第一次月考物理试卷(附答题卷和答案)
- 教育培训机构合作培训协议
- 2025年广东省春季高考学业水平考试数学试卷试题(含答案解析)
- 枫蓼肠胃康胶囊与其他肠胃药的协同作用研究
- 环境污染物对人体健康影响的研究
评论
0/150
提交评论