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)