1#
2# Copyright (C) 2009-2013 OpenWrt.org
3#
4# This is free software, licensed under the GNU General Public License v2.
5# See /LICENSE for more information.
6#
7
8NAND_BLOCKSIZE := 2048-128k
9
10include $(TOPDIR)/rules.mk
11include $(INCLUDE_DIR)/image.mk
12
13DEVICE_VARS += DEVICE_DTS KERNEL_SIZE PAGESIZE BLOCKSIZE SUBPAGESIZE KERNEL_IN_UBI
14KERNEL_LOADADDR:=0x8000
15TARGET_DEVICES = linksys-audi linksys-viper dockstar goflexnet goflexhome iconnect
16
17define Device/Default
18  KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
19  KERNEL := kernel-bin | append-dtb | uImage none
20  KERNEL_NAME := zImage
21  KERNEL_IN_UBI :=
22endef
23
24define Device/dockstar
25  DEVICE_DTS := kirkwood-dockstar
26  PAGESIZE := 2048
27  SUBPAGESIZE := 512
28  BLOCKSIZE := 128KiB
29  FILESYSTEMS := squashfs
30  PROFILES := Generic DOCKSTAR
31  IMAGES := factory.bin sysupgrade.tar
32  IMAGE/factory.bin := append-ubi
33  IMAGE/sysupgrade.tar := sysupgrade-nand
34  KERNEL_IN_UBI := 1
35  KERNEL := kernel-bin | append-dtb
36endef
37
38define Device/goflexnet
39$(Device/dockstar)
40  PROFILES := Generic GOFLEXNET
41  DEVICE_DTS := kirkwood-goflexnet
42endef
43
44define Device/goflexhome
45$(Device/dockstar)
46  PROFILES := Generic GOFLEXHOME
47  DEVICE_DTS := kirkwood-goflexhome
48endef
49
50define Device/iconnect
51$(Device/dockstar)
52  PROFILES := Generic ICONNECT
53  DEVICE_DTS := kirkwood-iconnect
54endef
55
56define Device/linksys-audi
57  DEVICE_DTS := kirkwood-linksys-audi
58  PAGESIZE := 512
59  SUBPAGESIZE := 256
60  BLOCKSIZE := 16KiB
61  KERNEL_SIZE := 2624k
62  FILESYSTEMS := squashfs
63  PROFILES := Generic AUDI
64  IMAGES := factory.bin sysupgrade.tar
65  IMAGE/factory.bin := append-kernel $$$$(KERNEL_SIZE) | append-ubi
66  IMAGE/sysupgrade.tar := sysupgrade-nand
67endef
68
69define Device/linksys-viper
70  DEVICE_DTS := kirkwood-linksys-viper
71  PAGESIZE := 2048
72  SUBPAGESIZE := 512
73  BLOCKSIZE := 128KiB
74  KERNEL_SIZE := 2688k
75  FILESYSTEMS := squashfs
76  PROFILES := Generic VIPER
77  IMAGES := factory.bin sysupgrade.tar
78  IMAGE/factory.bin := append-kernel $$$$(KERNEL_SIZE) | append-ubi
79  IMAGE/sysupgrade.tar := sysupgrade-nand
80endef
81
82define Build/append-dtb
83	cat $(DTS_DIR)/$(DEVICE_DTS).dtb >> $@
84endef
85
86define Image/BuildKernel/Template
87
88	$(CP) $(KDIR)/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage
89	echo -ne '\x00\x00\x00\x00' >> $(BIN_DIR)/$(IMG_PREFIX)-zImage
90	$(call Image/BuildKernel/MkuImage, \
91		none, 0x8000, 0x8000, \
92		$(BIN_DIR)/$(IMG_PREFIX)-zImage, \
93		$(BIN_DIR)/$(IMG_PREFIX)-uImage \
94	)
95
96 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
97	$(CP) $(KDIR)/zImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-zImage-initramfs
98	echo -ne '\x00\x00\x00\x00' >> $(BIN_DIR)/$(IMG_PREFIX)-zImage-initramfs
99	$(call Image/BuildKernel/MkuImage, \
100		none, 0x8000, 0x8000, \
101		$(BIN_DIR)/$(IMG_PREFIX)-zImage-initramfs, \
102		$(BIN_DIR)/$(IMG_PREFIX)-uImage-initramfs \
103	)
104 endif
105
106 ifneq ($(1),)
107	$(CP) $(DTS_DIR)/kirkwood-$(1).dtb $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb
108
109	$(CP) $(KDIR)/zImage $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage
110	cat $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb >> $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage
111	$(call Image/BuildKernel/MkuImage, \
112		none, 0x8000, 0x8000, \
113		$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage, \
114		$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-uImage \
115	)
116
117  ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
118	$(CP) $(KDIR)/zImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage-initramfs
119	cat $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb >> $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage-initramfs
120	$(call Image/BuildKernel/MkuImage, \
121		none, 0x8000, 0x8000, \
122		$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-zImage-initramfs, \
123		$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-uImage-initramfs \
124	)
125  endif
126 endif
127endef
128
129define Image/InstallKernel/Template
130
131 ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_KERNEL),)
132	$(INSTALL_DIR) $(TARGET_DIR)/boot
133   ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_UIMAGE),)
134	$(CP) $(BIN_DIR)/$(IMG_PREFIX)-uImage $(TARGET_DIR)/boot/
135	ln -sf $(IMG_PREFIX)-uImage $(TARGET_DIR)/boot/uImage
136   endif
137   ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_ZIMAGE),)
138	$(CP) $(BIN_DIR)/$(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/
139	ln -sf $(IMG_PREFIX)-zImage $(TARGET_DIR)/boot/zImage
140   endif
141 endif
142
143 ifneq ($(CONFIG_TARGET_ROOTFS_INCLUDE_DTB),)
144	$(INSTALL_DIR) $(TARGET_DIR)/boot
145  ifneq ($(1),)
146	$(CP) $(BIN_DIR)/$(IMG_PREFIX)-$(1).dtb $(TARGET_DIR)/boot/
147	ln -sf $(IMG_PREFIX)-$(1).dtb $(TARGET_DIR)/boot/$(1).dtb
148  endif
149 endif
150endef
151
152define Image/Build/jffs2-nand-2048-128k
153	dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-$(1).img \
154		bs=2048 conv=sync
155endef
156
157define Image/Build/squashfs
158	$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
159	( \
160		dd if=$(KDIR)/zImage bs=4096k conv=sync; \
161		dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \
162	) > $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-$(1).img
163endef
164
165define Image/Build/ubifs
166
167 ifneq ($($(PROFILE)_UBIFS_OPTS),)
168	$(CP) $(KDIR)/root.ubifs $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs.ubifs
169 endif
170endef
171
172define Image/Build/ubi
173
174 ifneq ($($(PROFILE)_UBI_OPTS),)
175	$(CP) $(KDIR)/root.ubi $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-rootfs.ubi
176 endif
177endef
178
179Image/BuildKernel/Template/Generic=$(call Image/BuildKernel/Template)
180Image/InstallKernel/Template/Generic=$(call Image/InstallKernel/Template)
181
182Image/BuildKernel/Template/IB62X0=$(call Image/BuildKernel/Template,ib62x0)
183Image/InstallKernel/Template/IB62X0=$(call Image/InstallKernel/Template,ib62x0)
184
185Image/BuildKernel/Template/IOMEGA_IX2_200=$(call Image/BuildKernel/Template,iomega_ix2_200)
186Image/InstallKernel/Template/IOMEGA_IX2_200=$(call Image/InstallKernel/Template,iomega_ix2_200)
187
188Image/BuildKernel/Template/NSA310S=$(call Image/BuildKernel/Template,nsa310s)
189Image/InstallKernel/Template/NSA310S=$(call Image/InstallKernel/Template,nsa310s)
190
191Image/BuildKernel/Template/POGOE02=$(call Image/BuildKernel/Template,pogo_e02)
192Image/InstallKernel/Template/POGOE02=$(call Image/InstallKernel/Template,pogo_e02)
193
194Image/BuildKernel/Template/SHEEVAPLUG=$(call Image/BuildKernel/Template,sheevaplug)
195Image/InstallKernel/Template/SHEEVAPLUG=$(call Image/InstallKernel/Template,sheevaplug)
196
197Image/BuildKernel/Template/SHEEVAPLUGSATA=$(call Image/BuildKernel/Template,sheevaplug-esata)
198Image/InstallKernel/Template/SHEEVAPLUGSATA=$(call Image/InstallKernel/Template,sheevaplug-esata)
199
200Image/BuildKernel/Template/GuruplugServerPlus=$(call Image/BuildKernel/Template,guruplug-server-plus)
201Image/InstallKernel/Template/GuruplugServerPlus=$(call Image/InstallKernel/Template,guruplug-server-plus)
202
203Image/BuildKernel/Template/Topkick1281P2=$(call Image/BuildKernel/Template,topkick)
204Image/InstallKernel/Template/Topkick1281P2=$(call Image/InstallKernel/Template,topkick)
205
206define Image/BuildKernel
207	$(call Image/BuildKernel/Template/$(PROFILE))
208endef
209
210define Image/InstallKernel
211	$(call Image/InstallKernel/Template/$(PROFILE))
212endef
213
214define Image/Build
215	$(if $(Image/Build/$(1)), \
216		$(call Image/Build/$(1),$(1)), \
217		$(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE_SANITIZED)-$(1).img \
218	)
219endef
220
221$(eval $(call BuildImage))
222