aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/apm821xx/image/Makefile
blob: b150ab8af5b8978ba887c6f32f25eae334f6ae87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#
# 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
include $(INCLUDE_DIR)/host.mk

DEVICE_VARS += DEVICE_PROFILE IMAGE_SIZE DTB_SIZE

define Device/Default
  PROFILES := Default
  KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
  DEVICE_PROFILE :=
  DEVICE_DTS :=
  KERNEL_ENTRY := 0x00000000
  KERNEL_LOADADDR := 0x00000000
  DEVICE_DTS_DIR := ../dts
endef

define Build/dtb
	$(call Image/BuildDTB,../dts/$(DEVICE_DTS).dts,$@.dtb,,--space $(DTB_SIZE))
endef

define Build/export-dtb
	cp $(IMAGE_KERNEL).dtb $@
endef

ifeq ($(SUBTARGET),nand)

define Image/cpiogz
	( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9n >$(KDIR_TMP)/$(IMG_PREFIX)-rootfs.cpio.gz )
endef

define Build/copy-file
	cat "$(1)" > "$@"
endef

define Build/MerakiAdd-dtb
	$(call Image/BuildDTB,../dts/$(DEVICE_DTS).dts,$@.dtb)
	( \
		dd if=$@.dtb bs=$(DTB_SIZE) conv=sync; \
		dd if=$@ bs=$(BLOCKSIZE) conv=sync; \
	) > $@.new
	@mv $@.new $@
endef

define Build/MerakiAdd-initramfs
	$(call Image/cpiogz)

	-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) -O linux -T ramdisk \
		-C gzip -n "$(PROFILE) rootfs" \
		-d $(KDIR_TMP)/$(IMG_PREFIX)-rootfs.cpio.gz \
		$(KDIR_TMP)/$(IMG_PREFIX)-uramdisk.image.gz

	( \
		dd if=$@ bs=1k conv=sync; \
		dd if=$(KDIR_TMP)/$(IMG_PREFIX)-uramdisk.image.gz bs=$(BLOCKSIZE) conv=sync; \
	) > $@.new
	@mv $@.new $@
endef

define Build/MerakiNAND
	-$(STAGING_DIR_HOST)/bin/mkmerakifw \
		-B $(DEVICE_PROFILE) -s \
		-i $@ \
		-o $@.new
	@cp $@.new $@
endef

define Device/mr24
  DEVICE_TITLE := Cisco Meraki MR24
  DEVICE_PACKAGES := kmod-spi-gpio
  DEVICE_PROFILE := MR24
  DEVICE_DTS := MR24
  BLOCKSIZE := 63k
  IMAGES := sysupgrade.tar
  DTB_SIZE := 64512
  KERNEL_SIZE := 1984k
  IMAGE_SIZE := 8191k
  KERNEL := kernel-bin | lzma | uImage lzma | MerakiAdd-dtb | MerakiNAND
  KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux | lzma | uImage lzma | \
		      check-size $$(KERNEL_SIZE) | \
		      MerakiAdd-dtb | pad-to 2047k | MerakiAdd-initramfs | \
		      MerakiNAND
  IMAGE/sysupgrade.tar := sysupgrade-tar
  UBINIZE_OPTS := -E 5
endef
TARGET_DEVICES += mr24

define Device/mx60
  DEVICE_TITLE := Cisco Meraki MX60
  DEVICE_PACKAGES := kmod-spi-gpio kmod-usb-ledtrig-usbport kmod-usb-dwc2 \
  kmod-usb-storage block-mount
  DEVICE_PROFILE := MX60
  DEVICE_DTS := MX60
  BLOCKSIZE := 63k
  IMAGES := sysupgrade.tar
  DTB_SIZE := 64512
  # The kernel size will need to match the offset defined in mkmerakifw.c,
  # otherwise the final image will fail to boot. This is set within the
  # MX60 kernel header definition which is found at
  # ./tools/firmware-utils/src/mkmerakifw.c, line 103~
  KERNEL_SIZE := 2984k
  IMAGE_SIZE := 1021m
  KERNEL := kernel-bin | gzip | uImage gzip | MerakiAdd-dtb | MerakiNAND
  KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux | gzip | uImage gzip | \
		      check-size $$(KERNEL_SIZE) | \
		      MerakiAdd-dtb | pad-to 2047k | MerakiAdd-initramfs | \
		      MerakiNAND
  IMAGE/sysupgrade.tar := sysupgrade-tar
  UBINIZE_OPTS := -E 5
endef
TARGET_DEVICES += mx60

define Device/mx60w
$(Device/mx60)
  DEVICE_TITLE := Cisco Meraki MX60W
endef
TARGET_DEVICES += mx60w

define Build/create-uImage-dtb
	# flat_dt target expect FIT image - which WNDR4700's uboot doesn't support
	-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) \
		-O linux -T kernel -C none \
		-n '$(call toupper,$(LINUX_KARCH)) LEDE Linux-$(LINUX_VERSION)' \
		-d $(IMAGE_KERNEL).dtb $@.new
	@mv $@.new $@
endef

define Build/append-fakerootfs
	rm -rf $@.fakerootsquashfs $@.fakefs

	# append a fake/empty rootfs to fool netgear's uboot
	# CHECK_DNI_FIRMWARE_ROOTFS_INTEGRITY in do_chk_dniimg()
	dd if=/dev/zero of=$@.fakerd bs=16 count=1 conv=sync

	-$(STAGING_DIR_HOST)/bin/mkimage \
		-A $(LINUX_KARCH) -O linux -T filesystem -C none \
		-a 0x00000000 -e 0x00000000 \
		-n '$(DEVICE_PROFILE) fakerootfs' \
		-d $@.fakerd $@.fakefs

	cat $@.fakefs >> $@
	rm -rf $@.fakerootsquashfs $@.fakefs
