218 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# 
 | 
						|
# Copyright (C) 2006-2011 OpenWrt.org
 | 
						|
#
 | 
						|
# This is free software, licensed under the GNU General Public License v2.
 | 
						|
# See /LICENSE for more information.
 | 
						|
#
 | 
						|
include $(TOPDIR)/rules.mk
 | 
						|
include $(INCLUDE_DIR)/image.mk
 | 
						|
 | 
						|
ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
 | 
						|
VMLINUX_ELF_FILE=$(IMG_PREFIX)-vmlinux-initramfs.elf
 | 
						|
VMLINUX_BIN_FILE=$(IMG_PREFIX)-vmlinux-initramfs.bin
 | 
						|
define Image/BuildKernel
 | 
						|
endef
 | 
						|
else
 | 
						|
VMLINUX_ELF_FILE=$(IMG_PREFIX)-vmlinux.elf
 | 
						|
VMLINUX_BIN_FILE=$(IMG_PREFIX)-vmlinux.bin
 | 
						|
endif
 | 
						|
 | 
						|
ifeq "$(CONFIG_KERNEL_COMPRESS_MODE_NONE)" "y"
 | 
						|
	KERNEL_COMPRESS_MODE=none
 | 
						|
	COMPRESSION_SUFFIX=
 | 
						|
  define compressKernel
 | 
						|
	echo "Uncompressed kernel image"
 | 
						|
  endef
 | 
						|
endif
 | 
						|
 | 
						|
ifeq "$(CONFIG_KERNEL_COMPRESS_MODE_LZMA)" "y"
 | 
						|
	KERNEL_COMPRESS_MODE=lzma
 | 
						|
	COMPRESSION_SUFFIX=.lzma
 | 
						|
  define compressKernel
 | 
						|
	$(STAGING_DIR_HOST)/bin/lzma e $(BIN_DIR)/$(1) $(BIN_DIR)/$(1)$(COMPRESSION_SUFFIX) -lc0 -lp2
 | 
						|
  endef
 | 
						|
endif
 | 
						|
 | 
						|
ifeq "$(CONFIG_KERNEL_COMPRESS_MODE_GZIP)" "y"
 | 
						|
	KERNEL_COMPRESS_MODE=gzip
 | 
						|
	COMPRESSION_SUFFIX=.gz
 | 
						|
  define compressKernel
 | 
						|
	gzip -9c $(BIN_DIR)/$(1) > $(BIN_DIR)/$(1)$(COMPRESSION_SUFFIX)
 | 
						|
  endef
 | 
						|
endif
 | 
						|
 | 
						|
# Get load address from kernel image(ELF)
 | 
						|
define getLoadAddress
 | 
						|
0x`readelf -a $(BIN_DIR)/$(VMLINUX_ELF_FILE)|grep "\[ 1\]"|tr -s ' '|cut -d' ' -f6`
 | 
						|
endef
 | 
						|
# Get entry point from kernel image(ELF)
 | 
						|
define getEntryPoint
 | 
						|
`readelf -a $(BIN_DIR)/$(VMLINUX_ELF_FILE)|grep "Entry point address"|cut -d":" -f2`
 | 
						|
endef 
 | 
						|
 | 
						|
# create uImage
 | 
						|
# Usage: mkKernelImage
 | 
						|
define mkKerneluImage
 | 
						|
	$(STAGING_DIR_HOST)/bin/mkimage -A mips -O linux -T kernel -C $(KERNEL_COMPRESS_MODE) \
 | 
						|
		-a $(call getLoadAddress) \
 | 
						|
		-e $(call getEntryPoint) \
 | 
						|
		-n 'Linux Kernel Image' \
 | 
						|
		-d $(BIN_DIR)/$(VMLINUX_BIN_FILE)$(COMPRESSION_SUFFIX) \
 | 
						|
		$(BIN_DIR)/$(VMLINUX_BIN_FILE)$(COMPRESSION_SUFFIX).uImage
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Prepare
 | 
						|
	$(CP) $(KDIR)/vmlinux.elf $(BIN_DIR)/$(VMLINUX_ELF_FILE)
 | 
						|
	$(CP) $(KDIR)/vmlinux $(BIN_DIR)/$(VMLINUX_BIN_FILE)
 | 
						|
	$(call compressKernel,$(VMLINUX_BIN_FILE))
 | 
						|
	$(call mkKerneluImage)
 | 
						|
endef
 | 
						|
 | 
						|
# __ZYXEL__start,
 | 
						|
# Replace 'CONFIG_ECONETSDK_' for menuconfig only supports a single prompt problem.
 | 
						|
PLATFORM_PREFIX=CONFIG_$(call qstrip, $(CONFIG_CUSTOM_SDK_PREFIX))
 | 
						|
# __ZYXEL__end
 | 
						|
 | 
						|
define Image/mkfs/prepare
 | 
						|
	rm -fr $(TARGET_DIR)/etc/modules-boot.d/ $(TARGET_DIR)/etc/modules.d/ $(TARGET_DIR)/overlay
 | 
						|
 | 
						|
	#no need to touch these files, they should be created at run time.
 | 
						|
	#touch $(TARGET_DIR)/var/modules.dep
 | 
						|
	#touch $(TARGET_DIR)/var/modules.symbols
 | 
						|
	#touch $(TARGET_DIR)/var/modules.alias
 | 
						|
	ln -fs /var/modules.dep $(TARGET_DIR)/lib/modules/$(LINUX_VERSION)/
 | 
						|
	ln -fs /var/modules.symbols $(TARGET_DIR)/lib/modules/$(LINUX_VERSION)/
 | 
						|
	ln -fs /var/modules.alias $(TARGET_DIR)/lib/modules/$(LINUX_VERSION)/
 | 
						|
 | 
						|
	@if [ -d $(TARGET_DIR)/etc ]; then \
 | 
						|
	rm -fr $(TARGET_DIR)/etc/config; \
 | 
						|
	$(CP) $(TARGET_DIR)/etc $(TARGET_DIR)/usr/; \
 | 
						|
	rm -fr $(TARGET_DIR)/etc; \
 | 
						|
	ln -sf /tmp/etc $(TARGET_DIR)/etc; \
 | 
						|
	fi
 | 
						|
	
 | 
						|
	@if [ -d $(TARGET_DIR)/var ]; then \
 | 
						|
	$(CP) $(TARGET_DIR)/var $(TARGET_DIR)/usr/; \
 | 
						|
	rm -fr $(TARGET_DIR)/var; \
 | 
						|
	ln -sf /tmp/var $(TARGET_DIR)/var; \
 | 
						|
	fi
 | 
						|
	
 | 
						|
	ln -sf /tmp/var/home $(TARGET_DIR)/home; \
 | 
						|
	
 | 
						|
	$(CP) `find $(LINUX_DIR) -name *.ko` $(TARGET_DIR)/$(TARGET_MODULES_DIR)/
 | 
						|
	$(INSTALL_DIR) $(TARGET_DIR)/userfs
 | 
						|
	$(SCRIPT_DIR)/extractVendorSDKCfg.sh $(PLATFORM_PREFIX) $(TOPDIR)/.config \
 | 
						|
		$(TARGET_DIR)/userfs/profile.cfg
 | 
						|
 | 
						|
	$(call Image/mkfs/prepare/default)
 | 
						|
endef
 | 
						|
 | 
						|
# create image for Econet format
 | 
						|
define getImgSize
 | 
						|
`stat -c%s $(1)`
 | 
						|
endef
 | 
						|
# flag TCSUPPORT_FREE_BOOTBASE & START_ADDR are export from target/linux/en75xx/$(CONFIG_TC_RULE_MAK)
 | 
						|
# check file 'target/linux/en75xx/en7512/target.mk'
 | 
						|
ifneq ($(TCSUPPORT_FREE_BOOTBASE),)
 | 
						|
	TRX_IMG_OPT=-u $(START_ADDR)
 | 
						|
endif
 | 
						|
KERNEL_IMG=$(BIN_DIR)/$(VMLINUX_BIN_FILE)$(COMPRESSION_SUFFIX)
 | 
						|
ROOTFS_IMG=$(KDIR)/root.squashfs
 | 
						|
ifneq ($(ZYXEL_SUPPORT_DEFCFG),)
 | 
						|
DEFCFG_IMG=$(PLATFORM_DIR)/$(SUBTARGET)/defconfig/$(ZYXEL_DEFCFG_FILENAME)
 | 
						|
endif
 | 
						|
#KERNEL_IMG=/home/chlee/workspace/vendor/mtk/tclinux_phoenix/apps/private/tclinux_builder/linux.7z
 | 
						|
#ROOTFS_IMG=/home/chlee/workspace/vendor/mtk/tclinux_phoenix/apps/private/tclinux_builder/rootfs
 | 
						|
define Image/Build/trx_image
 | 
						|
	cat $(KERNEL_IMG) $(ROOTFS_IMG) > $(BIN_DIR)/tclinux
 | 
						|
	$(STAGING_DIR_HOST)/bin/econet-trx -k $(call getImgSize,$(KERNEL_IMG)) \
 | 
						|
		-r $(call getImgSize,$(ROOTFS_IMG)) $(TRX_IMG_OPT) \
 | 
						|
		-f $(BIN_DIR)/tclinux -o $(BIN_DIR)/tclinux.bin \
 | 
						|
		-c $(STAGING_DIR_HOST)/bin/econet-trx_config
 | 
						|
	rm -f $(BIN_DIR)/tclinux
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/zy_trx_image
 | 
						|
	cat $(KERNEL_IMG) $(ROOTFS_IMG) $(DEFCFG_IMG) > $(BIN_DIR)/tclinux
 | 
						|
	$(STAGING_DIR_HOST)/bin/econet-trx \
 | 
						|
		-T ZYXEL \
 | 
						|
		-K $(KERNEL_IMG) \
 | 
						|
		-R $(ROOTFS_IMG) \
 | 
						|
		-C $(DEFCFG_IMG) \
 | 
						|
		-P $(TCPLATFORM) \
 | 
						|
		-I $(CONFIG_MRD_MODEL_ID) \
 | 
						|
		-S $(CONFIG_ZYXEL_FIRMWARE_VERSION) \
 | 
						|
		-s $(CONFIG_ZYXEL_FIRMWARE_VERSION) \
 | 
						|
		$(TRX_IMG_OPT) \
 | 
						|
		-f $(BIN_DIR)/tclinux -o $(BIN_DIR)/ras.bin \
 | 
						|
		-c $(STAGING_DIR_HOST)/bin/econet-trx_config
 | 
						|
	rm -f $(BIN_DIR)/tclinux
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/zy_trx_image_without_defcfg
 | 
						|
	cat $(KERNEL_IMG) $(ROOTFS_IMG) > $(BIN_DIR)/tclinux
 | 
						|
	$(STAGING_DIR_HOST)/bin/econet-trx \
 | 
						|
		-T ZYXEL \
 | 
						|
		-K $(KERNEL_IMG) \
 | 
						|
		-R $(ROOTFS_IMG) \
 | 
						|
		-P $(TCPLATFORM) \
 | 
						|
		-I $(CONFIG_MRD_MODEL_ID) \
 | 
						|
		-S $(CONFIG_ZYXEL_FIRMWARE_VERSION) \
 | 
						|
		-s $(CONFIG_ZYXEL_FIRMWARE_VERSION) \
 | 
						|
		$(TRX_IMG_OPT) \
 | 
						|
		-f $(BIN_DIR)/tclinux -o $(BIN_DIR)/ras.bin \
 | 
						|
		-c $(STAGING_DIR_HOST)/bin/econet-trx_config
 | 
						|
	rm -f $(BIN_DIR)/tclinux
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/Initramfs
 | 
						|
  # all things be done by "Image/Prepare"
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/jffs2-64k
 | 
						|
	dd if=$(KDIR)/root.jffs2-64k of=$(BIN_DIR)/$(IMG_PREFIX)-jffs2-64k.img bs=64k conv=sync
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/jffs2-128k
 | 
						|
	dd if=$(KDIR)/root.jffs2-128k of=$(BIN_DIR)/$(IMG_PREFIX)-jffs2-128k.img bs=128k conv=sync
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/squashfs
 | 
						|
	$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
 | 
						|
	dd if=$(KDIR)/root.squashfs of=$(BIN_DIR)/$(IMG_PREFIX)-squashfs.img bs=128k conv=sync
 | 
						|
# Temporarily using original TRX. for original ECONET firmware style.
 | 
						|
ifneq ($(ZYXEL),)
 | 
						|
ifneq ($(ZYXEL_SUPPORT_DEFCFG),)
 | 
						|
	$(call Image/Build/zy_trx_image)
 | 
						|
else
 | 
						|
	$(call Image/Build/zy_trx_image_without_defcfg)
 | 
						|
endif
 | 
						|
	$(INSTALL_DIR) $(BIN_DIR)/zyxel
 | 
						|
	$(CP) $(BIN_DIR)/ras.bin $(BIN_DIR)/zyxel
 | 
						|
else
 | 
						|
	$(call Image/Build/trx_image)
 | 
						|
endif
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build/merge_firmware
 | 
						|
 | 
						|
ifneq ($(ZYXEL),)
 | 
						|
ifneq ($(ZYXEL_SUPPORT_DEFCFG),)
 | 
						|
	$(call Image/Build/zy_trx_image)
 | 
						|
else
 | 
						|
	$(call Image/Build/zy_trx_image_without_defcfg)
 | 
						|
endif
 | 
						|
	$(INSTALL_DIR) $(BIN_DIR)/zyxel
 | 
						|
	$(CP) $(BIN_DIR)/ras.bin $(BIN_DIR)/zyxel
 | 
						|
else
 | 
						|
	$(call Image/Build/trx_image)
 | 
						|
endif
 | 
						|
 | 
						|
endef
 | 
						|
 | 
						|
define Image/Build
 | 
						|
	$(call Image/Build/$(1))
 | 
						|
endef
 | 
						|
 | 
						|
$(eval $(call BuildImage))
 |