+$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-kernel.bin: $(KDIR)/vmlinux.bin
+endif
+
+$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-kernel.bin:
+ $(CP) $(KDIR)/vmlinux.bin $@
+
+ifeq ($(FS),jffs2-8MB)
+ALIGN:=bs=131072 conv=sync
+endif
+ifeq ($(FS),jffs2-4MB)
+ALIGN:=bs=65536 conv=sync
+endif
+
+$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS).bin: $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-kernel.bin
+ dd if=$< $(ALIGN) > $@
+ cat $(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)/root.$(FS) >> $@
+
+define pattern_template
+$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS)-$(1).bin: $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS).bin
+ (dd if=/dev/zero bs=16 count=1; cat $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS).bin) | \
+ $(STAGING_DIR)/bin/addpattern -p $(1) $(2) -o $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS)-$(1).bin
+
+install: $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS)-$(1).bin
+endef
+
+define sercomm_template
+$(BIN_DIR)/openwrt-$(1)-$(KERNEL)-$(FS).img: $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(FS).bin
+ cat sercomm/adam2.bin "$$^" > "$$@.tmp"
+ dd if=sercomm/$(1) of="$$@.tmp" bs=$$$$((0x3e0000 - 80)) seek=1 conv=notrunc
+ $(STAGING_DIR)/bin/dgfirmware -f -w "$$@" "$$@.tmp"
+ rm -f "$$@.tmp"
+
+install: $(BIN_DIR)/openwrt-$(1)-$(KERNEL)-$(FS).img
+endef
+
+$(eval $(call sercomm_template,dg834))
+$(eval $(call sercomm_template,jdr454wb))
+
+$(eval $(call pattern_template,AG1B))
+$(eval $(call pattern_template,WA22))
+$(eval $(call pattern_template,WAG2))
+$(eval $(call pattern_template,WA21))
+$(eval $(call pattern_template,WA31,-b))
+$(eval $(call pattern_template,WA32,-b))
+
+ifeq ($(IB),)