wok-tiny diff linux/stuff/bundle @ rev 168
memtest: 386 support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Fri Apr 30 16:35:54 2021 +0000 (2021-04-30) |
parents | c82d2b7a51b4 |
children | 5e2b41f82f13 |
line diff
1.1 --- a/linux/stuff/bundle Wed Aug 23 12:08:35 2017 +0200 1.2 +++ b/linux/stuff/bundle Fri Apr 30 16:35:54 2021 +0000 1.3 @@ -36,6 +36,7 @@ 1.4 cat <<EOT 1.5 Usage: $p kernel [initrd] [@] 1.6 or: $p menufile "menu title" file1 "menu entry 1" ... 1.7 +or: cat floppy.* > floppyset ; $p floppyset 1.8 EOT 1.9 elif [ -n "$4" ]; then 1.10 out="$1" 1.11 @@ -49,38 +50,36 @@ 1.12 shift 2 1.13 free=$((0x1F1 - 2 - $pos - $crc)) 1.14 while [ -n "$2" -a $free -ge ${#2} ]; do 1.15 - echo "$((($(stat -c "%s" "$1")+511)/512)) $1 $2" 1.16 + echo "$((($(stat -Lc "%s" "$1")+511)/512))?$1?$2" 1.17 shift 2 1.18 - done | awk ' 1.19 -BEGIN { i=0 } { sz[i]=$1; fn[i]=$2; sub(".*"$2,""); me[i++]=$0 } 1.20 -END { 1.21 - for (m=0, l=p=1; m<i; m++) { 1.22 - for (s=100000, j=0; j<i; j++) if (!lc[j] && sz[j]<s) s=sz[k=j]; 1.23 - f2[m]=fn[k]; s2[m]=s; lc[k]=l; l+=s; l2[m]=p; p+=sz[m] 1.24 - } 1.25 - for (j=0; j<i; j++) 1.26 - print sz[j] " " lc[j] " " fn[j] " " s2[j] " " l2[j] " " f2[j] " " me[j] 1.27 -}' | while read s p file s2 p2 file2 entry ; do 1.28 - [ -z "$SORT_MENU" ] && file2=$file && s2=$s && p=$p2 1.29 + done | awk -F? 'BEGIN { nxt=1; i=0 } 1.30 +{ ofs[i]=$1; nxt+=$1 ; file[i]=$2; name[i]=$3; i++ } 1.31 +END { for (j = 0; j < i; j++) { nxt-=ofs[j] 1.32 +print nxt " " ofs[j] " " file[j] " " name[j] }}' | \ 1.33 + while read p s file name; do 1.34 x="$(printf '\\x%02x\\x%02x' $(($p % 256)) $(($p / 256)) )" 1.35 - echo -en "$x$entry\0" | ddq bs=1 of="$out" seek=$pos conv=notrunc 1.36 - pos=$(($pos+2+${#entry}+1)) 1.37 - cat "$file2" /dev/zero | ddq bs=512 count=$s2 >> "$out" 1.38 + echo -en "$x$name\0" | ddq bs=1 of="$out" seek=$pos conv=notrunc 1.39 + pos=$(($pos+2+${#name}+1)) 1.40 if [ $crc -ne 0 ]; then 1.41 - x=$(cat "$file" /dev/zero | ddq bs=512 count=$s | od -v \ 1.42 - -t u2 -w2 -An|awk '{i+=$0} END {print (i % 65536)}') 1.43 - x="$(printf '\\x%02x\\x%02x' $(($x % 256)) $(($x / 256)) )" 1.44 + x=$(cat "$file" /dev/zero | ddq bs=512 count=$s | \ 1.45 + od -v -t u2 -w2 -An | awk '{i+=$0} \ 1.46 + END {print (i % 65536)}') 1.47 + x="$(printf '\\x%02x\\x%02x' $(($x%256)) $(($x/256)) )" 1.48 echo -en "$x" | ddq bs=1 of="$out" seek=$pos conv=notrunc 1.49 pos=$(($pos+2)) 1.50 - x="$(printf '\\x%02x\\x%02x' $(($s % 256)) $(($s / 256)) )" 1.51 + x="$(printf '\\x%02x\\x%02x' $(($s%256)) $(($s/256)) )" 1.52 echo -en "$x" | ddq bs=1 of="$out" seek=$pos conv=notrunc 1.53 pos=$(($pos+2)) 1.54 fi 1.55 - shift 2 1.56 + echo "$file $s" 1.57 + done | awk 'BEGIN { i=0 } { file[i]=$1; size[i]=$2; i++ } 1.58 + END { while (--i >= 0) print file[i] " " size[i] }' | \ 1.59 + while read file size; do 1.60 + cat "$file" /dev/zero | ddq bs=512 count=$size >> "$out" 1.61 done 1.62 elif [ -s "$2" ]; then 1.63 base_initrd=$((0x00300000)) 1.64 - size_initrd=$(stat -c %s "$2") 1.65 + size_initrd=$(stat -Lc %s "$2") 1.66 [ $(($base_initrd + $size_initrd)) -gt $((0x1000000)) ] && 1.67 base_initrd=$((0x01400000)) 1.68 [ "$3" ] && base_initrd=$(($3)) 1.69 @@ -95,16 +94,16 @@ 1.70 [ $(get $(($menu -3)) "$1" 2) -eq 24937 ] && skip=4 || skip=0 1.71 ddq bs=1 skip=$menu count=$((0x1F3 - $menu)) if="$1" | \ 1.72 od -v -t u1 -w1 -An | awk -vx=$skip '{ 1.73 - if (--skip >= 0) next 1.74 + if (--skip >= 0) next # crc, len 1.75 if (--bytes < 0) { 1.76 - if ($1 == 0) { 1.77 - if (mul > 0) { 1.78 + if ($1 == 0) { # eos 1.79 + if (mul > 0) { # menu label 1.80 if (sector == 0) exit 1.81 skip=x; print sector " " s 1.82 } 1.83 - s=""; sector=0; mul=1; bytes=2 1.84 + s=""; sector=0; mul=1; bytes=2 # menu title 1.85 } 1.86 - else { c=sprintf("%c",$1); s=s c } 1.87 + else { c=sprintf("%c",$1); s=s c } # menu title/label 1.88 } 1.89 else { sector += $0*mul; mul *= 256 } 1.90 }' | while read s name; do 1.91 @@ -114,11 +113,12 @@ 1.92 if [ $(get $(($s*512 + 0x202)) "$1" 2) -eq 25672 ]; then 1.93 x=$(get $(($s*512 + 0x21C)) "$1") 1.94 [ $x -ne 0 ] && x=$(((($cnt+31)/32)*512+$x)) && 1.95 - cnt=$((($x+15)/16)) 1.96 + cnt=$((($x+15)/16)) # initrd 1.97 fi 1.98 ddq bs=16 skip=$((32*$s)) count=$cnt if="$1" of="$name" 1.99 [ $x -ne 0 ] && ddq bs=1 seek=$x count=0 of="$name" 1.100 - ls -l "$name" 1.101 + printf "S%04X %9d " $s $(($cnt*16)) 1.102 + ls -l "$name" | cut -c35- 1.103 done 1.104 else 1.105 base_initrd=$(get 0x218 "$1")