您的位置:首页 > 移动开发 > Android开发

[Android]构建boot.img(三):boot.img的生成与结构

2016-01-08 22:13 666 查看
在前两篇同一系列的文章中都提到了以下一段语句:

?
显然,boot.img中包含了Image和ramdisk.img文件,但boot.img中的内容远不只这么多,本文将介绍

boot.img中的其它参数,boot.img的生成以及最终boot.img的组成格式.

INTERNAL_BOOTIMAGE_ARGS还包含以下内容:

1.附加的内核命令行(cmdline): BOARD_KERNEL_CMDLINE

同样在build/core/Makefile中,有以下一段内容(strip起到去除空格的作用):

?
而BOARD_KERNEL_CMDLINE则在文件device/telechips/tcc88xx-common/BoardConfigCommon.mk中定义:

?
2.内核加载的基地址,BOARD_KERNEL_BASE

同样在build/core/Makefile中,有以下一段内容:

?
而BOARD_KERNEL_BASE也在device/telechips/tcc88xx-common/BoardConfigCommon.mk中定义。

?
3.映像的页面大小:BOARD_KERNEL_PAGESIZE

同样在build/core/Makefile中,有以下一段内容:

?
而BOARD_KERNEL_PAGESIZE 却在device/telechips/tcc8800/BoardConfig.mk中定义:

?
剩下的内容就是生成boot.img的关键语句,在 build/core/Makefile中,内容如下:

?
到此,我们可以知道 INTERNAL_BOOTIMAGE_ARGS的内容是:

?
而预知boot.img的格式,必须查看MKBOOTIMG这个程序,其实就是out/host/linux-x86/bin/mkbootimg中的mkbootimg程序。

mkbootimg程序由system/core/mkbootimg工程生成得到,为此我们来看看其中的mkbootimg.c文件,其中有这样一段:

?
可见boot.img是由文件头信息,内核数据以及文件系统数据组成,它们之间非页面对齐部分用0填充(可以

查看write_padding的代码),文件头信息的具体结构可以在system/core/mkbootimg/bootimg.h中看到:

?
其它成员也很明了,由此可知boot.img的大致组成结构了。

-----------------------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: