ramdisk.img及boot.img的生成过程

http://blog.csdn.net/hnzzh1986/article/details/7056780



ramdisk.img

ramdisk.img是组成boot.img的重要部分,从Android/build/core/Makefile中可以看到ramdisk.img的生成该过程.

    # the ramdisk
    INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \  $(ALL_PREBUILT) \ $(ALL_COPIED_HEADERS) \
     $(ALL_GENERATED_SOURCES)   $(ALL_DEFAULT_INSTALLED_MODULES))

    BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
    INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
    $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
    ...
     $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@

    ramdisk.img是用mkbootfs工具从out/target/product/tcc8900/root目录制作得到,

所以,需要把注意力转移到out/target/product/tcc8900/root目录及其内容是如何生成的这一主题上来。

其实,ALL_PREBUILT包含了root目录中的大多数内容,另外的ALL_COPIED_HEADERS,ALL_GENERATED_SOURCES

暂时不予以考虑。以下列表列出了与out/target/product/tcc8900/root生成相关的文件:

    /init.goldfish.rc------------------->Android/system/core/rootdir/etc/init.goldfish.rc
    /init.rc         ------------------->device/telechips/tcc92xx-common/init.rc

如果device/telechips/tcc92xx-common/init.rc不才存在,将使用Android/system/core/rootdir/etc/init.rc文件

    /sbin(create)-------------------------------->Android/system/core/rootdir/Android.mk
    /dev(create)--------------------------------->Android/system/core/rootdir/Android.mk
    /proc(create)-------------------------------->Android/system/core/rootdir/Android.mk
    /sys(create)--------------------------------->Android/system/core/rootdir/Android.mk
    /system(create)------------------------------>Android/system/core/rootdir/Android.mk
    /data(create)-------------------------------->Android/system/core/rootdir/Android.mk
    /sbin/adbd(compile)-------------------------->Android/system/core/adb/Android.mk
    /init(compile)------------------------------->Android/system/core/init/Android.mk
    /sbin/timetest(compile)---------------------->Android/system/core/extras/timeinfo/Android.mk
    /lib/modules/tcc92x_nand.ko(copy)------------>Android/hardware/telechips/nand/Makefile
    /lib/modules/ufsd.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk
    /lib/modules/viqe.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk

至于其他的诸如/config , /cache, /nand,/inand,/mnt,/mnt/nand,/sata,/scisi,/app-cache等目录都在init.rc中被创建。




http://blog.csdn.net/hnzzh1986/article/details/7056782

boot.img

在制作android烧写镜像时,boot.img是一个很重要的文件

boot.img在一般情况下包括了ramdisk、kernel,  KERNEL_CMDLINE, FLASH_PAGE_SIZE四个部分。

从Android/build/core/Makefile文件中可以看到boot.img的生成过程.

INSTALLED_BOOTIMAGE_TARGET:=$(PRODUCT_OUT)/boot.img  定义输出文件名称

INTERNAL_BOOTIMAGE_ARGS:=...\

   --kernel $(INSTALLED_KERNEL_TARGET)   \ 其实INSTALL_KERNEL_TARGET就是kernel下的Image文件

   --ramdisk $(INSTALLED_RAMDISK_TARGET) \ramdisk.img是mkbootfs工具用out/.../tcc8900/root目录生成,并做了压缩

...

ifdef BOARD_KERNEL_CMDLINE

   INTERNAL_BOOTIMAGE_ARGS+= --cmdline "$(BOARD_KERNEL_CMDLINE)"

tcc89xx的device/telechips/tcc8900/BoardConfig.mk包含了device/telechips/tcc92xx-common目录中的

BoardConfigCommon.mk文件,tcc8900的BOARD_KERNEL_CMDLINE就被定义在这个BoardConfigCommon.mk中

endif

ifdef BOARD_KERNEL_BASE

  INTERNAL_BOOTIMAGE_ARGS+= --base  "$(BOARD_KERNEL_BASE)"

和BOARD_KERNEL_CMDLINE一样,该宏也被定义在tcc9xx-common/BoardConfigCommon.mk中

endif

ifdef BOARD_FLASH_PAGE_SIZE

  INTERNAL_BOOTIMAGE_ARGS+= --pagesize "$BOARD_FLASH_PAGE_SIZE"

BOARD_FLASH_PAGE_SIZE可以在device/telechips/tcc8900/BoardConfig.mk文件中找到其定义

endif

......

$(INSTALLED_BOOTIMAGE_TARGET):$(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)

    $(hide)  $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS)  --output $@  使用mkbootimg工具生成最后boot.img

...

 其中INSTALLED_KERNEL_TARGET在Android/build/target/board/Android.mk内被定义:

INSTALLED_KERNEL_TARGET:=$(PRODUCT_OUT)/kernel  就是kernel源码编译后的Image文件

在boot.img生成过程中用到的诸如MKBOOTIMG,MKBOOTFS,MINIGZIP工具在build/core/config.mk中定义:

MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)mkbootimg$(HOST_OUT_EXECUTABLE_SUFFIX)



你可能感兴趣的:(苦与乐---linux)