X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fbrcm63xx%2Fimage%2FMakefile;h=31dd3994cce96242c96ba93d0a359a8ad0c8d075;hb=aedca3ce430c0edcf582118d393fe13349fca741;hp=b008ea2602d7342c0ad3a5bc37068c90bf45f811;hpb=dd622864e1286d356598985c734e786463f12874;p=openwrt%2Fopenwrt.git diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile index b008ea2602..c9363dda0a 100644 --- a/target/linux/brcm63xx/image/Makefile +++ b/target/linux/brcm63xx/image/Makefile @@ -1,5 +1,6 @@ -# -# Copyright (C) 2006 OpenWrt.org +# +# Copyright (C) 2006-2015 OpenWrt.org +# Copyright (C) 2016 LEDE project # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -7,168 +8,175 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.mk -LOADADDR = 0x80010000 # RAM start + 16M +LOADADDR = 0x80010000 # RAM start + 64K KERNEL_ENTRY = $(LOADADDR) # Newer kernels add a jmp to the kernel_entry at the start of the binary -RAMSIZE = 0x01000000 # 64MB +LOADER_ENTRY = 0x80a00000 # RAM start + 10M, for relocate +RAMSIZE = 0x02000000 # 32MB +LZMA_TEXT_START = 0x81800000 # 32MB - 8MB LOADER_MAKEOPTS= \ KDIR=$(KDIR) \ LOADADDR=$(LOADADDR) \ KERNEL_ENTRY=$(KERNEL_ENTRY) \ - RAMSIZE=$(RAMSIZE) + RAMSIZE=$(RAMSIZE) \ + LZMA_TEXT_START=$(LZMA_TEXT_START) \ + +RELOCATE_MAKEOPTS= \ + CACHELINE_SIZE=16 \ + KERNEL_ADDR=$(KERNEL_ENTRY) \ + CROSS_COMPILE=$(TARGET_CROSS) \ + LZMA_TEXT_START=$(LOADER_ENTRY) + +define Build/Compile + rm -rf $(KDIR)/relocate + $(CP) ../../generic/image/relocate $(KDIR) + $(MAKE) -C $(KDIR)/relocate $(RELOCATE_MAKEOPTS) +endef -define trxalign/jffs2-128k --a 0x20000 +### Kernel scripts ### +define Build/hcs-initramfs + $(STAGING_DIR_HOST)/bin/hcsmakeimage --magic_bytes=$(HCS_MAGIC_BYTES) \ + --rev_maj=$(HCS_REV_MAJ) --rev_min=$(HCS_REV_MIN) --input_file=$@ \ + --output_file=$@.hcs --ldaddress=$(LOADADDR) + mv $@.hcs $@ endef -define trxalign/jffs2-64k --a 0x10000 + +define Build/loader-lzma + rm -rf $@.src + $(MAKE) -C lzma-loader \ + $(LOADER_MAKEOPTS) \ + PKG_BUILD_DIR="$@.src" \ + TARGET_DIR="$(dir $@)" \ + LOADER_DATA="$@" \ + LOADER_NAME="$(notdir $@)" \ + compile loader.$(1) + mv "$@.$(1)" "$@" + rm -rf $@.src endef -define trxalign/squashfs --a 1024 + +define Build/lzma + # CFE is a LZMA nazi! It took me hours to find out the parameters! + # Also I think lzma has a bug cause it generates different output depending on + # if you use stdin / stdout or not. Use files instead of stdio here, cause + # otherwise CFE will complain and not boot the image. + $(STAGING_DIR_HOST)/bin/lzma e $@ -d22 -fb64 -a1 $@.lzma + mv $@.lzma $@ endef -define Image/Build/CFE - # Generate the tagged image - $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ - -o $(BIN_DIR)/openwrt-$(2)-$(1)-$(6)-cfe.bin \ - -b $(2) -c $(3) -e $(LOADADDR) -l $(LOADADDR) \ - -t $(4) -d "$(5)" $(7) -# -b $(2) -c $(3) -e $(KERNEL_ENTRY) -l $(LOADADDR) +define Build/lzma-cfe + # Strip out the length, CFE doesn't like this + dd if=$@ of=$@.lzma.cfe bs=5 count=1 + dd if=$@ of=$@.lzma.cfe ibs=13 obs=5 skip=1 seek=1 conv=notrunc + mv $@.lzma.cfe $@ +endef +define Build/relocate-kernel + # CFE only allows ~4 MiB for the uncompressed kernels, but uncompressed + # kernel might get larger than that, so let CFE unpack and load at a + # higher address and make the kernel relocate itself to the expected + # location. + ( \ + dd if=$(KDIR)/relocate/loader.bin bs=32 conv=sync && \ + perl -e '@s = stat("$@"); print pack("N", @s[7])' && \ + cat $@ \ + ) > $@.relocate + mv $@.relocate $@ endef -define Image/Build/CFEAGPF - # Generate the tagged image - $(STAGING_DIR_HOST)/bin/imagetag -i $(KDIR)/vmlinux.lzma.cfe -f $(KDIR)/root.$(1) \ - -o $(BIN_DIR)/openwrt-$(2)-$(1)-$(7)-cfe.bin \ - -b $(2) -c $(3) -e $(LOADADDR) -l $(LOADADDR) \ - -v 8 -m IMAGE -k 0x20000 -n $(4) -t $(5) +### Image scripts ### +define rootfspad/jffs2-128k +--align-rootfs +endef +define rootfspad/jffs2-64k +--align-rootfs +endef +define rootfspad/squashfs endef -define Image/Build/RedBoot - cp $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(1)-vmlinux.elf - gzip -9 -c $(KDIR)/vmlinux > $(KDIR)/vmlinux.bin.gz - $(STAGING_DIR_HOST)/bin/lzma e $(KDIR)/vmlinux $(KDIR)/vmlinux.bin.l7 - dd if=$(KDIR)/vmlinux.bin.l7 of=$(BIN_DIR)/openwrt-$(1)-vmlinux.lzma bs=65536 conv=sync - dd if=$(KDIR)/vmlinux.bin.gz of=$(BIN_DIR)/openwrt-$(1)-vmlinux.gz bs=65536 conv=sync +define Image/LimitName16 +$(shell expr substr "$(1)" 1 16) endef -define Image/Build/CFEOLD - $(TOPDIR)/scripts/brcmImage.pl -t -p \ - -b $(2) -c $(3) \ - -k $(KDIR)/vmlinux.lzma.cfe \ - -r $(KDIR)/root.$(1) \ - -o $(BIN_DIR)/openwrt-$(2)-$(1)-cfe.bin +define Image/FileSystemStrip +$(firstword $(subst +,$(space),$(subst root.,,$(notdir $(1))))) endef -define Build/Clean - $(MAKE) -C lzma-loader clean +define Build/cfe-bin + $(STAGING_DIR_HOST)/bin/imagetag -i $(IMAGE_KERNEL) -f $(IMAGE_ROOTFS) \ + --output $@ --boardid $(CFE_BOARD_ID) --chipid $(CFE_CHIP_ID) \ + --entry $(LOADER_ENTRY) --load-addr $(LOADER_ENTRY) \ + --info1 "$(call Image/LimitName16,$(DEVICE_NAME))" \ + --info2 "$(call Image/FileSystemStrip,$(IMAGE_ROOTFS))" \ + $(call rootfspad/$(call Image/FileSystemStrip,$(IMAGE_ROOTFS))) \ + $(CFE_EXTRAS) $(1) endef -define Image/Prepare - # Standard LZMA kernel - cat $(KDIR)/vmlinux | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma +define Build/cfe-old-bin + $(TOPDIR)/scripts/brcmImage.pl -t -p \ + -o $@ -b $(CFE_BOARD_ID) -c $(CFE_CHIP_ID) \ + -e $(LOADER_ENTRY) -a $(LOADER_ENTRY) \ + -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) \ + $(CFE_EXTRAS) +endef - # CFE is a LZMA nazi! It took me hours to find out the parameters! - # Also I think lzma has a bug cause it generates different output depending on - # if you use stdin / stdout or not. Use files instead of stdio here, cause - # otherwise CFE will complain and not boot the image. - $(STAGING_DIR_HOST)/bin/lzma e -d22 -fb64 -a1 $(KDIR)/vmlinux $(KDIR)/vmlinux.lzma.tmp +define Build/cfe-spw303v-bin + $(STAGING_DIR_HOST)/bin/imagetag -i $(IMAGE_KERNEL) -f $(IMAGE_ROOTFS) \ + --output $@ --boardid $(CFE_BOARD_ID) --chipid $(CFE_CHIP_ID) \ + --entry $(LOADER_ENTRY) --load-addr $(LOADER_ENTRY) \ + $(call rootfspad/$(call Image/FileSystemStrip,$(IMAGE_ROOTFS))) \ + $(CFE_EXTRAS) $(1) +endef - # Strip out the length, CFE doesn't like this - dd if=$(KDIR)/vmlinux.lzma.tmp of=$(KDIR)/vmlinux.lzma.cfe bs=5 count=1 - dd if=$(KDIR)/vmlinux.lzma.tmp of=$(KDIR)/vmlinux.lzma.cfe ibs=13 obs=5 skip=1 seek=1 conv=notrunc - rm -f $(KDIR)/vmlinux.lzma.tmp +define Build/spw303v-bin + $(STAGING_DIR_HOST)/bin/spw303v -i $@ -o $@.spw303v + mv $@.spw303v $@ +endef - # Build the LZMA loader - rm -f $(KDIR)/loader.gz - $(MAKE) -C lzma-loader \ - BUILD_DIR="$(KDIR)" \ - TARGET="$(KDIR)" \ - clean install - - echo -ne "\\x00" >> $(KDIR)/loader.gz - rm -f $(KDIR)/fs_mark - touch $(KDIR)/fs_mark - $(call prepare_generic_squashfs,$(KDIR)/fs_mark) -endef - -define Image/Build - $(STAGING_DIR_HOST)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1)) -f $(KDIR)/root.$(1) - dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-root.$(1) bs=128k conv=sync - # Various routers - $(call Image/Build/CFE,$(1),96345GW2,6345,bccfe,,bccfe,) - $(call Image/Build/CFE,$(1),96345GW2,6345,bc221,,bc221,-y 5) - $(call Image/Build/CFE,$(1),96345GW2,6345,bc300,,bc300,) - $(call Image/Build/CFE,$(1),96345GW2,6345,bc310,OpenWRT-$(REVISION),bc310,) - $(call Image/Build/CFE,$(1),96348GW,6348,bccfe,,bccfe,) - $(call Image/Build/CFE,$(1),96348GW,6348,bc221,,bc221,-y 5) - # BT Voyager V210_BTR - $(call Image/Build/CFE,$(1),V210_BB,6348,bc221,,btvgr,-y 5) - # BT Voyager V210_ROI, V210_WB - $(call Image/Build/CFE,$(1),V210,6348,bc221,,btvgr,-y 5) - # BT Voyager V2091_BTR - $(call Image/Build/CFE,$(1),V2091_BB,6348,bc221,,btvgr,-y 5) - # BT Voyager V2091_ROI, V2091_WB - $(call Image/Build/CFE,$(1),V2091,6348,bc221,,btvgr,-y 5) - # BT Voyager V220V, V220V_MGCP_BTR - $(call Image/Build/CFE,$(1),RTA1052V,6348,bc221,,btvgr,-y 5) - # BT Voyager V2110, V2110_AA, V2110_ROI - $(call Image/Build/CFE,$(1),V2110,6348,bc221,,btvgr,-y 5) - # BT Voyager V2500V, V2500V_SIP_CLUB, V2500V_AA - $(call Image/Build/CFE,$(1),V2500V_BB,6348,bc221,,btvgr,-y 5) - # RTA1025W_16 (numerous routers) - $(call Image/Build/CFE,$(1),RTA1025W_16,6348,bc221,,btrta,-y 5) - # Tecom GW6000 - $(call Image/Build/CFE,$(1),96348GW,6348,bc300,,bc300,) - # Tecom GW6200 - $(call Image/Build/CFE,$(1),96348GW,6348,bc310,$(shell printf '\x99'),gw6200) - # Neufbox4 - $(call Image/Build/CFE,$(1),96358VW,6358,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),96358VW,6358,bc310,OpenWRT-$(REVISION),nb4) - # Comtrend 536, 5621 - $(call Image/Build/CFE,$(1),96348GW-11,6348,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),96348GW-11,6348,bc300,,bc300) - # TP-Link 8900GB - $(call Image/Build/CFE,$(1),96348GW-11,6348,bc310,$(shell printf 'PRID\x89\x10\x00\x02'),td8900GB) - # Davolink DV201AMR - $(call Image/Build/CFEOLD,$(1),DV201AMR,6348) - # USR 9108 - $(call Image/Build/CFE,$(1),96348GW-A,6348,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),96348GW-A,6348,bc300,,bc300) - # NetGear DG834GT, DG834PN - $(call Image/Build/CFE,$(1),96348GW-10,6348,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),96348GW-10,6348,bc300,,bc300) - # Belkin f5d7633 - $(call Image/Build/CFE,$(1),96348GW-10,6348,bc310,,bc310) - # D-Link DSL-2640B - $(call Image/Build/CFE,$(1),D-4P-W,6348,bc310,,bc310) - - # TP-Link TD-8810A, TD-8810B, TD-8811A, TD-8811B - $(call Image/Build/CFE,$(1),8L-2M-8M,6338,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),8L-2M-8M,6338,bc300,,bc300) - - # Generic 6338 images - $(call Image/Build/CFE,$(1),6338GW,6338,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),6338GW,6338,bc221,,bc221) - $(call Image/Build/CFE,$(1),6338GW,6338,bc300,,bc300) - $(call Image/Build/CFE,$(1),6338GW,6338,bc310,,bc310) - $(call Image/Build/CFE,$(1),6338W,6338,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),6338W,6338,bc221,,bc221) - $(call Image/Build/CFE,$(1),6338W,6338,bc300,,bc300) - $(call Image/Build/CFE,$(1),6338W,6338,bc310,,bc310) - - # Sagem F@ST2404 - $(call Image/Build/CFE,$(1),F@ST2404,6348,bccfe,,bccfe) - $(call Image/Build/CFE,$(1),F@ST2404,6348,bc300,,bc300) - $(call Image/Build/CFE,$(1),F@ST2404,6348,bc310,OpenWRT-$(REVISION),bc310) - # Inventel Livebox - $(call Image/Build/RedBoot,livebox) - # D-Link DSL-2740B - $(call Image/Build/CFE,$(1),96358GW,6358,bc310,,dsl2740b) - # Pirelli Alice Gate VoIP 2 Plus Wi-Fi AGPF-S0 - $(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,bccfe,,bccfe) - $(call Image/Build/CFEAGPF,$(1),AGPF-S0,6358,0x20000,ag306,,agv2+w) +define Build/xor-image + $(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor + mv $@.xor $@ endef +define Build/zyxel-bin + $(STAGING_DIR_HOST)/bin/zyxbcm -i $@ -o $@.zyxel + mv $@.zyxel $@ +endef + +define Build/redboot-bin + # Prepare kernel and rootfs + dd if=$(IMAGE_KERNEL) of=$(BIN_DIR)/$(REDBOOT_PREFIX)-vmlinux.gz bs=65536 conv=sync + dd if=$(IMAGE_ROOTFS) of=$(BIN_DIR)/$(REDBOOT_PREFIX)-$(notdir $(IMAGE_ROOTFS)) bs=64k conv=sync + echo -ne \\xDE\\xAD\\xC0\\xDE >> $(BIN_DIR)/$(REDBOOT_PREFIX)-$(notdir $(IMAGE_ROOTFS)) + # Generate the scripted image + $(TOPDIR)/scripts/redboot-script.pl \ + -k $(BIN_DIR)/$(REDBOOT_PREFIX)-vmlinux.gz \ + -r $(BIN_DIR)/$(REDBOOT_PREFIX)-$(notdir $(IMAGE_ROOTFS)) \ + -a $(strip $(LOADER_ENTRY)) -f 0xbe430000 -l 0x7c0000 \ + -s 0x1000 -t 20 -o $@.redbootscript + dd if="$@.redbootscript" of="$@.redbootscript.padded" bs=4096 conv=sync + cat \ + "$@.redbootscript.padded" \ + "$(BIN_DIR)/$(REDBOOT_PREFIX)-vmlinux.gz" \ + "$(BIN_DIR)/$(REDBOOT_PREFIX)-$(notdir $(IMAGE_ROOTFS))" \ + > "$@" +endef + +define Device/Default + PROFILES = Default $$(DEVICE_NAME) + KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts) + KERNEL_INITRAMFS_SUFFIX := .elf + DEVICE_DTS_DIR := ../dts +endef + +ATH5K_PACKAGES := kmod-ath5k wpad-mini +ATH9K_PACKAGES := kmod-ath9k wpad-mini +B43_PACKAGES := kmod-b43 wpad-mini +BRCMWL_PACKAGES := kmod-brcm-wl nas wlc +RT28_PACKAGES := kmod-rt2800-pci wpad-mini +RT61_PACKAGES := kmod-rt61-pci wpad-mini +USB1_PACKAGES := kmod-usb-ohci kmod-usb-ledtrig-usbport +USB2_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport + +include bcm63xx.mk + $(eval $(call BuildImage))