wok diff syslinux/stuff/iso2exe/iso2exe.sh @ rev 14261
syslinux/iso2exe: add NT+ support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Mar 30 18:36:46 2013 +0100 (2013-03-30) |
parents | 65b3fd0022ed |
children | ff85ea851c53 |
line diff
1.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh Thu Mar 28 11:51:42 2013 +0100 1.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh Sat Mar 30 18:36:46 2013 +0100 1.3 @@ -25,18 +25,27 @@ 1.4 cp -a /dev/?d?* $TMP/dev 1.5 $0 --get init > $TMP/init.exe 1.6 grep -q mount.posixovl.iso2exe $TMP/init.exe && 1.7 - cp /usr/sbin/mount.posixovl $TMP/bin/mount.posixovl.iso2exe 1.8 + cp /usr/sbin/mount.posixovl $TMP/bin/mount.posixovl.iso2exe && 1.9 + echo "Store mount.posixovl..." 1.10 find $TMP -type f | xargs chmod +x 1.11 ( cd $TMP ; find * | cpio -o -H newc ) | \ 1.12 lzma e $TMP/rootfs.gz -si 2> /dev/null 1.13 SIZE=$(wc -c < $TMP/rootfs.gz) 1.14 store 24 $SIZE $1 1.15 - OFS=$(( 0x8000 - $SIZE )) 1.16 + OFS=$(( $OFS - $SIZE )) 1.17 printf "Adding rootfs.gz file at %04X...\n" $OFS 1.18 cat $TMP/rootfs.gz | ddq of=$1 bs=1 seek=$OFS conv=notrunc 1.19 rm -rf $TMP 1.20 } 1.21 1.22 +add_dosexe() 1.23 +{ 1.24 + OFS=$((0x7EE0)) 1.25 + printf "Adding DOS/EXE at %04X...\n" $OFS 1.26 + $0 --get bootiso.bin 2> /dev/null | \ 1.27 + ddq bs=1 skip=$OFS of=$1 seek=$OFS conv=notrunc 1.28 +} 1.29 + 1.30 add_doscom() 1.31 { 1.32 SIZE=$($0 --get boot.com | wc -c) 1.33 @@ -48,20 +57,19 @@ 1.34 1.35 add_win32exe() 1.36 { 1.37 + printf "Adding WIN32 file at %04X...\n" 0 1.38 + ddq if=/tmp/exe$$ of=$1 conv=notrunc 1.39 SIZE=$($0 --get win32.exe 2> /dev/null | tee /tmp/exe$$ | wc -c) 1.40 - if [ $SIZE -ne 0 ]; then 1.41 - OFS=$(( 128 + ( ($OFS - $SIZE + 128) & 0xFE00 ) )) 1.42 - printf "Adding WIN32 file at %04X...\n" $OFS 1.43 - LOC=$((0xAC+$(get 0x94 /tmp/exe$$))) 1.44 - for i in $(seq 1 $(get 0x86 /tmp/exe$$)); do 1.45 - CUR=$(get $LOC /tmp/exe$$) 1.46 - [ $CUR -eq 0 ] || store $LOC $(($CUR+$OFS-128)) /tmp/exe$$ 1.47 - LOC=$(($LOC+40)) 1.48 - done 1.49 - ddq if=/tmp/exe$$ of=$1 bs=1 skip=128 seek=$OFS conv=notrunc 1.50 - store 60 $OFS $1 1.51 - fi 1.52 + ddq if=/tmp/exe$$ of=$1 conv=notrunc 1.53 + printf "Adding bootiso head at %04X...\n" 0 1.54 + $0 --get bootiso.bin 2> /dev/null > /tmp/exe$$ 1.55 + ddq if=/tmp/exe$$ of=$1 bs=128 count=1 conv=notrunc 1.56 + store 69 $(($SIZE/512)) $1 8 1.57 + store 510 $((0xAA55)) $1 1.58 rm -f /tmp/exe$$ 1.59 + printf "Moving syslinux hybrid boot record at %04X ...\n" $SIZE 1.60 + ddq if=$2 bs=1 count=512 of=$1 seek=$SIZE conv=notrunc 1.61 + OFS=$(($SIZE+512)) 1.62 } 1.63 1.64 add_fdbootstrap() 1.65 @@ -77,9 +85,7 @@ 1.66 case "$1" in 1.67 --build) 1.68 shift 1.69 - [ $(tar cf - $@ | wc -c) -gt $((32 * 1024)) ] && 1.70 - echo "WARNING: The file set $@ is too large (31K max) :" && 1.71 - ls -l $@ 1.72 + ls -l $@ 1.73 cat >> $0 <<EOM 1.74 $(tar cf - $@ | lzma e -si -so | uuencode -m -) 1.75 EOT 1.76 @@ -92,20 +98,20 @@ 1.77 --array) 1.78 DATA=/tmp/dataiso$$ 1.79 ddq if=/dev/zero bs=32k count=1 of=$DATA 1.80 - ddq if=bootiso.bin of=$DATA conv=notrunc 1.81 - ddq if=$2 of=$DATA bs=512 seek=1 conv=notrunc 1.82 + add_win32exe $DATA $2 > /dev/null 1.83 + HSZ=$OFS 1.84 + add_dosexe $DATA > /dev/null 1.85 add_rootfs $DATA > /dev/null 1.86 add_doscom $DATA > /dev/null 1.87 - add_win32exe $DATA > /dev/null 1.88 add_fdbootstrap $DATA > /dev/null 1.89 name=${3:-bootiso} 1.90 cat <<EOT 1.91 1.92 -#define $(echo $name | tr '[a-z]' '[A-Z]')SZ $((0x8400 - $OFS)) 1.93 +#define $(echo $name | tr '[a-z]' '[A-Z]')SZ $((0x8000 - $OFS + $HSZ)) 1.94 1.95 #ifdef WIN32 1.96 static char $name[] = { 1.97 -$(hexdump -v -n 1024 -e '" " 16/1 "0x%02X, "' -e '" // %04.4_ax |" 16/1 "%_p" "| \n"' $DATA | sed 's/ 0x ,/ /g') 1.98 +$(hexdump -v -n $HSZ -e '" " 16/1 "0x%02X, "' -e '" // %04.4_ax |" 16/1 "%_p" "| \n"' $DATA | sed 's/ 0x ,/ /g') 1.99 $(hexdump -v -s $OFS -e '" " 16/1 "0x%02X, "' -e '" // %04.4_ax |" 16/1 "%_p" "| \n"' $DATA | sed 's/ 0x ,/ /g') 1.100 }; 1.101 #endif 1.102 @@ -143,19 +149,21 @@ 1.103 [ ! -s "$1" ] && echo "usage: $0 image.iso" 1>&2 && exit 1 1.104 case "$(get 0 $1)" in 1.105 23117) echo "The file $1 is already an EXE file." 1>&2 && exit 1;; 1.106 - 0) [ -x /usr/bin/isohybrid ] && isohybrid $1 1.107 + 0) [ -x /usr/bin/isohybrid ] && isohybrid $1 && echo "Do isohybrid" 1.108 esac 1.109 1.110 - echo "Moving syslinux hybrid boot record..." 1.111 - ddq if=$1 bs=512 count=1 | ddq of=$1 bs=512 count=1 seek=1 conv=notrunc 1.112 + echo "Read hybrid & tazlito data..." 1.113 + ddq if=$1 bs=512 count=1 of=/tmp/hybrid$$ 1.114 + ddq if=$1 bs=512 skip=2 count=20 of=/tmp/tazlito$$ 1.115 + add_win32exe $1 /tmp/hybrid$$ 1.116 + printf "Moving tazlito data record at %04X ...\n" $OFS 1.117 + ddq if=/tmp/tazlito$$ bs=1 count=512 of=$1 seek=$OFS conv=notrunc 1.118 + rm -f /tmp/tazlito$$ /tmp/hybrid$$ 1.119 1.120 - echo "Inserting EXE boot record..." 1.121 - $0 --get bootiso.bin | ddq of=$1 conv=notrunc 1.122 - 1.123 # keep the largest room for the tazlito info file 1.124 + add_dosexe $1 1.125 add_rootfs $1 1.126 add_doscom $1 1.127 - add_win32exe $1 1.128 add_fdbootstrap $1 1.129 store 26 ${RANDOM:-0} $1 1.130 i=66