This patch is a complete overhaul of the image makefile for the Orion generic target.[BR] Code is written in a way that it can be reused several times in the image file, but can also be easily adopted to other targets (BuildKernel, Sysupgrade image, etc.).[BR] Only working images are generated, e.g. only JFFS images for the erase size (WRT350Nv2 = 64k, WNR854T = 128k).
Signed-off-by: Matthias Buecher <mail@…> Corresponding ticket 10205: https://dev.openwrt.org/ticket/10205 Index: target/linux/orion/image/generic.mk =================================================================== --- target/linux/orion/image/generic.mk (revision 28391) +++ target/linux/orion/image/generic.mk (working copy) @@ -1,90 +1,151 @@ # -# Copyright (C) 2008-2010 OpenWrt.org +# Copyright (C) 2008-2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # +### DO NOT INDENT LINES CONTAINING $(call xyz) AS THIS MAY CHANGE THE CONTEXT +### OF THE FIRST LINE IN THE CALLED VARIABLE (NOTE: variable!) +### see http://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function + + +### +### Image/Prepare +### + define Image/Prepare - cp $(LINUX_DIR)/arch/arm/boot/uImage $(KDIR)/uImage +### Dummy comment for indented calls of Image/Prepare + cp $(LINUX_DIR)/arch/arm/boot/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage endef + +### +### Image/BuildKernel +### + define Image/BuildKernel - # Orion Kernel uImages - # WRT350N v2: mach id 1633 (0x661) - echo -en "\x06\x1c\xa0\xe3\x61\x10\x81\xe3" > $(KDIR)/wrt350nv2-zImage - cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/wrt350nv2-zImage +### Dummy comment for indented calls of Image/BuildKernel + # Netgear WNR854T: mach id 1801 (0x0709) +$(call Image/BuildKernel/Default,wnr854t,"\x07\x1c\xa0\xe3\x09\x10\x81\xe3") + # Linksys WRT350N v2: mach id 1633 (0x0661) +$(call Image/BuildKernel/Default,wrt350nv2,"\x06\x1c\xa0\xe3\x61\x10\x81\xe3") +endef + +define Image/BuildKernel/Default + # parameters: 1 = machine name, 2 = machine id as string + # Orion Kernel uImage for $(1) + # merge machine id and regular zImage into one file + echo -en $(2) > $(KDIR)/$(1)-zImage + cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/$(1)-zImage + # create uImage from file created in previous steps $(STAGING_DIR_HOST)/bin/mkimage -A arm -O linux -T kernel \ -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ - -d $(KDIR)/wrt350nv2-zImage $(KDIR)/wrt350nv2-uImage - cp $(KDIR)/wrt350nv2-uImage $(BIN_DIR)/openwrt-wrt350nv2-uImage - # WNR854T: mach id 1801 (0x709) - echo -en "\x07\x1c\xa0\xe3\x09\x10\x81\xe3" > $(KDIR)/wnr854t-zImage - cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/wnr854t-zImage - $(STAGING_DIR_HOST)/bin/mkimage -A arm -O linux -T kernel \ - -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ - -d $(KDIR)/wnr854t-zImage $(KDIR)/wnr854t-uImage - cp $(KDIR)/wnr854t-uImage $(BIN_DIR)/openwrt-wnr854t-uImage + -d $(KDIR)/$(1)-zImage $(KDIR)/$(1)-uImage + # copy uImage to bin dir + cp $(KDIR)/$(1)-uImage $(BIN_DIR)/openwrt-$(1)-uImage endef -define Image/Build/Netgear - # Orion Netgear Images - mkdir $(KDIR)/netgear_image - cp $(KDIR)/wnr854t-uImage $(KDIR)/netgear_image/uImage - $(STAGING_DIR_HOST)/bin/mkfs.jffs2 -m none -p -l -q -e 128KiB -o $(KDIR)/wnr854t-uImage.jffs2 -d $(KDIR)/netgear_image - rm -rf $(KDIR)/netgear_image + +### +### Image/Build +### + +define Image/Build +### Dummy comment for indented calls of Image/Build +$(call Image/Build/$(1),$(1)) + # Netgear WNR854T: erase size is 128k = 0x00020000 = 131072 +$(call Image/Build/Netgear/wnr854t,$(1),128k,1048576,NG_WNR854T) + # Linksys WRT350N v2: erase size is 64k = 0x00010000 = 65536 +$(call Image/Build/Linksys/wrt350nv2,$(1),64k,1048576) +endef + +define Image/Build/squashfs +$(call prepare_generic_squashfs,$(KDIR)/root.squashfs) +endef + +define Image/Build/Default/sysupgrade + # parameters: 1 = rootfs type, 2 = machine name, 3 = pad size (erase or kernel size) + # Orion $(1) sysupgrade image for $(2) + # sysupgrade image ( \ - dd if=$(KDIR)/wnr854t-uImage.jffs2 bs=1024k conv=sync; \ - dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \ - ) > $(BIN_DIR)/openwrt-$(2)-$(1).img + dd if="${KDIR}/$(2)-uImage" bs=$(3) conv=sync; \ + dd if="${KDIR}/root.$(1)"; \ + ) > "${BIN_DIR}/openwrt-$(2)-$(1).img" +endef + +define Image/Build/Default/webupgrade + # parameters: 1 = rootfs type, 2 = machine name, 3 = header + # Orion $(1) webupgrade image for $(2) + # webupgrade image $(STAGING_DIR_HOST)/bin/add_header $(3) $(BIN_DIR)/openwrt-$(2)-$(1).img $(BIN_DIR)/openwrt-$(2)-$(1)-webupgrade.img endef -define Image/Build/Linksys - # Orion Linksys Images - # sysupgrade image - ( \ - dd if="${KDIR}/$2-uImage" bs=$5 conv=sync; \ - dd if="${KDIR}/root.$1" bs=64k conv=sync; \ - ) > "${BIN_DIR}/openwrt-$2-$1.img" + +### +### Netgear +### + +define Image/Build/Netgear/wnr854t + # parameters: 1 = rootfs type, 2 = erase size, 3 = kernel size, 4 = header + ifneq ($(findstring jffs2-,$(1)),) # JFFS2: build only image fitting to erase size + ifeq ($(1),jffs2-$(2)) +$(call Image/Build/Default/sysupgrade,$(1),wnr854t,$(3)) +$(call Image/Build/Default/webupgrade,$(1),wnr854t,$(4)) + endif +# + else # do all other images +$(call Image/Build/Default/sysupgrade,$(1),wnr854t,$(3)) +$(call Image/Build/Default/webupgrade,$(1),wnr854t,$(4)) + endif +endef + + +### +### Linksys +### + +define Image/Build/Linksys/wrt350nv2 + # parameters: 1 = rootfs type, 2 = erase size, 3 = kernel size + ifneq ($(findstring jffs2-,$(1)),) # JFFS2: build only image fitting to erase size + ifeq ($(1),jffs2-$(2)) +$(call Image/Build/Default/sysupgrade,$(1),wrt350nv2,$(3)) +$(call Image/Build/Linksys/wrt350nv2-builder,$(1),wrt350nv2,$(3)) + endif +# + else # do all other images +$(call Image/Build/Default/sysupgrade,$(1),wrt350nv2,$(3)) + ifeq ($(1),squashfs) +$(call Image/Build/Linksys/wrt350nv2-builder,$(1),wrt350nv2,$(3)) + endif + endif +endef + +define Image/Build/Linksys/wrt350nv2-builder + # parameters: 1 = rootfs type, 2 = machine name, 3 = kernel size + # Orion $(1) webupgrade and recovery image for $(2) via wrt350nv2-builder # recovery image and webupgrade image for stock firmware - rm -rf "${TMP_DIR}/$2_webupgrade" - mkdir "${TMP_DIR}/$2_webupgrade" + rm -rf "${TMP_DIR}/$(2)_webupgrade" + mkdir "${TMP_DIR}/$(2)_webupgrade" # create parameter file - echo ":kernel $5 ${BIN_DIR}/openwrt-$2-uImage" >"${TMP_DIR}/$2_webupgrade/$2.par" - echo ":rootfs 0 ${KDIR}/root.$1" >>"${TMP_DIR}/$2_webupgrade/$2.par" + echo ":kernel $(3) ${BIN_DIR}/openwrt-$(2)-uImage" >"${TMP_DIR}/$(2)_webupgrade/$(2).par" + echo ":rootfs 0 ${KDIR}/root.$(1)" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par" [ ! -f "$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" ] || ( \ - echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$2_webupgrade/$2.par"; ) - echo "#version 0x2020" >>"${TMP_DIR}/$2_webupgrade/$2.par" + echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par"; ) + echo "#version 0x2020" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par" # create bin file for recovery and webupgrade image - ( cd "${TMP_DIR}/$2_webupgrade"; \ - "${STAGING_DIR_HOST}/bin/$2-builder" \ - -v -b "${TMP_DIR}/$2_webupgrade/$2.par"; \ + ( cd "${TMP_DIR}/$(2)_webupgrade"; \ + "${STAGING_DIR_HOST}/bin/wrt350nv2-builder" \ + -v -b "${TMP_DIR}/$(2)_webupgrade/$(2).par"; \ ) # copy bin file as recovery image - $(CP) "${TMP_DIR}/$2_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin" + $(CP) "${TMP_DIR}/$(2)_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$(2)-$(1)-recovery.bin" # create webupgrade image for stock firmware update mechanism - zip "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${TMP_DIR}/$2_webupgrade/wrt350n.bin" - "${STAGING_DIR_HOST}/bin/$2-builder" -v -z "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$2-$1-webupgrade.img" - rm -rf "${TMP_DIR}/$2_webupgrade" + zip "${TMP_DIR}/$(2)_webupgrade/wrt350n.zip" "${TMP_DIR}/$(2)_webupgrade/wrt350n.bin" + "${STAGING_DIR_HOST}/bin/wrt350nv2-builder" -v -z "${TMP_DIR}/$(2)_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$(2)-$(1)-webupgrade.img" + rm -rf "${TMP_DIR}/$(2)_webupgrade" endef -define Image/Build -$(call Image/Build/$(1),$(1)) -$(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1)) - # Leave WRT350Nv2 at last position due to webimage dependency for zip - # 5th parameter is kernel mtd size, e.g. 0x00100000 = 1048576 or 0x001A0000 = 1703936 -$(call Image/Build/Linksys,$(1),wrt350nv2,WNR350Nv2,$(1),1048576) -endef - -define Image/Build/squashfs -$(call prepare_generic_squashfs,$(KDIR)/root.squashfs) - ( \ - dd if=$(KDIR)/uImage bs=1024k conv=sync; \ - dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \ - ) > $(BIN_DIR)/$(IMG_PREFIX)-$(1).img -endef - # Dependency for WRT350N v2 webupgrade image $(eval $(call RequireCommand,zip, \ Please install zip. \
Index: target/linux/orion/image/generic.mk =================================================================== --- target/linux/orion/image/generic.mk (revision 28391) +++ target/linux/orion/image/generic.mk (working copy) @@ -1,90 +1,151 @@ # -# Copyright (C) 2008-2010 OpenWrt.org +# Copyright (C) 2008-2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # +### DO NOT INDENT LINES CONTAINING $(call xyz) AS THIS MAY CHANGE THE CONTEXT +### OF THE FIRST LINE IN THE CALLED VARIABLE (NOTE: variable!) +### see http://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function + + +### +### Image/Prepare +### + define Image/Prepare - cp $(LINUX_DIR)/arch/arm/boot/uImage $(KDIR)/uImage +### Dummy comment for indented calls of Image/Prepare + cp $(LINUX_DIR)/arch/arm/boot/zImage $(BIN_DIR)/$(IMG_PREFIX)-zImage endef + +### +### Image/BuildKernel +### + define Image/BuildKernel - # Orion Kernel uImages - # WRT350N v2: mach id 1633 (0x661) - echo -en "\x06\x1c\xa0\xe3\x61\x10\x81\xe3" > $(KDIR)/wrt350nv2-zImage - cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/wrt350nv2-zImage +### Dummy comment for indented calls of Image/BuildKernel + # Netgear WNR854T: mach id 1801 (0x0709) +$(call Image/BuildKernel/Default,wnr854t,"\x07\x1c\xa0\xe3\x09\x10\x81\xe3") + # Linksys WRT350N v2: mach id 1633 (0x0661) +$(call Image/BuildKernel/Default,wrt350nv2,"\x06\x1c\xa0\xe3\x61\x10\x81\xe3") +endef + +define Image/BuildKernel/Default + # parameters: 1 = machine name, 2 = machine id as string + # Orion Kernel uImage for $(1) + # merge machine id and regular zImage into one file + echo -en $(2) > $(KDIR)/$(1)-zImage + cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/$(1)-zImage + # create uImage from file created in previous steps $(STAGING_DIR_HOST)/bin/mkimage -A arm -O linux -T kernel \ -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ - -d $(KDIR)/wrt350nv2-zImage $(KDIR)/wrt350nv2-uImage - cp $(KDIR)/wrt350nv2-uImage $(BIN_DIR)/openwrt-wrt350nv2-uImage - # WNR854T: mach id 1801 (0x709) - echo -en "\x07\x1c\xa0\xe3\x09\x10\x81\xe3" > $(KDIR)/wnr854t-zImage - cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/wnr854t-zImage - $(STAGING_DIR_HOST)/bin/mkimage -A arm -O linux -T kernel \ - -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ - -d $(KDIR)/wnr854t-zImage $(KDIR)/wnr854t-uImage - cp $(KDIR)/wnr854t-uImage $(BIN_DIR)/openwrt-wnr854t-uImage + -d $(KDIR)/$(1)-zImage $(KDIR)/$(1)-uImage + # copy uImage to bin dir + cp $(KDIR)/$(1)-uImage $(BIN_DIR)/openwrt-$(1)-uImage endef -define Image/Build/Netgear - # Orion Netgear Images - mkdir $(KDIR)/netgear_image - cp $(KDIR)/wnr854t-uImage $(KDIR)/netgear_image/uImage - $(STAGING_DIR_HOST)/bin/mkfs.jffs2 -m none -p -l -q -e 128KiB -o $(KDIR)/wnr854t-uImage.jffs2 -d $(KDIR)/netgear_image - rm -rf $(KDIR)/netgear_image + +### +### Image/Build +### + +define Image/Build +### Dummy comment for indented calls of Image/Build +$(call Image/Build/$(1),$(1)) + # Netgear WNR854T: erase size is 128k = 0x00020000 = 131072 +$(call Image/Build/Netgear/wnr854t,$(1),128k,1048576,NG_WNR854T) + # Linksys WRT350N v2: erase size is 64k = 0x00010000 = 65536 +$(call Image/Build/Linksys/wrt350nv2,$(1),64k,1048576) +endef + +define Image/Build/squashfs +$(call prepare_generic_squashfs,$(KDIR)/root.squashfs) +endef + +define Image/Build/Default/sysupgrade + # parameters: 1 = rootfs type, 2 = machine name, 3 = pad size (erase or kernel size) + # Orion $(1) sysupgrade image for $(2) + # sysupgrade image ( \ - dd if=$(KDIR)/wnr854t-uImage.jffs2 bs=1024k conv=sync; \ - dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \ - ) > $(BIN_DIR)/openwrt-$(2)-$(1).img + dd if="${KDIR}/$(2)-uImage" bs=$(3) conv=sync; \ + dd if="${KDIR}/root.$(1)"; \ + ) > "${BIN_DIR}/openwrt-$(2)-$(1).img" +endef + +define Image/Build/Default/webupgrade + # parameters: 1 = rootfs type, 2 = machine name, 3 = header + # Orion $(1) webupgrade image for $(2) + # webupgrade image $(STAGING_DIR_HOST)/bin/add_header $(3) $(BIN_DIR)/openwrt-$(2)-$(1).img $(BIN_DIR)/openwrt-$(2)-$(1)-webupgrade.img endef -define Image/Build/Linksys - # Orion Linksys Images - # sysupgrade image - ( \ - dd if="${KDIR}/$2-uImage" bs=$5 conv=sync; \ - dd if="${KDIR}/root.$1" bs=64k conv=sync; \ - ) > "${BIN_DIR}/openwrt-$2-$1.img" + +### +### Netgear +### + +define Image/Build/Netgear/wnr854t + # parameters: 1 = rootfs type, 2 = erase size, 3 = kernel size, 4 = header + ifneq ($(findstring jffs2-,$(1)),) # JFFS2: build only image fitting to erase size + ifeq ($(1),jffs2-$(2)) +$(call Image/Build/Default/sysupgrade,$(1),wnr854t,$(3)) +$(call Image/Build/Default/webupgrade,$(1),wnr854t,$(4)) + endif +# + else # do all other images +$(call Image/Build/Default/sysupgrade,$(1),wnr854t,$(3)) +$(call Image/Build/Default/webupgrade,$(1),wnr854t,$(4)) + endif +endef + + +### +### Linksys +### + +define Image/Build/Linksys/wrt350nv2 + # parameters: 1 = rootfs type, 2 = erase size, 3 = kernel size + ifneq ($(findstring jffs2-,$(1)),) # JFFS2: build only image fitting to erase size + ifeq ($(1),jffs2-$(2)) +$(call Image/Build/Default/sysupgrade,$(1),wrt350nv2,$(3)) +$(call Image/Build/Linksys/wrt350nv2-builder,$(1),wrt350nv2,$(3)) + endif +# + else # do all other images +$(call Image/Build/Default/sysupgrade,$(1),wrt350nv2,$(3)) + ifeq ($(1),squashfs) +$(call Image/Build/Linksys/wrt350nv2-builder,$(1),wrt350nv2,$(3)) + endif + endif +endef + +define Image/Build/Linksys/wrt350nv2-builder + # parameters: 1 = rootfs type, 2 = machine name, 3 = kernel size + # Orion $(1) webupgrade and recovery image for $(2) via wrt350nv2-builder # recovery image and webupgrade image for stock firmware - rm -rf "${TMP_DIR}/$2_webupgrade" - mkdir "${TMP_DIR}/$2_webupgrade" + rm -rf "${TMP_DIR}/$(2)_webupgrade" + mkdir "${TMP_DIR}/$(2)_webupgrade" # create parameter file - echo ":kernel $5 ${BIN_DIR}/openwrt-$2-uImage" >"${TMP_DIR}/$2_webupgrade/$2.par" - echo ":rootfs 0 ${KDIR}/root.$1" >>"${TMP_DIR}/$2_webupgrade/$2.par" + echo ":kernel $(3) ${BIN_DIR}/openwrt-$(2)-uImage" >"${TMP_DIR}/$(2)_webupgrade/$(2).par" + echo ":rootfs 0 ${KDIR}/root.$(1)" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par" [ ! -f "$(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" ] || ( \ - echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$2_webupgrade/$2.par"; ) - echo "#version 0x2020" >>"${TMP_DIR}/$2_webupgrade/$2.par" + echo ":u-boot 0 $(STAGING_DIR_HOST)/share/wrt350nv2-builder/u-boot.bin" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par"; ) + echo "#version 0x2020" >>"${TMP_DIR}/$(2)_webupgrade/$(2).par" # create bin file for recovery and webupgrade image - ( cd "${TMP_DIR}/$2_webupgrade"; \ - "${STAGING_DIR_HOST}/bin/$2-builder" \ - -v -b "${TMP_DIR}/$2_webupgrade/$2.par"; \ + ( cd "${TMP_DIR}/$(2)_webupgrade"; \ + "${STAGING_DIR_HOST}/bin/wrt350nv2-builder" \ + -v -b "${TMP_DIR}/$(2)_webupgrade/$(2).par"; \ ) # copy bin file as recovery image - $(CP) "${TMP_DIR}/$2_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$2-$1-recovery.bin" + $(CP) "${TMP_DIR}/$(2)_webupgrade/wrt350n.bin" "$(BIN_DIR)/openwrt-$(2)-$(1)-recovery.bin" # create webupgrade image for stock firmware update mechanism - zip "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${TMP_DIR}/$2_webupgrade/wrt350n.bin" - "${STAGING_DIR_HOST}/bin/$2-builder" -v -z "${TMP_DIR}/$2_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$2-$1-webupgrade.img" - rm -rf "${TMP_DIR}/$2_webupgrade" + zip "${TMP_DIR}/$(2)_webupgrade/wrt350n.zip" "${TMP_DIR}/$(2)_webupgrade/wrt350n.bin" + "${STAGING_DIR_HOST}/bin/wrt350nv2-builder" -v -z "${TMP_DIR}/$(2)_webupgrade/wrt350n.zip" "${BIN_DIR}/openwrt-$(2)-$(1)-webupgrade.img" + rm -rf "${TMP_DIR}/$(2)_webupgrade" endef -define Image/Build -$(call Image/Build/$(1),$(1)) -$(call Image/Build/Netgear,$(1),wnr854t,NG_WNR854T,$(1)) - # Leave WRT350Nv2 at last position due to webimage dependency for zip - # 5th parameter is kernel mtd size, e.g. 0x00100000 = 1048576 or 0x001A0000 = 1703936 -$(call Image/Build/Linksys,$(1),wrt350nv2,WNR350Nv2,$(1),1048576) -endef - -define Image/Build/squashfs -$(call prepare_generic_squashfs,$(KDIR)/root.squashfs) - ( \ - dd if=$(KDIR)/uImage bs=1024k conv=sync; \ - dd if=$(KDIR)/root.$(1) bs=128k conv=sync; \ - ) > $(BIN_DIR)/$(IMG_PREFIX)-$(1).img -endef - # Dependency for WRT350N v2 webupgrade image $(eval $(call RequireCommand,zip, \ Please install zip. \
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel