#!/bin/sh BLKSZ=65536 [ -f "$1" -a -f "$2" ] || { echo "Usage: $0 [output file]" exit 1 } IMAGE=${3:-openwrt-combined.img} # Make sure provided images are 64k aligned. kern="${IMAGE}.kernel" root="${IMAGE}.rootfs" dd if="$1" of="$kern" bs=$BLKSZ conv=sync 2>/dev/null dd if="$2" of="$root" bs=$BLKSZ conv=sync 2>/dev/null # Calculate md5sum over combined kernel and rootfs image. md5=$(cat "$kern" "$root" | mkhash md5) # Write image header followed by kernel and rootfs image. # The header is padded to 64k, format is: # CI magic word ("Combined Image") # length of kernel encoded as zero padded 8 digit hex # length of rootfs encoded as zero padded 8 digit hex # checksum of the combined kernel and rootfs image ( printf "CI%08x%08x%32s" \ $(stat -c "%s" "$kern") $(stat -c "%s" "$root") "${md5%% *}" | \ dd bs=$BLKSZ conv=sync; cat "$kern" "$root" ) > ${IMAGE} 2>/dev/null # Clean up. rm -f "$kern" "$root"