2 # Copyright (C) 2006-2016 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
7 include $(TOPDIR)/rules.mk
8 include $(INCLUDE_DIR)/image.mk
11 $(MAKE) -C lzma-loader clean
15 # Optimized LZMA compression (with dictionary), handled by lzma-loader.
16 cat $(KDIR)/vmlinux | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma
18 # Less optimal LZMA compression (no dictionary), handled by CFE.
19 $(STAGING_DIR_HOST)/bin/lzma e -so -d16 $(KDIR)/vmlinux > $(KDIR)/vmlinux-nodictionary.lzma
21 gzip -nc9 $(KDIR)/vmlinux > $(KDIR)/vmlinux.gz
22 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
23 cat $(KDIR)/vmlinux-initramfs | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux-initramfs.lzma
24 $(STAGING_DIR_HOST)/bin/lzma e -so -d16 $(KDIR)/vmlinux-initramfs > $(KDIR)/vmlinux-initramfs-nodictionary.lzma
26 rm -f $(KDIR)/loader.gz
27 $(MAKE) -C lzma-loader \
31 echo -ne "\\x00" >> $(KDIR)/loader.gz
33 echo -ne '\xde\xad\xc0\xde' > $(KDIR)/fs_mark
34 $(call prepare_generic_squashfs,$(KDIR)/fs_mark)
37 define trxalign/jffs2-128k
38 -a 0x20000 -f $(KDIR)/root.$(1)
40 define trxalign/jffs2-64k
41 -a 0x10000 -f $(KDIR)/root.$(1)
43 define trxalign/squashfs
44 -a 1024 -f $(KDIR)/root.$(1) $(if $(2),-f $(2)) -a 0x10000 -A $(KDIR)/fs_mark
47 #################################################
49 #################################################
51 define Build/trx-with-loader
52 $(STAGING_DIR_HOST)/bin/trx \
55 -f $(KDIR)/loader.gz \
57 $(call trxalign/$(FILESYSTEM),$(FILESYSTEM))
60 define Build/trx-v2-with-loader
61 $(STAGING_DIR_HOST)/bin/trx \
65 -f $(KDIR)/loader.gz \
66 -f $(KDIR)/vmlinux.lzma \
67 $(call trxalign/$(FILESYSTEM),$(FILESYSTEM),$@)
71 define Build/trx-without-loader
72 $(STAGING_DIR_HOST)/bin/trx \
76 $(call trxalign/$(FILESYSTEM),$(FILESYSTEM))
80 $(STAGING_DIR_HOST)/bin/asustrx -p $(PRODUCTID) -i $@ -o $@.new
84 define Build/edimax-bin
85 $(STAGING_DIR_HOST)/bin/trx2edips $@ $@.new
89 define Build/huawei-bin
90 dd if=/dev/zero of=$@.new bs=92 count=1
91 echo -ne 'HDR0\x08\x00\x00\x00' >> $@.new
96 define Build/linksys-bin
97 $(STAGING_DIR_HOST)/bin/addpattern -4 -p $(DEVICE_ID) -v v$(VERSION) $(if $(SERIAL),-s $(SERIAL)) -i $@ -o $@.new
101 define Build/linksys-pattern-partition
102 $(STAGING_DIR_HOST)/bin/addpattern -5 -p $(DEVICE_ID) -v v$(VERSION) $(if $(SERIAL),-s $(SERIAL)) -i /dev/null -o $@
105 define Build/motorola-bin
106 $(STAGING_DIR_HOST)/bin/motorola-bin -$(MOTOROLA_DEVICE) $@ $@.new
110 define Build/prepend-with-elf
112 dd if=$(KDIR)/loader.elf of=$@ bs=131072 conv=sync
116 define Build/tailed-bin
117 echo $(BIN_TAIL) >> $@
120 define Build/usrobotics-bin
121 $(STAGING_DIR_HOST)/bin/trx2usr $@ $@.new
125 #################################################
127 #################################################
129 DEVICE_VARS += PRODUCTID
130 DEVICE_VARS += DEVICE_ID VERSION SERIAL
131 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_REGION
132 DEVICE_VARS += MOTOROLA_DEVICE
133 DEVICE_VARS += BIN_TAIL
135 define Device/Default
137 IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1).$$(2)
138 KERNEL_NAME = vmlinux.lzma
139 FILESYSTEMS := $(FS_64K)
141 IMAGE/trx := trx-with-loader
144 define Device/standard
147 define Device/standard-noloader-gz
148 KERNEL_NAME = vmlinux.gz
149 IMAGE/trx := trx-without-loader
152 define Device/standard-noloader-nodictionarylzma
153 KERNEL_NAME = vmlinux-nodictionary.lzma
154 IMAGE/trx := trx-without-loader
159 IMAGE/trx := trx-with-loader | asus-trx
162 define Device/linksys
164 IMAGE/bin := trx-with-loader | linksys-bin
167 define Device/motorola
169 IMAGE/bin := trx-with-loader | motorola-bin
172 define Device/netgear
174 IMAGE/chk := trx-with-loader | netgear-chk
177 #################################################
179 #################################################
181 ifeq ($(SUBTARGET),generic)
183 define Device/linksys-wrt300n-v1.1
188 TARGET_DEVICES += linksys-wrt300n-v1.1
190 define Device/linksys-wrt310n-v1
195 TARGET_DEVICES += linksys-wrt310n-v1
197 define Device/linksys-wrt350n-v1
202 TARGET_DEVICES += linksys-wrt350n-v1
204 define Device/linksys-wrt610n-v1
209 TARGET_DEVICES += linksys-wrt610n-v1
211 # BCMA SoC with SSB WiFi
212 define Device/linksys-wrt610n-v2
217 TARGET_DEVICES += linksys-wrt610n-v2
219 define Device/linksys-e3000-v1
224 TARGET_DEVICES += linksys-e3000-v1
226 TARGET_DEVICES += standard
229 #################################################
231 #################################################
233 define Device/dlink-dwl-3150
235 IMAGE/bin := trx-with-loader | tailed-bin
236 BIN_TAIL := BCM-5352-2050-0000000-01
239 define Device/edimax-ps1208-mfg
241 IMAGE/bin := trx-with-loader | edimax-bin
244 define Device/huawei-e970
245 KERNEL_NAME = vmlinux.gz
247 IMAGE/bin := trx-without-loader | huawei-bin
250 define Device/linksys-wrt54g3gv2-vf
251 FILESYSTEMS := $(FS_128K)
252 IMAGES := noheader.bin bin
253 IMAGE/noheader.bin := linksys-pattern-partition | trx-v2-with-loader
254 IMAGE/bin := linksys-pattern-partition | trx-v2-with-loader | linksys-bin
260 define Device/linksys-wrt54gs
262 FILESYSTEMS := $(FS_128K)
267 define Device/linksys-wrtsl54gs
269 FILESYSTEMS := $(FS_128K)
274 define Device/netgear-wgt634u
275 FILESYSTEMS := $(FS_128K)
277 IMAGE/bin := trx-with-loader | prepend-with-elf
280 define Device/usrobotics-usr5461
282 IMAGE/bin := trx-with-loader | usrobotics-bin
285 ifeq ($(SUBTARGET),legacy)
290 linksys-wrt54g3gv2-vf \
296 define Device/asus-wl-300g
298 PRODUCTID := "WL300g "
300 TARGET_DEVICES += asus-wl-300g
302 define Device/asus-wl-320gp
304 PRODUCTID := "WL320gP "
306 TARGET_DEVICES += asus-wl-320gp
308 define Device/asus-wl-330ge
310 PRODUCTID := "WL-330gE "
312 TARGET_DEVICES += asus-wl-330ge
314 define Device/asus-wl-500gp-v1
316 PRODUCTID := "WL500gp "
318 TARGET_DEVICES += asus-wl-500gp-v1
320 define Device/asus-wl-500gp-v2
322 PRODUCTID := "WL500gpv2 "
324 TARGET_DEVICES += asus-wl-500gp-v2
326 define Device/asus-wl-500w
328 PRODUCTID := "WL500W "
330 TARGET_DEVICES += asus-wl-500w
332 define Device/asus-wl-520gu
334 PRODUCTID := "WL520gu "
336 TARGET_DEVICES += asus-wl-520gu
338 define Device/asus-wl-550ge
340 PRODUCTID := "WL550gE "
342 TARGET_DEVICES += asus-wl-550ge
344 define Device/asus-wl-hdd25
346 PRODUCTID := "WLHDD "
348 TARGET_DEVICES += asus-wl-hdd25
350 define Device/linksys-wrt54g3g
355 TARGET_DEVICES += linksys-wrt54g3g
357 define Device/linksys-wrt54g3g-em
362 TARGET_DEVICES += linksys-wrt54g3g-em
364 define Device/linksys-wrt54g
369 TARGET_DEVICES += linksys-wrt54g
371 define Device/linksys-wrt54gs-v4
376 TARGET_DEVICES += linksys-wrt54gs-v4
378 define Device/linksys-wrt150n
383 TARGET_DEVICES += linksys-wrt150n
385 define Device/linksys-wrt160n-v1
390 TARGET_DEVICES += linksys-wrt160n-v1
392 define Device/linksys-wrt300n-v1
397 TARGET_DEVICES += linksys-wrt300n-v1
399 define Device/motorola-wa840g
403 TARGET_DEVICES += motorola-wa840g
405 define Device/motorola-we800g
409 TARGET_DEVICES += motorola-we800g
411 define Device/motorola-wr850g
415 TARGET_DEVICES += motorola-wr850g
417 define Device/netgear-wgr614-v8
419 NETGEAR_BOARD_ID := U12H072T00_NETGEAR
422 TARGET_DEVICES += netgear-wgr614-v8
424 define Device/netgear-wndr3300-v1
426 NETGEAR_BOARD_ID := U12H093T00_NETGEAR
429 TARGET_DEVICES += netgear-wndr3300-v1
431 define Device/netgear-wnr834b-v2
433 NETGEAR_BOARD_ID := U12H081T00_NETGEAR
436 TARGET_DEVICES += netgear-wnr834b-v2
438 TARGET_DEVICES += standard standard-noloader-gz
441 #################################################
443 #################################################
445 ifeq ($(SUBTARGET),mips74k)
446 define Device/asus-rt-ac53u
448 PRODUCTID := RT-AC53U
450 TARGET_DEVICES += asus-rt-ac53u
452 define Device/asus-rt-ac66u
454 PRODUCTID := RT-AC66U
456 # TARGET_DEVICES += asus-rt-ac66u
458 define Device/asus-rt-n10
460 PRODUCTID := "RT-N10 "
462 TARGET_DEVICES += asus-rt-n10
464 define Device/asus-rt-n10p
468 TARGET_DEVICES += asus-rt-n10p
470 define Device/asus-rt-n10p-v2
472 PRODUCTID := RT-N10PV2
474 TARGET_DEVICES += asus-rt-n10p-v2
476 define Device/asus-rt-n10u
480 TARGET_DEVICES += asus-rt-n10u
482 define Device/asus-rt-n10u-b
486 TARGET_DEVICES += asus-rt-n10u-b
488 define Device/asus-rt-n12
490 PRODUCTID := "RT-N12 "
492 TARGET_DEVICES += asus-rt-n12
494 define Device/asus-rt-n12-b1
496 PRODUCTID := RT-N12B1
498 TARGET_DEVICES += asus-rt-n12-b1
500 define Device/asus-rt-n12-c1
502 PRODUCTID := RT-N12C1
504 TARGET_DEVICES += asus-rt-n12-c1
506 define Device/asus-rt-n12-d1
508 PRODUCTID := RT-N12D1
510 TARGET_DEVICES += asus-rt-n12-d1
512 define Device/asus-rt-n12hp
514 PRODUCTID := RT-N12HP
516 TARGET_DEVICES += asus-rt-n12hp
518 define Device/asus-rt-n14uhp
520 PRODUCTID := RT-N14UHP
522 TARGET_DEVICES += asus-rt-n14uhp
524 define Device/asus-rt-n15u
528 TARGET_DEVICES += asus-rt-n15u
530 define Device/asus-rt-n16
534 TARGET_DEVICES += asus-rt-n16
536 define Device/asus-rt-n53
540 TARGET_DEVICES += asus-rt-n53
542 define Device/asus-rt-n66u
546 TARGET_DEVICES += asus-rt-n66u
548 define Device/asus-rt-n66w
552 TARGET_DEVICES += asus-rt-n66w
554 define Device/linksys-wrt160n-v3
559 TARGET_DEVICES += linksys-wrt160n-v3
561 define Device/linksys-wrt310n-v2
566 TARGET_DEVICES += linksys-wrt310n-v2
568 define Device/linksys-wrt320n-v1
573 TARGET_DEVICES += linksys-wrt320n-v1
575 define Device/linksys-e900-v1
580 TARGET_DEVICES += linksys-e900-v1
582 define Device/linksys-e1000-v1-v2-v2.1
587 TARGET_DEVICES += linksys-e1000-v1-v2-v2.1
589 define Device/linksys-e1200-v1
594 TARGET_DEVICES += linksys-e1200-v1
596 define Device/linksys-e1200-v2
601 TARGET_DEVICES += linksys-e1200-v2
603 define Device/linksys-e1500-v1
608 TARGET_DEVICES += linksys-e1500-v1
610 define Device/linksys-e1550-v1
615 TARGET_DEVICES += linksys-e1550-v1
617 define Device/linksys-e2000-v1
622 TARGET_DEVICES += linksys-e2000-v1
624 define Device/linksys-e2500-v1
629 TARGET_DEVICES += linksys-e2500-v1
631 define Device/linksys-e2500-v2
636 TARGET_DEVICES += linksys-e2500-v2
638 define Device/linksys-e2500-v2.1
643 TARGET_DEVICES += linksys-e2500-v2.1
645 define Device/linksys-e2500-v3
650 TARGET_DEVICES += linksys-e2500-v3
652 define Device/linksys-e3200-v1
657 TARGET_DEVICES += linksys-e3200-v1
659 define Device/linksys-e4200-v1
664 TARGET_DEVICES += linksys-e4200-v1
666 define Device/netgear-wgr614-v10_north-america
668 NETGEAR_BOARD_ID := U12H139T01_NETGEAR
671 TARGET_DEVICES += netgear-wgr614-v10_north-america
673 define Device/netgear-wgr614-v10_other-regions
675 NETGEAR_BOARD_ID := U12H139T01_NETGEAR
678 TARGET_DEVICES += netgear-wgr614-v10_other-regions
680 define Device/netgear-wn2500rp-v1
682 NETGEAR_BOARD_ID := U12H197T00_NETGEAR
685 TARGET_DEVICES += netgear-wn2500rp-v1
687 define Device/netgear-wndr3400-v1
689 NETGEAR_BOARD_ID := U12H155T00_NETGEAR
692 TARGET_DEVICES += netgear-wndr3400-v1
694 define Device/netgear-wndr3400-v2
696 NETGEAR_BOARD_ID := U12H187T00_NETGEAR
699 TARGET_DEVICES += netgear-wndr3400-v2
701 define Device/netgear-wndr3400-v3
703 NETGEAR_BOARD_ID := U12H208T00_NETGEAR
706 TARGET_DEVICES += netgear-wndr3400-v3
708 define Device/netgear-wndr3700-v3
710 NETGEAR_BOARD_ID := U12H194T00_NETGEAR
713 TARGET_DEVICES += netgear-wndr3700-v3
715 define Device/netgear-wndr3400-vcna
717 NETGEAR_BOARD_ID := U12H155T01_NETGEAR
720 # TARGET_DEVICES += netgear-wndr3400-vcna
722 define Device/netgear-wndr4000
724 NETGEAR_BOARD_ID := U12H181T00_NETGEAR
727 TARGET_DEVICES += netgear-wndr4000
729 define Device/netgear-wnr1000-v3
731 NETGEAR_BOARD_ID := U12H139T00_NETGEAR
734 TARGET_DEVICES += netgear-wnr1000-v3
736 define Device/netgear-wnr2000v2
738 NETGEAR_BOARD_ID := U12H114T00_NETGEAR
741 TARGET_DEVICES += netgear-wnr2000v2
743 define Device/netgear-wnr3000rp
745 NETGEAR_BOARD_ID := U12H163T01_NETGEAR
748 TARGET_DEVICES += netgear-wnr3000rp
750 define Device/netgear-wnr3500l-v1-north-america
752 NETGEAR_BOARD_ID := U12H136T99_NETGEAR
755 TARGET_DEVICES += netgear-wnr3500l-v1-north-america
757 define Device/netgear-wnr3500l-v1-other-regions
759 NETGEAR_BOARD_ID := U12H136T99_NETGEAR
762 TARGET_DEVICES += netgear-wnr3500l-v1-other-regions
764 define Device/netgear-wnr3500l-v2
766 NETGEAR_BOARD_ID := U12H172T00_NETGEAR
769 TARGET_DEVICES += netgear-wnr3500l-v2
771 define Device/netgear-wnr3500u
773 NETGEAR_BOARD_ID := U12H136T00_NETGEAR
776 # TARGET_DEVICES += netgear-wnr3500u
778 define Device/netgear-wnr3500-v2
780 NETGEAR_BOARD_ID := U12H127T00_NETGEAR
783 TARGET_DEVICES += netgear-wnr3500-v2
785 define Device/netgear-wnr3500-v2-vc
787 NETGEAR_BOARD_ID := U12H127T70_NETGEAR
790 # TARGET_DEVICES += netgear-wnr3500-v2-vc
792 TARGET_DEVICES += standard standard-noloader-nodictionarylzma
795 #################################################
796 # Shared BuildImage defines
797 #################################################
799 define Image/Build/Initramfs
800 $(STAGING_DIR_HOST)/bin/trx \
802 -o $(BIN_DIR)/$(IMG_PREFIX)-initramfs.trx \
803 -f $(KDIR)/loader.gz \
804 -f $(KDIR)/vmlinux-initramfs.lzma
805 $(STAGING_DIR_HOST)/bin/trx \
807 -o $(BIN_DIR)/$(IMG_PREFIX)-initramfs-noloader-nodictionary.trx \
808 -f $(KDIR)/vmlinux-initramfs-nodictionary.lzma
811 # $(1): filesystem type.
813 # TODO: Move it to Device/*
814 ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
815 $(call Image/Build/Initramfs)
819 $(eval $(call BuildImage))