108f63cb7a942aaa314c3b0e01b3ff417d33eb97
[oweals/openwrt.git] / target / linux / apm821xx / image / Makefile
1 #
2 # This is free software, licensed under the GNU General Public License v2.
3 # See /LICENSE for more information.
4 #
5 include $(TOPDIR)/rules.mk
6 include $(INCLUDE_DIR)/image.mk
7
8 DEVICE_VARS += IMAGE_SIZE DTB_SIZE
9
10 define Build/boot-img
11         $(RM) -rf $@.bootdir
12         mkdir -p $@.bootdir/boot
13
14         $(CP) $@.scr $@.bootdir/boot/boot.scr
15         $(CP) $(IMAGE_KERNEL).dtb $@.bootdir/boot/$(DEVICE_DTB)
16         $(CP) $(IMAGE_KERNEL) $@.bootdir/boot/uImage
17
18         genext2fs --block-size $(BLOCKSIZE:%k=%Ki) \
19                 --size-in-blocks $$((1024 * $(CONFIG_TARGET_KERNEL_PARTSIZE))) \
20                 --root $@.bootdir $@.boot
21
22         # convert it to revision 1 - needed for u-boot ext2load
23         $(STAGING_DIR_HOST)/bin/tune2fs -O filetype $@.boot
24         $(STAGING_DIR_HOST)/bin/e2fsck -pDf $@.boot > /dev/null
25 endef
26
27 define Build/boot-script
28         $(STAGING_DIR_HOST)/bin/mkimage -A powerpc -T script -C none -n "$(PROFILE) Boot Script" \
29                 -d mbl_boot.scr \
30                 $@.scr
31 endef
32
33 define Build/copy-file
34         cat "$(1)" > "$@"
35 endef
36
37 define Build/create-uImage-dtb
38         # flat_dt target expect FIT image - which WNDR4700's uboot doesn't support
39         -$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) \
40                 -O linux -T kernel -C none \
41                 -n '$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION)' \
42                 -d "$@.dtb" "$@.dtb.uimage"
43 endef
44
45 define Build/dtb
46         $(call Image/BuildDTB,../dts/$(DEVICE_DTS).dts,$@.dtb,,--space $(DTB_SIZE))
47 endef
48
49 define Build/export-dtb
50         cp $(IMAGE_KERNEL).dtb $@
51 endef
52
53 define Build/hdd-img
54         ./mbl_gen_hdd_img.sh $@ $@.boot $(IMAGE_ROOTFS) $(CONFIG_TARGET_KERNEL_PARTSIZE) $(CONFIG_TARGET_ROOTFS_PARTSIZE)
55 endef
56
57 define Build/MerakiAdd-dtb
58         $(call Image/BuildDTB,../dts/$(DEVICE_DTS).dts,$@.dtb)
59         ( \
60                 dd if=$@.dtb bs=$(DTB_SIZE) conv=sync; \
61                 cat $@ ; \
62         ) > $@.new
63         @mv $@.new $@
64 endef
65
66 define Build/MerakiNAND
67         -$(STAGING_DIR_HOST)/bin/mkmerakifw \
68                 -B $(BOARD_NAME) -s \
69                 -i $@ \
70                 -o $@.new
71         @cp $@.new $@
72 endef
73
74 define Build/MuImage-initramfs
75         rm -rf $@.fakerd $@.new
76
77         dd if=/dev/zero of=$@.fakerd bs=32 count=1 conv=sync
78
79         # Netgear used an old uboot that doesn't have FIT support.
80         # So we are stuck with either a full ext2/4 fs in a initrd.
81         # ... or we try to make the "multi" image approach to work
82         # for us.
83         #
84         # Sadly, the "multi" image has to consists of three
85         # "fixed" parts in the following "fixed" order:
86         # 1. The kernel which is in $@
87         # 2. The (fake) initrd which is in $@.fakerd
88         # 3. The device tree binary which is in $@.dtb
89         #
90         # Now, given that we use the function for the kernel which
91         # already has a initramfs image inside, we still have to
92         # add a "fake" initrd (which a mkimage header) in the second
93         # part of the legacy multi image. Since we need to put the
94         # device tree stuff into part 3.
95
96         -$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) -O linux -T multi \
97                 -C $(1) -a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY) \
98                 -n '$(BOARD_NAME) initramfs' -d $@:$@.fakerd:$@.dtb $@.new
99         mv $@.new $@
100         rm -rf $@.fakerd
101 endef
102
103 define Build/prepend-dtb
104         cat "$@.dtb.uimage" "$@" > "$@.new"
105         mv "$@.new" "$@"
106 endef
107
108 define Image/cpiogz
109         ( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9n >$(KDIR_TMP)/$(IMG_PREFIX)-rootfs.cpio.gz )
110 endef
111
112 define Device/Default
113   PROFILES := Default
114   KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
115   DEVICE_DTS :=
116   KERNEL_ENTRY := 0x00000000
117   KERNEL_LOADADDR := 0x00000000
118   DEVICE_DTS_DIR := ../dts
119   SUPPORTED_DEVICES = $(subst _,$(comma),$(1))
120 endef
121
122 ifeq ($(SUBTARGET),nand)
123
124 define Device/meraki_mr24
125   DEVICE_VENDOR := Cisco Meraki
126   DEVICE_MODEL := MR24
127   DEVICE_PACKAGES := kmod-spi-gpio -swconfig
128   BOARD_NAME := mr24
129   DEVICE_DTS := meraki-mr24
130   IMAGES := sysupgrade.bin
131   DTB_SIZE := 64512
132   IMAGE_SIZE := 8191k
133   KERNEL := kernel-bin | lzma | uImage lzma | MerakiAdd-dtb | MerakiNAND
134   KERNEL_INITRAMFS := kernel-bin | lzma | dtb | MuImage-initramfs lzma
135   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
136   UBINIZE_OPTS := -E 5
137   SUPPORTED_DEVICES += mr24
138 endef
139 TARGET_DEVICES += meraki_mr24
140
141 define Device/meraki_mx60
142   DEVICE_VENDOR := Cisco Meraki
143   DEVICE_MODEL := MX60/MX60W
144   DEVICE_PACKAGES := kmod-spi-gpio kmod-usb-ledtrig-usbport kmod-usb-dwc2 \
145                      kmod-usb-storage block-mount
146   BOARD_NAME := mx60
147   DEVICE_DTS := meraki-mx60
148   BLOCKSIZE := 63k
149   IMAGES := sysupgrade.bin
150   DTB_SIZE := 64512
151   IMAGE_SIZE := 1021m
152   KERNEL_SIZE := 4031k
153   KERNEL := kernel-bin | gzip | uImage gzip | MerakiAdd-dtb | MerakiNAND
154   KERNEL_INITRAMFS := kernel-bin | gzip | dtb | MuImage-initramfs gzip
155   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
156   UBINIZE_OPTS := -E 5
157   SUPPORTED_DEVICES += mx60
158 endef
159 TARGET_DEVICES += meraki_mx60
160
161 define Device/netgear_wndap6x0
162   DEVICE_VENDOR := NETGEAR
163   DEVICE_PACKAGES := kmod-eeprom-at24
164   SUBPAGESIZE := 256
165   PAGESIZE := 512
166   BLOCKSIZE := 16k
167   DTB_SIZE := 32768
168   IMAGE_SIZE := 27392k
169   IMAGES := sysupgrade.bin factory.img
170   KERNEL_SIZE := 4032k
171   KERNEL := dtb | kernel-bin | gzip | MuImage-initramfs gzip
172   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
173   IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
174   UBINIZE_OPTS := -E 5
175 endef
176
177 define Device/netgear_wndap620
178   $(Device/netgear_wndap6x0)
179   DEVICE_MODEL := WNDAP620 (Premium Wireless-N)
180   DEVICE_DTS := netgear-wndap620
181 endef
182 TARGET_DEVICES += netgear_wndap620
183
184 define Device/netgear_wndap660
185   $(Device/netgear_wndap6x0)
186   DEVICE_MODEL := WNDAP660 (Dual Radio Dual Band Wireless-N)
187   DEVICE_DTS := netgear-wndap660
188 endef
189 TARGET_DEVICES += netgear_wndap660
190
191 define Device/netgear_wndr4700
192   DEVICE_VENDOR := NETGEAR
193   DEVICE_MODEL := Centria N900 WNDR4700/WNDR4720
194   DEVICE_PACKAGES := badblocks block-mount e2fsprogs \
195         kmod-dm kmod-fs-ext4 kmod-fs-vfat kmod-usb-ledtrig-usbport \
196         kmod-md-mod kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-iso8859-15 \
197         kmod-nls-utf8 kmod-usb3 kmod-usb-dwc2 kmod-usb-storage \
198         partx-utils
199   BOARD_NAME := wndr4700
200   DEVICE_DTS := netgear-wndr4700
201   PAGESIZE := 2048
202   SUBPAGESIZE := 512
203   BLOCKSIZE := 128k
204   DTB_SIZE := 131008
205   IMAGE_SIZE := 24960k
206   IMAGES := factory.img sysupgrade.bin
207   ARTIFACTS := device-tree.dtb
208   KERNEL_SIZE := 3584k
209   # append a fake/empty rootfs to fool netgear's uboot
210   # CHECK_DNI_FIRMWARE_ROOTFS_INTEGRITY in do_chk_dniimg()
211   KERNEL := kernel-bin | lzma | uImage lzma | pad-offset $$(BLOCKSIZE) 64 | \
212             append-uImage-fakehdr filesystem | dtb | create-uImage-dtb | prepend-dtb
213   KERNEL_INITRAMFS := kernel-bin | gzip | dtb | MuImage-initramfs gzip
214   IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
215                        netgear-dni | check-size $$$$(IMAGE_SIZE)
216   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
217   ARTIFACT/device-tree.dtb := export-dtb | uImage none
218   NETGEAR_BOARD_ID := WNDR4700
219   NETGEAR_HW_ID := 29763875+128+256
220   UBINIZE_OPTS := -E 5
221   SUPPORTED_DEVICES += wndr4700
222 endef
223 TARGET_DEVICES += netgear_wndr4700
224
225 endif
226
227 ifeq ($(SUBTARGET),sata)
228
229 define Device/wd_mybooklive
230   DEVICE_VENDOR := Western Digital
231   DEVICE_MODEL := My Book Live Series (Single + Duo)
232   DEVICE_PACKAGES := kmod-usb-dwc2 kmod-usb-ledtrig-usbport kmod-usb-storage kmod-fs-vfat wpad-basic
233   DEVICE_TYPE := nas
234   DEVICE_DTS := wd-mybooklive
235   SUPPORTED_DEVICES += mbl wd,mybooklive-duo
236   BLOCKSIZE := 1k
237   DTB_SIZE := 16384
238   KERNEL := kernel-bin | dtb | gzip | uImage gzip
239   KERNEL_INITRAMFS := kernel-bin | gzip | dtb | MuImage-initramfs gzip
240   IMAGES := factory.img.gz sysupgrade.img.gz
241   ARTIFACTS := apollo3g.dtb
242   DEVICE_DTB := apollo3g.dtb
243   FILESYSTEMS := ext4 squashfs
244   IMAGE/factory.img.gz := boot-script | boot-img | hdd-img | gzip
245   IMAGE/sysupgrade.img.gz := boot-script | boot-img | hdd-img | gzip | append-metadata
246   ARTIFACT/apollo3g.dtb := export-dtb
247 endef
248
249 TARGET_DEVICES += wd_mybooklive
250
251 endif
252
253 $(eval $(call BuildImage))