当需要对android系统进行大刀阔斧的改造的时候,应该清晰的了解android各个image的组成才能做到庖丁解牛。

      首先在android烧写过程中需要烧写的文件主要包括uboot.bin\boot.img\system.img\userdata.img\recovery.img等文件。

    小米的刷机文件主要包括data\META-INF\recovery\system\blob\boot.img\file_contexts文件。

Data文件夹下只有一个文件夹miui从名字可以知道里面存放的文件主要是小米的用户界面文件。

system/app  这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中

system/bin  这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)

system/etc  从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。

system/fonts  字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库其中DroidSansFallback.ttf文件大小

system/framework  framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。

system/lib  lib目录中存放的主要是系统底层库,一些so文件,如平台运行时库
system/media/audio  铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音。
system/usr  用户文件夹,包含共享、键盘布局、时间区域文件等

system/priv-app 可以存放自己编写的一些app文件

system/vendor 存放产品相关文件

bootimg文件是由Image和ramdisk.img文件生成。在/build/core/Makefile文件中有相关的描述。# the boot image, which is a collection of other images.

INTERNAL_BOOTIMAGE_ARGS := \

        $(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \

        --kernel $(INSTALLED_KERNEL_TARGET) \

        --ramdisk $(INSTALLED_RAMDISK_TARGET)

在system/core/mkbootimg/bootimg.h中有具体打包的描述。

** +-----------------+

** | boot header     | 1 page

** +-----------------+

** | kernel          | n pages

** +-----------------+

** | ramdisk         | m pages

** +-----------------+

** | second stage    | o pages

** +-----------------+

从上面能够清晰的看出boot.img文件的构成主要是将kernel以及ramdisk.img文件打包并且添加文件头完成。

如果需要修改小米官方给出的文件的情况下,可以使用

#./split_bootimg.pl boot.img

Page size: 2048 (0x00000800)

Kernel size: 6695672 (0x00662af8)

Ramdisk size: 1276106 (0x001378ca)

Second size: 0 (0x00000000)

Board name:

Command line:

Writing boot.img-kernel ... complete.

Writing boot.img-ramdisk.gz ... Complete.

解包ramdisk文件,首先要创建一个文件夹用于存放解压后的文件,进入文件夹之后,执行下面命令:

#gzip -dc ../boot.img-ramdisk.gz | cpio -i

对文件作出修改之后,需要重新做成boot.img文件。

使用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 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img

 

 

 android系统重新刷ROM简记(二)

 

 

 

更多相关文章

  1. Android属性之build.prop生成过程分析及各系统初始配置修改
  2. 下载、编译、运行android 7.1系统
  3. 通过程序打开Android常用系统设置界面
  4. Android 编译系统之Android.bp
  5. ionic3文件目录介绍
  6. Android调用系统相机和相册,解决图片方向问题,压缩图片

随机推荐

  1. SQL SERVER 数据类型详解补充2
  2. asp.net 使用SqlBulkCopy极速插入数据到
  3. sql 函数大全 比较常用的一些函数整理第1
  4. sqlserver 此数据库没有有效所有者错误的
  5. 批量替换sqlserver数据库挂马字段并防范s
  6. MSSQL批量替换语句 在SQL SERVER中批量替
  7. sqlserver 行列互转实现小结
  8. mssql 数据库表行转列,列转行终极方案
  9. SQL效率提升之一些SQL编写建议并有效利用
  10. SQL语句实现删除ACCESS重复记录的两种方