#!/bin/sh [ -s "$1" -a "$2" ] || { cat << EOT Usage: $0 zImage-to-read bzImage-to-create [version-string] EOT exit 1 } ddq() { dd "$@" 2> /dev/null } get() { echo $( od -v -j $(($1)) -N ${4:-${3:-2}} -t u${3:-2} -w${3:-2} \ -An $2 2>/dev/null ) } store() { n=$3; for i in $(seq 8 8 $1); do printf '\\\\x%02X' $(($n & 255)) n=$(($n >> 8)) done | xargs echo -en | ddq bs=1 conv=notrunc of=$4 seek=$(($2)) } create_bzImage() { ddq bs=512 count=1 of=$1 [ "$(od -j 486 $1 -An -N 4 -a|sed 's/ //g')" == "ELKS" ] && iselks=1 [ " $(get 0x3F $1 2)" == " 15080" ] && islinux001=1 && cp $1 $1$$ # from http://hg.slitaz.org/wok/file/7184ec55b1aa/linux/stuff/linux-header.u uudecode <> $1 begin-base64 644 - H4sIAG2wX1cCA3ut4pFSFMzAxAACAgyMQNgAYqCCOXxZDAmG/9OOs35emnhe LnwfB9NabpYS5v8x/wy/9d1L+1/Cote5pI6hoYb9Q7HmcReWVIYeH7Y5Ef+O BMz9n5MSJtf5zOxoCUujzVlJ+bjSfWA9/S4pexgYgBSLmHzn452cDGGP/u5g nDwzICwobIEYE5DayAEU2s/A1B36RYy989lOhoYt7WdF/7uI/HeRaXzFIFD+ tvmIwU4GxteCHfnifQfDDf8bftvK9nlpPJv8PgaWf74fX7MfY3cy/P95aVfu x9MMWEGVZ25ieirDiAUAs6tFkQACAAA= ==== EOT s="$2" [ -s "$s" ] && s="$(cat "$s")" [ -z "$s" ] && s="$(basename "$1")" echo -e "\n$s" | tr '\n' '\r' | cat - /dev/zero | \ ddq conv=notrunc of=$1 bs=1 seek=768 count=255 setupsz=$(get 497 $1 1) [ $setupsz -eq 0 ] && setupsz=4 if [ "$islinux001" == "1" ]; then cat $1$$ /dev/zero | ddq bs=512 count=$setupsz >> $1 rm -f $1$$ else ddq bs=512 count=$setupsz >> $1 if [ "$(od -j 1026 $1 -An -N 4 -a|sed 's/ //g')" == "HdrS" ] && [ $(($(get 1041 $1 1) & 1)) -eq 1 ]; then echo "Already a bzImage file, abort." rm -f $1 exit 1 fi fi store 8 497 $(($setupsz+1)) $1 syssz=$(get 500 $1 2) [ $syssz -eq 0 ] && syssz=$((($filesz+15-512)/16-($setupsz*32))) [ "$islinux001" == "1" ] && syssz=$((($filesz+15-512)/16)) store 16 500 $syssz $1 [ "$iselks" == "1" ] && store 16 708 37008 $1 [ "$islinux001" == "1" ] && store 16 733 37008 $1 ddq >> $1 } filesz=$(stat -c %s $1) create_bzImage $2 "$3" < $1 .