Files
gk-sdk/build/rootfs_image.mk

166 lines
6.2 KiB
Makefile

.PHONY: bootargs
bootargs:
ifeq ($(CONFIG_XMEDIA_NAND_FLASH_SUPPORT),y)
$(AT)test -d $(XMEDIA_NAND_IMAGE_DIR) || mkdir -p $(XMEDIA_NAND_IMAGE_DIR)
$(AT)test ! -f $(NAND_PARTITIONS) || cp -f $(NAND_PARTITIONS) $(XMEDIA_NAND_IMAGE_DIR)/
$(AT)(test ! -f $(NAND_BOOTARGS) || (cd $(XMEDIA_NAND_IMAGE_DIR) && $(MKBOOTARGS) \
-s $(CONFIG_XMEDIA_BOOT_ENV_SIZE) -r $(NAND_BOOTARGS) -o bootargs.bin > /dev/null))
endif
ifeq ($(CONFIG_XMEDIA_EMMC_SUPPORT),y)
$(AT)test -d $(XMEDIA_EMMC_IMAGE_DIR) || mkdir -p $(XMEDIA_EMMC_IMAGE_DIR)
$(AT)test ! -f $(EMMC_PARTITIONS) || cp -f $(EMMC_PARTITIONS) $(XMEDIA_EMMC_IMAGE_DIR)/
$(AT)(test ! -f $(EMMC_BOOTARGS) || (cd $(XMEDIA_EMMC_IMAGE_DIR) && $(MKBOOTARGS) \
-s $(CONFIG_XMEDIA_BOOT_ENV_SIZE) -r $(EMMC_BOOTARGS) -o bootargs.bin > /dev/null))
endif
ifeq ($(CONFIG_XMEDIA_SPI_SUPPORT),y)
$(AT)test -d $(XMEDIA_SPI_IMAGE_DIR) || mkdir -p $(XMEDIA_SPI_IMAGE_DIR)
$(AT)test ! -f $(SPI_PARTITIONS) || cp -f $(SPI_PARTITIONS) $(XMEDIA_SPI_IMAGE_DIR)/
$(AT)(test ! -f $(SPI_BOOTARGS) || (cd $(XMEDIA_SPI_IMAGE_DIR) && $(MKBOOTARGS) \
-s $(CONFIG_XMEDIA_BOOT_ENV_SIZE) -r $(SPI_BOOTARGS) -o bootargs.bin > /dev/null))
endif
.PHONY: fs_image fs_image_clean
fs_image: rootfs
$(AT)$(MAKE) fs -j1
fs_image_clean:
FS_IMAGES.yy :=
FAKEROOT := fakeroot -- bash $(TOOLS_DIR)/bin/fakeroot-scripts
# $(call mkfs,<rootfs dir>,<cmd>)
mkfs = $(FAKEROOT) "$(1)" '$(2)'
$(if $(shell /usr/bin/env fakeroot -v 2>/dev/null),;, \
$(error Command "fakeroot" not found, please install)))
# $(call fsimage_target,<fs>,<target image>)
define fsimage_target
.PHONY: $(call build_target,$(1))
$(call build_target,$(1)):$(2)
.PHONY: $(call clean_target,$(1))
$(call clean_target,$(1)):
@rm -vf $(2)
endef
###############################################################################
.PHONY: tar
tar:
@$(call mkdir,$(XMEDIA_IMAGE_DIR))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR), \
tar -C $(XMEDIA_ROOTFS_DIR) -cf $(XMEDIA_IMAGE_DIR)/rootfs.tar .)
###############################################################################
ifdef CONFIG_XMEDIA_SPI_BLOCK_SIZE
SPI_BLOCK_SIZE := $(CONFIG_XMEDIA_SPI_BLOCK_SIZE)
else
SPI_BLOCK_SIZE := 64k 128k 256k
endif
JFFS2_SUFFIX = $(addsuffix .jffs2,$(SPI_BLOCK_SIZE))
JFFS2_IMAGE := $(addprefix $(XMEDIA_SPI_IMAGE_DIR)/rootfs.,$(JFFS2_SUFFIX))
FS_IMAGES.y$(CONFIG_XMEDIA_ROOTFS_JFFS2) += $(JFFS2_IMAGE)
$(eval $(call fsimage_target,jffs2,$(JFFS2_IMAGE)))
$(XMEDIA_SPI_IMAGE_DIR)/rootfs.64k.jffs2: JFFS2_BLOCK_SIZE=0x10000
$(XMEDIA_SPI_IMAGE_DIR)/rootfs.128k.jffs2: JFFS2_BLOCK_SIZE=0x20000
$(XMEDIA_SPI_IMAGE_DIR)/rootfs.256k.jffs2: JFFS2_BLOCK_SIZE=0x40000
$(XMEDIA_SPI_IMAGE_DIR)/rootfs.%.jffs2: $(MKJFFS2) FORCE
@$(call mkdir,$(@D))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR),$(MKJFFS2) -d $(XMEDIA_ROOTFS_DIR) -l -e \
$(JFFS2_BLOCK_SIZE) -o $@)
###############################################################################
SQUASHFS_SUFFIX = .squashfs
SQUASHFS_IMAGE := $(addprefix $(XMEDIA_SPI_IMAGE_DIR)/rootfs,$(SQUASHFS_SUFFIX))
FS_IMAGES.y$(CONFIG_XMEDIA_ROOTFS_SQUASHFS) += $(SQUASHFS_IMAGE)
$(eval $(call fsimage_target,squashfs,$(SQUASHFS_IMAGE)))
$(XMEDIA_SPI_IMAGE_DIR)/rootfs.squashfs: $(MKSQUASHFS) FORCE
@$(call mkdir,$(@D))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR),$(MKSQUASHFS) $(XMEDIA_ROOTFS_DIR) $@ -comp xz)
###############################################################################
YAFFS2_IMAGE := $(addprefix $(XMEDIA_NAND_IMAGE_DIR)/, \
rootfs_2k_4bit.yaffs2 \
rootfs_2k_24bit.yaffs2 \
rootfs_4k_4bit.yaffs2 \
rootfs_4k_24bit.yaffs2)
FS_IMAGES.$(CONFIG_XMEDIA_ROOTFS_YAFFS)$(CONFIG_XMEDIA_NAND_FLASH_SUPPORT) += $(YAFFS2_IMAGE)
$(eval $(call fsimage_target,yaffs,$(YAFFS2_IMAGE)))
$(XMEDIA_NAND_IMAGE_DIR)/rootfs_2k_4bit.yaffs2 : ARGS=1 2
$(XMEDIA_NAND_IMAGE_DIR)/rootfs_2k_24bit.yaffs2 : ARGS=1 4
$(XMEDIA_NAND_IMAGE_DIR)/rootfs_4k_4bit.yaffs2 : ARGS=2 2
$(XMEDIA_NAND_IMAGE_DIR)/rootfs_4k_24bit.yaffs2 : ARGS=2 4
$(XMEDIA_NAND_IMAGE_DIR)/%.yaffs2: $(MKYAFFS) FORCE
@$(call mkdir,$(@D))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR),$(MKYAFFS) $(XMEDIA_ROOTFS_DIR) $@ $(ARGS))
@chmod 644 $(@)
###############################################################################
UBIFS_IMAGE := $(addprefix $(XMEDIA_NAND_IMAGE_DIR)/, \
rootfs_2k_128k.ubiimg rootfs_4k_256k.ubiimg)
FS_IMAGES.$(CONFIG_XMEDIA_ROOTFS_UBIIMG)$(CONFIG_XMEDIA_NAND_FLASH_SUPPORT) += $(UBIFS_IMAGE)
$(eval $(call fsimage_target,ubiimg,$(UBIFS_IMAGE)))
$(XMEDIA_NAND_IMAGE_DIR)/%.ubiimg: $(TOOLS_DIR)/bin/mkubiimg.sh FORCE
@$(call mkdir,$(@D))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR),bash $(<) \
$(wordlist 2,3,$(subst _, ,$(basename $(@F)))) $(XMEDIA_ROOTFS_DIR) $@)
###############################################################################
EXT4_IMAGE := $(addprefix $(XMEDIA_EMMC_IMAGE_DIR)/, \
rootfs_$(CONFIG_XMEDIA_EMMC_ROOTFS_SIZE)M.ext4)
FS_IMAGES.$(CONFIG_XMEDIA_ROOTFS_EXT4)$(CONFIG_XMEDIA_EMMC_SUPPORT) += $(EXT4_IMAGE)
$(eval $(call fsimage_target,ext4,$(EXT4_IMAGE)))
$(XMEDIA_EMMC_IMAGE_DIR)/%.ext4: $(TOOLS_DIR)/bin/make_ext4fs FORCE
@$(call mkdir,$(@D))
@$(call mkfs,$(XMEDIA_ROOTFS_DIR),$(<) -l $(CONFIG_XMEDIA_EMMC_ROOTFS_SIZE)M -s $@ $(XMEDIA_ROOTFS_DIR))
###############################################################################
# $(XMEDIA_ROOTFS_DIR) 目录里文件变化(添加/删除/修改), 触发重新生成文件系统镜像
.PHONY: $(call build_target,fs)
$(call build_target,fs):
@$(call mkdir,$(XMEDIA_ROOTFS_DIR))
@echo '#this is auto generation, do not modify' > $(XMEDIA_ROOTFS_DIR).mk
@echo 'all: $(FS_IMAGES.yy)' >> $(XMEDIA_ROOTFS_DIR).mk
@echo '$(strip $(FS_IMAGES.yy)): \' >> $(XMEDIA_ROOTFS_DIR).mk
@echo $$(find $(XMEDIA_ROOTFS_DIR) -type f -and ! -size 0) >> $(XMEDIA_ROOTFS_DIR).mk
@echo ' make -C $(SDK_DIR) $(FS_IMAGES.yy)' >> $(XMEDIA_ROOTFS_DIR).mk
@echo 'force:; make -C $(SDK_DIR) $(FS_IMAGES.yy)' >> $(XMEDIA_ROOTFS_DIR).mk
@if cmp -s $(XMEDIA_ROOTFS_DIR).mk $(XMEDIA_ROOTFS_DIR)/../.rootfs.mk.old; \
then make -f $(XMEDIA_ROOTFS_DIR).mk all; \
else make -f $(XMEDIA_ROOTFS_DIR).mk force; fi
@mv -f $(XMEDIA_ROOTFS_DIR).mk $(XMEDIA_ROOTFS_DIR)/../.rootfs.mk.old
.PHONY: $(call clean_target,fs)
$(call clean_target,fs):
rm -f $(FS_IMAGES.yy) $(FS_IMAGES.yn) $(FS_IMAGES.ny) $(FS_IMAGES.nn)
FORCE:;