问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何修改Android系统的Ramdisk以及boot镜像

发布网友 发布时间:2022-04-22 10:57

我来回答

2个回答

热心网友 时间:2023-10-11 16:39

  如果经常看我blog的朋友,应该记得前年我曾经写过一些关于Android的文章,其中一篇是对Android启动过程的进一步研究。现在要做的事情呢,就是对两年前这篇文章的一个实践了:)当然,当年的文章只能作为参考,因为那是针对模拟器的,Ramdisk.img就在Tools工具下。而现在,我们是针对真机提取Ramdisk,修改相关文件,再将其放回去,这样以后Android设备启动时,加载的都是已经修改过的Ramdisk镜像了。我们不会去直接用Tools目录下的Ramdisk,因为很可能你的Boot镜像是已经修改过的,你只不过想在其基础上进行进一步修改而已。

  1提取

  好,进入正题,本文主要以修改boot.img中的ramdisk为例,但是其他的修改原理都是相通的。

  首先,我们要把boot镜像从设备中提取出来,方法就是在上一篇文章中谈到的,先去adb shell中

  cat /dev/mtd/mtd2 > /sdcard/root.img

  然后

  adb pull /sdcard/root.img ./

  这样就把root.img拷贝到本地目录下了。好,接下来的步骤,可要看仔细了,错了一点,就完全不对路了。

  我们已经介绍过,boot.img的组成结构是

  +—————–+
  | boot header | 1 page
  +—————–+
  | kernel | n pages
  +—————–+
  | ramdisk | m pages
  +—————–+
  | second stage | o pages
  +—————–+

  那我们要做的就是把这几个部分分别分离出来。具体的分离原理并不是很难,就是特别麻烦。所以建议大家都用现成的脚本来做。点击unpack下载分离的脚本,点击repack下载重新打包的脚本。

  好,我们现在先进行镜像分离。用命令

  ./split_bootimg.pl boot.img

  成功执行后,可以得到两个文件,一个是boot.img-kernel,另一个是boot.img-ramdisk.gz。我们这里以修改ramdisk为例,所以将其解包

  % mkdir ramdisk
  % cd ramdisk
  % gzip -dc ../boot.img-ramdisk.gz | cpio -i
  % cd ..

  解包之前新建一个文件夹放解包出来的文件,然后进入这个文件夹执行gzip和cpio的命令。至于原理,同上,请参考两年前的这篇文章。

  2 生成新img

  好,接下来你就可以做你想做的任何修改了,包括init.rc之类的进程方面的修改,或者丢一个什么东西进去,或者其他。只需要确保你做的修改没有问题就行。修改完成后,自然就是要将其重新还原成img包了,这时repack脚本就派上用场。用命令

  repack-bootimg.pl boot-new.img

  就可以生成新的boot-new.img了。

  3 刷入新img

  生成了新的img后,我们如何在系统上应用我们的新boot.img呢?首先,把img文件放到sdcard上去

  adb push ./boot_new.img /sdcard

  然后执行这两个操作

  # cat /dev/zero > /dev/mtd/mtd2
  # flash_image boot /sdcard/mynewimage.img

  执行第一个操作时,可能会提示你

  write: No space left on device

  这个信息没关系,不用管它。两个命令都执行后,最后adb shell reboot即可。如果重启顺利,那么恭喜你,你的新镜像刷成功了,此时的ramdisk自然也是新的ramdisk了。

  4 刷boot镜像有问题?

  其实到这里,才是俺想发挥的地方。上面介绍的所有步骤,有两个特点

  4.1 国外友人上都介绍过
  4.2 G1上成功率最高

  所以如果你是用Magic或者Hero,有一定几率会出线重启之后,画面就停留在 HTC 或者Android那里,不会进入系统。此时你必须拿出电池重新开机,按照我这篇文章所讲的方法刷一次recovery image,才能正常进入系统。如果你真的遇到这种情况,就说明上面介绍的这个方法不适合你,那么,还有没有别的方法让系统boot我们自己的boot image呢?

  当然有。在这篇文章中,我们介绍了有很多第三方ROM供我们刷机,从而达到更多功能或者获得root权限的目的。其中,我们介绍了里面有一个update.zip的东西,如果亲自刷过机的朋友就知道这是什么文件。我同时也介绍了,update.zip里面就是要添加到你的system中的各种工具,其中就包括了boot.img。也就是说,我们可以自己做一个属于自己的ROM,其中包括我们自己的boot.img。

热心网友 时间:2023-10-11 16:40

用RE
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 如何制作一个ISO系统镜像文件 怎样测量手腕周长 教你如何制作镜像文件 怎么测量手腕尺寸佩戴手表 怎么烧写android 镜像到nanopi2 手围测量方法有哪些? 怎么制作镜像文件? 荸荠生吃和煮熟吃哪个更好 荸荠生吃的好处和坏处 怎样把本机上的文件制作成镜像文件? 如何制作镜像文件? 哪里产的荸荠最好吃 怎么将手机作为镜像包,恢复手机里的数据 荸荠是生吃好还是熟吃好 .img文件怎么打开,,,用安卓手机 全国哪里的荸荠口感更好呢? 怎么做安卓镜像?就是把rom包做成iso文件。 荸荠熟吃好还是生吃好 如何用U盘运行Android系统制作的图文教程详细步骤 生吃荸荠有什么好处吗 如何制作镜像文件 手腕尺寸怎么量 如何制作安卓启动U盘 手围测量方法 如何测量腕长 如何测量手腕尺寸 怎么怎么测量手腕一周的长度 怎样测量手腕 如何测量手腕大小? 请教准确的量手围方法 如何量出一个人的手腕的宽 正确使用腕式血压计的方法 我的手腕一周有多长?该怎么量呢? 手腕码号怎么算 手腕尺寸怎么量 手表 广州高层次人才认定标准 广州市高层次人才认定标准2021 别克威朗车增配一把钥匙 怎样匹配钥匙密码 广州高中学校有哪些 广州高中有哪些学校? 汽车钥匙新买无芯片怎样配对