image: fix Linksys image alignment and simplify footer creation
Current factory image sizes for Linksys devices are 256-byte aligned. This
is not an issue writing factory images from the OpenWrt or Linksys GUIs,
but can lead to failures using a TFTP client from the Linksys bootloader:
     NAND write: device 1 offset 0x2800000, size 0xc00100
     Attempt to write to non page aligned data
     NAND write to offset 2800000 failed -22
      0 bytes written: ERROR
Simplify Linksys footer creation by migrating to a makefile build recipe,
and pre-pad the footer (with 0xFF) to ensure the final image is $(PAGESIZE)
aligned.  Finally, remove the old linksys-image.sh script no longer needed.
Linksys footer details are given below for future reference. The 256-byte
footer is appended to factory images and tested by both the Linksys
Upgrader (observed in EA6350v3) and OpenWrt sysupgrade.
  Footer format:
    .LINKSYS.     Checked by Linksys upgrader before continuing.  (9 bytes)
    <VERSION>     Upgrade version number, unchecked so arbitrary. (8 bytes)
    <TYPE>        Model of device, space padded (0x20).          (15 bytes)
    <CRC>         CRC checksum of factory image to flash.         (8 bytes)
    <padding>     Padding ('0' + 0x20 * 7)                        (8 bytes)
    <signature>   Signature of signer, unchecked so arbitrary.   (16 bytes)
    <padding>     Padding with nulls (0x00)                     (192 bytes)
Link: https://github.com/openwrt/openwrt/pull/11405#issuecomment-1358510123
Link: https://github.com/openwrt/openwrt/pull/11405#issuecomment-1587517739
Reported-by: Stijn Segers <foss@volatilesystems.org>
Reported-by: Wyatt Martin <wawowl@gmail.com>
Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			
						parent
						
							b16e14a220
						
					
				
				
					commit
					cd5e0134b6
				
			@@ -389,10 +389,17 @@ define Build/kernel-bin
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Build/linksys-image
 | 
			
		||||
	$(TOPDIR)/scripts/linksys-image.sh \
 | 
			
		||||
	let \
 | 
			
		||||
		size="$$(stat -c%s $@)" \
 | 
			
		||||
		pad="$(call exp_units,$(PAGESIZE))" \
 | 
			
		||||
		offset="256" \
 | 
			
		||||
		pad="(pad - ((size + offset) % pad)) % pad"; \
 | 
			
		||||
		dd if=/dev/zero bs=$$pad count=1 | tr '\000' '\377' >> $@
 | 
			
		||||
	printf ".LINKSYS.01000409%-15s%08X%-8s%-16s" \
 | 
			
		||||
		"$(call param_get_default,type,$(1),$(DEVICE_NAME))" \
 | 
			
		||||
		$@ $@.new
 | 
			
		||||
		mv $@.new $@
 | 
			
		||||
		"$$(cksum $@ | cut -d ' ' -f1)" \
 | 
			
		||||
		"0" "K0000000F0246434" >> $@
 | 
			
		||||
	dd if=/dev/zero bs=192 count=1 >> $@
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define Build/lzma
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user