1#
2# Copyright (C) 2015 OpenWrt.org
3#
4# This is free software, licensed under the GNU General Public License v2.
5# See /LICENSE for more information.
6#
7include $(TOPDIR)/rules.mk
8include $(INCLUDE_DIR)/image.mk
9include $(INCLUDE_DIR)/host.mk
10
11FAT32_BLOCK_SIZE=1024
12FAT32_BLOCKS=$(shell echo $$(($(CONFIG_ZYNQ_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
13
14#################################################
15# Images
16#################################################
17
18define Image/boot-imgs
19	# Copy zImage to BIN_DIR
20	$(CP) $(KDIR)/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage
21
22	$(call Image/BuildKernel/MkuImage, none, $(KERNEL_LOADADDR), \
23		$(KERNEL_ENTRY_POINT), $(KDIR)/zImage, \
24		$(BIN_DIR)/$(IMG_PREFIX)-uImage)
25
26	$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,\
27		$(BIN_DIR)/$(IMG_PREFIX)-system.dtb)
28
29	$(call Image/mkfs/cpiogz)
30	$(call Image/mkfs/targz)
31
32	# Create uboot cpio.gz
33	mkimage -A arm -T ramdisk -C gzip -n "$(PROFILE) OpenWRT rootfs" \
34		-d $(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz \
35		$(BIN_DIR)/$(IMG_PREFIX)-uramdisk.image.gz
36
37	# create FIT image with rootfs
38	./mkits.sh \
39		-D $(DEVICE_LC) -o $(KDIR)/fit-$(DEVICE_LC).its -k $(KDIR)/zImage \
40		-d $(BIN_DIR)/$(IMG_PREFIX)-system.dtb \
41		-C none -a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY_POINT) \
42		-A $(ARCH) -v $(LINUX_VERSION) \
43		-r $(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz -z gzip
44	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/fit-$(DEVICE_LC).its $(KDIR)/fit-$(DEVICE_LC).itb
45	$(CP) $(KDIR)/fit-$(DEVICE_LC).itb $(BIN_DIR)/$(IMG_PREFIX)-fit.itb
46	ln -fs $(IMG_PREFIX)-fit.itb $(BIN_DIR)/fit.itb
47endef
48
49define Image/Build/Zynq
50	# Create SD card image
51	rm -f $(KDIR_TMP)/$(IMG_PREFIX)-boot.img
52	mkfs.fat $(KDIR_TMP)/$(IMG_PREFIX)-boot.img -C $(FAT32_BLOCKS)
53	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-boot.img $(KDIR)/uboot-$(IMG_PREFIX)-u-boot.bin ::boot.bin
54	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-boot.img $(BIN_DIR)/$(DEVICE_DTS)-system.dtb ::devicetree.dtb
55	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-boot.img $(KDIR)/uboot-$(IMG_PREFIX)-u-boot-dtb.img ::u-boot.img
56	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-boot.img $(KDIR)/uboot-$(IMG_PREFIX)-uEnv.txt ::uEnv.txt
57	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-boot.img $(BIN_DIR)/$(IMG_PREFIX)-uImage ::uImage
58
59	./gen_zynq_sdcard_img.sh \
60		$(BIN_DIR)/$(IMG_PREFIX)-sdcard-vfat-$(1).img \
61		$(KDIR_TMP)/$(IMG_PREFIX)-boot.img \
62		$(KDIR)/root.$(1) \
63		$(CONFIG_ZYNQ_SD_BOOT_PARTSIZE) \
64		$(CONFIG_TARGET_ROOTFS_PARTSIZE)
65
66	$(if $(CONFIG_TARGET_IMAGES_GZIP),gzip -9n -c $(BIN_DIR)/$(IMG_PREFIX)-sdcard-vfat-$(1).img > $(BIN_DIR)/$(IMG_PREFIX)-sdcard-vfat-$(1).img.gz)
67endef
68
69#################################################
70# Devices
71#################################################
72
73# default kernel load address
74KERNEL_LOADADDR=0x8000
75KERNEL_ENTRY_POINT=0x8000
76
77### Device macros ###
78define Device/Default
79	IMG_PREFIX := zynq
80	DEVICE_DTS :=
81	PROFILE_SANITIZED :=
82endef
83DEVICE_VARS += DEVICE_DTS
84
85define Device/DefaultConfig
86	DEVICE_LC = $(1)
87	IMG_PREFIX = zynq-$(1)
88	DEVICE_DTS = zynq-$(1)
89endef
90
91### ZC702 ###
92define Device/ZC702
93	$(call Device/DefaultConfig,zc702)
94endef
95
96define Device/ZED
97	$(call Device/DefaultConfig,zed)
98endef
99
100define Device/ZYBO
101	$(call Device/DefaultConfig,zybo)
102endef
103
104define Image/BuildKernel
105	$(eval $(call Device/$(PROFILE)))
106	$(call Image/boot-imgs)
107endef
108
109define Image/Build
110	$(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1).img
111
112	$(call Image/Build/Zynq,$(1))
113endef
114
115$(eval $(call BuildImage))
116