e08a3125bd5367fd418d00ccc21ff5d86314ef42
[openwrt/staging/jow.git] / target / linux / bcm47xx / image / Makefile
1 #
2 # Copyright (C) 2006-2016 OpenWrt.org
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7 include $(TOPDIR)/rules.mk
8 include $(INCLUDE_DIR)/image.mk
9
10 USB1_PACKAGES := kmod-usb-ohci
11 USB2_PACKAGES := $(USB1_PACKAGES) kmod-usb2
12
13 define Build/Clean
14 $(MAKE) -C lzma-loader clean
15 endef
16
17 define Image/Prepare
18 # Optimized LZMA compression (with dictionary), handled by lzma-loader.
19 cat $(KDIR)/vmlinux | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma
20
21 # Less optimal LZMA compression (no dictionary), handled by CFE.
22 $(STAGING_DIR_HOST)/bin/lzma e -so -d16 $(KDIR)/vmlinux > $(KDIR)/vmlinux-nodictionary.lzma
23
24 gzip -nc9 $(KDIR)/vmlinux > $(KDIR)/vmlinux.gz
25 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
26 cat $(KDIR)/vmlinux-initramfs | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux-initramfs.lzma
27 $(STAGING_DIR_HOST)/bin/lzma e -so -d16 $(KDIR)/vmlinux-initramfs > $(KDIR)/vmlinux-initramfs-nodictionary.lzma
28 endif
29 rm -f $(KDIR)/loader.gz
30 $(MAKE) -C lzma-loader \
31 BUILD_DIR="$(KDIR)" \
32 TARGET="$(KDIR)" \
33 clean install
34 echo -ne "\\x00" >> $(KDIR)/loader.gz
35 rm -f $(KDIR)/fs_mark
36 echo -ne '\xde\xad\xc0\xde' > $(KDIR)/fs_mark
37 $(call prepare_generic_squashfs,$(KDIR)/fs_mark)
38 endef
39
40 define trxalign/jffs2-128k
41 -a 0x20000 -f $(KDIR)/root.$(1)
42 endef
43 define trxalign/jffs2-64k
44 -a 0x10000 -f $(KDIR)/root.$(1)
45 endef
46 define trxalign/squashfs
47 -a 1024 -f $(1) $(if $(2),-f $(2)) -a 0x10000 -A $(KDIR)/fs_mark
48 endef
49
50 #################################################
51 # Images
52 #################################################
53
54 define Build/trx-with-loader
55 $(STAGING_DIR_HOST)/bin/trx \
56 -m 33554432 \
57 -o $@.new \
58 -f $(KDIR)/loader.gz \
59 -f $(IMAGE_KERNEL) \
60 $(call trxalign/$(FILESYSTEM),$@)
61 mv $@.new $@
62 endef
63
64 define Build/trx-v2-with-loader
65 $(STAGING_DIR_HOST)/bin/trx \
66 -2 \
67 -m 33554432 \
68 -o $@.new \
69 -f $(KDIR)/loader.gz \
70 -f $(KDIR)/vmlinux.lzma \
71 $(call trxalign/$(FILESYSTEM),$@,$@.pattern)
72 mv $@.new $@
73 endef
74
75 define Build/trx-without-loader
76 $(STAGING_DIR_HOST)/bin/trx \
77 -m 33554432 \
78 -o $@.new \
79 -f $(IMAGE_KERNEL) \
80 $(call trxalign/$(FILESYSTEM),$@)
81 mv $@.new $@
82 endef
83
84 define Build/asus-trx
85 $(STAGING_DIR_HOST)/bin/asustrx -p $(PRODUCTID) -i $@ -o $@.new
86 mv $@.new $@
87 endef
88
89 define Build/edimax-bin
90 $(STAGING_DIR_HOST)/bin/trx2edips $@ $@.new
91 mv $@.new $@
92 endef
93
94 define Build/huawei-bin
95 dd if=/dev/zero of=$@.new bs=92 count=1
96 echo -ne 'HDR0\x08\x00\x00\x00' >> $@.new
97 cat $@ >> $@.new
98 mv $@.new $@
99 endef
100
101 define Build/linksys-bin
102 $(STAGING_DIR_HOST)/bin/addpattern -4 -p $(DEVICE_ID) -v v$(VERSION) $(if $(SERIAL),-s $(SERIAL)) -i $@ -o $@.new
103 mv $@.new $@
104 endef
105
106 define Build/linksys-pattern-partition
107 $(STAGING_DIR_HOST)/bin/addpattern -5 -p $(DEVICE_ID) -v v$(VERSION) $(if $(SERIAL),-s $(SERIAL)) -i /dev/null -o $@.pattern
108 endef
109
110 define Build/motorola-bin
111 $(STAGING_DIR_HOST)/bin/motorola-bin -$(MOTOROLA_DEVICE) $@ $@.new
112 mv $@.new $@
113 endef
114
115 define Build/prepend-with-elf
116 mv $@ $@.old
117 dd if=$(KDIR)/loader.elf of=$@ bs=131072 conv=sync
118 cat $@.old >> $@
119 endef
120
121 define Build/tailed-bin
122 echo $(BIN_TAIL) >> $@
123 endef
124
125 define Build/usrobotics-bin
126 $(STAGING_DIR_HOST)/bin/trx2usr $@ $@.new
127 mv $@.new $@
128 endef
129
130 #################################################
131 # Devices
132 #################################################
133
134 DEVICE_VARS += PRODUCTID
135 DEVICE_VARS += DEVICE_ID VERSION SERIAL
136 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_REGION
137 DEVICE_VARS += MOTOROLA_DEVICE
138 DEVICE_VARS += BIN_TAIL
139
140 define Device/Default
141 KERNEL := kernel-bin
142 IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1).$$(2)
143 KERNEL_NAME = vmlinux.lzma
144 KERNEL_INITRAMFS_NAME = vmlinux-initramfs.lzma
145 FILESYSTEMS := $(FS_64K)
146 IMAGES := trx
147 IMAGE/trx := append-rootfs | trx-with-loader
148 endef
149
150 define Device/standard
151 DEVICE_TITLE := Image with LZMA loader and LZMA compressed kernel
152 endef
153
154 define Device/standard-noloader-gz
155 DEVICE_TITLE := Image with gzipped kernel
156 KERNEL_NAME = vmlinux.gz
157 IMAGE/trx := append-rootfs | trx-without-loader
158 endef
159
160 define Device/standard-noloader-nodictionarylzma
161 DEVICE_TITLE := Image with LZMA compressed kernel matching CFE decompressor
162 KERNEL_NAME = vmlinux-nodictionary.lzma
163 IMAGE/trx := append-rootfs | trx-without-loader
164 endef
165
166 define Device/asus
167 DEVICE_VENDOR := ASUS
168 IMAGES := trx
169 IMAGE/trx := append-rootfs | trx-with-loader | asus-trx
170 endef
171
172 define Device/linksys
173 DEVICE_VENDOR := Linksys
174 IMAGES := bin
175 IMAGE/bin := append-rootfs | trx-with-loader | linksys-bin
176 endef
177
178 define Device/motorola
179 DEVICE_VENDOR := Motorola
180 IMAGES := bin
181 IMAGE/bin := append-rootfs | trx-with-loader | motorola-bin
182 endef
183
184 define Device/netgear
185 DEVICE_VENDOR := NETGEAR
186 IMAGES := chk
187 IMAGE/chk := append-rootfs | trx-with-loader | netgear-chk
188 endef
189
190 #################################################
191 # Subtarget devices
192 #################################################
193
194 include $(SUBTARGET).mk
195
196 #################################################
197 # Shared BuildImage defines
198 #################################################
199
200 define Image/Build/Initramfs
201 $(STAGING_DIR_HOST)/bin/trx \
202 -m 33554432 \
203 -o $(BIN_DIR)/$(IMG_PREFIX)-initramfs.trx \
204 -f $(KDIR)/loader.gz \
205 -f $(KDIR)/vmlinux-initramfs.lzma
206 $(STAGING_DIR_HOST)/bin/trx \
207 -m 33554432 \
208 -o $(BIN_DIR)/$(IMG_PREFIX)-initramfs-noloader-nodictionary.trx \
209 -f $(KDIR)/vmlinux-initramfs-nodictionary.lzma
210 endef
211
212 # $(1): filesystem type.
213 define Image/Build
214 # TODO: Move it to Device/*
215 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
216 $(call Image/Build/Initramfs)
217 endif
218 endef
219
220 $(eval $(call BuildImage))