endef

define Build/wndr4700-specialImage
	rm -rf $@.fakerd $@.new

	dd if=/dev/zero of=$@.fakerd bs=32 count=1 conv=sync

	# Netgear used an old uboot that doesn't have FIT support.
	# So we are stuck with either a full ext2/4 fs in a initrd.
	# ... or we try to make the "multi" image approach to work
	# for us.
	#
	# Sadly, the "multi" image has to consists of three
	# "fixed" parts in the following "fixed" order:
	# 1. The kernel which is in $@
	# 2. The (fake) initrd which is in $@.fakerd
	# 3. The device tree binary which is in $@.dtb
	#
	# Now, given that we use the function for the kernel which
	# already has a initramfs image inside, we still have to
	# add a "fake" initrd (which a mkimage header) in the second
	# part of the legacy multi image. Since we need to put the
	# device tree stuff into part 3.

	-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) -O linux -T multi \
		-C $(1) -a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY) \
		-n '$(DEVICE_PROFILE) initramfs' -d $@:$@.fakerd:$@.dtb $@.new
	mv $@.new $@
	rm -rf $@.fakerd
endef

define Device/WNDR4700
  DEVICE_TITLE := Netgear Centria N900 WNDR4700/WNDR4720
  DEVICE_PACKAGES := badblocks block-mount e2fsprogs \
	kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
	kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
	kmod-nls-utf8 kmod-usb3 kmod-usb-dwc2 kmod-usb-storage \
	partx-utils
  DEVICE_NAME := wndr4700
  DEVICE_PROFILE := wndr4700
  DEVICE_DTS := wndr4700
  PAGESIZE := 2048
  SUBPAGESIZE := 512
  BLOCKSIZE := 128k
  DTB_SIZE := 131008
  IMAGE_SIZE := 24960k
  IMAGES := factory.img sysupgrade.tar kernel.dtb
  KERNEL_SIZE := 1920k
  KERNEL := dtb | kernel-bin | lzma | uImage lzma | pad-offset $$(BLOCKSIZE) 64 | append-fakerootfs
  KERNEL_INITRAMFS := kernel-bin | gzip | dtb | wndr4700-specialImage gzip
  IMAGE/factory.img := create-uImage-dtb | append-kernel | pad-to 2M | append-ubi | \
		       netgear-dni | check-size $$$$(IMAGE_SIZE)
  IMAGE/sysupgrade.tar := sysupgrade-tar
  IMAGE/kernel.dtb := export-dtb | uImage none
  NETGEAR_BOARD_ID := WNDR4700
  NETGEAR_HW_ID := 29763875+128+256
  UBINIZE_OPTS := -E 5
endef
TARGET_DEVICES += WNDR4700

endif

ifeq ($(SUBTARGET),sata)

### Image scripts for the WD My Book Live Series ###
define Build/boot-script
	$(STAGING_DIR_HOST)/bin/mkimage -A powerpc -T script -C none -n "$(PROFILE) Boot Script" \
		-d mbl_boot.scr \
		$@.scr
endef

define Build/boot-img
	$(RM) -rf $@.bootdir
	mkdir -p $@.bootdir/boot

	$(CP) $@.scr $@.bootdir/boot/boot.scr
	$(CP) $(IMAGE_KERNEL).dtb $@.bootdir/boot/$(DEVICE_DTB)
	$(CP) $(IMAGE_KERNEL) $@.bootdir/boot/uImage

	genext2fs --block-size $(BLOCKSIZE:%k=%Ki) --size-in-blocks $$((1024 * $(BOOT_SIZE))) --root $@.bootdir $@.boot

	# convert it to revision 1 - needed for u-boot ext2load
	$(STAGING_DIR_HOST)/bin/tune2fs -O filetype $@.boot
	$(STAGING_DIR_HOST)/bin/e2fsck -pDf $@.boot > /dev/null
endef

define Build/hdd-img
	./mbl_gen_hdd_img.sh $@ $@.boot $(IMAGE_ROOTFS)
endef

define Device/MyBookLiveDefault
  IMAGE_SIZE := 48m
  BLOCKSIZE := 1k
  DTB_SIZE := 16384
  KERNEL := kernel-bin | dtb | gzip | uImage gzip
  KERNEL_INITRAMFS := kernel-bin | dtb | gzip | uImage gzip
  BOOT_SIZE := 8
  IMAGES := rootfs.img kernel.dtb
  DEVICE_DTB := apollo3g.dtb
  FILESYSTEMS := ext4
  IMAGE/kernel.dtb := export-dtb
  IMAGE/rootfs.img := boot-script | boot-img | hdd-img
endef

define Device/MyBookLiveSingle
$(Device/MyBookLiveDefault)
  DEVICE_TITLE := Western Digital My Book Live
  DEVICE_DTS := apollo3g
  DEVICE_PROFILE := apollo3g
endef

TARGET_DEVICES += MyBookLiveSingle

define Device/MyBookLiveDuo
$(Device/MyBookLiveDefault)
  DEVICE_TITLE := Western Digital My Book Live Duo
  DEVICE_PACKAGES := kmod-usb-dwc2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-fs-vfat wpad-mini
  DEVICE_DTS := apollo3g-duo
  DEVICE_PROFILE := ap2nc
endef

TARGET_DEVICES += MyBookLiveDuo

endif

$(eval $(call BuildImage))