wok diff BootProg/stuff/bootprog.sh @ rev 24942
BootProg: clear cmdline
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Apr 20 15:10:50 2022 +0000 (2022-04-20) |
parents | 89c8d8b6cf48 |
children | 810e3d0a38f7 |
line diff
1.1 --- a/BootProg/stuff/bootprog.sh Fri Feb 18 09:29:30 2022 +0000 1.2 +++ b/BootProg/stuff/bootprog.sh Wed Apr 20 15:10:50 2022 +0000 1.3 @@ -1,39 +1,30 @@ 1.4 #!/bin/sh 1.5 1.6 [ ! -e "$1" ] && cat <<EOT && exit 2 1.7 -Usage: [FAT=<FAT12|FAT16|FAT32|EXFAT>] $0 device [boot name entry] [boot.bin] 1.8 +Usage: [FAT=<FAT12|FAT16|FAT32|EXFAT>] $0 device [file] 1.9 Example: $0 /dev/fd0 STARTUP.BIN 1.10 EOT 1.11 1.12 -while read chk ofs fat bin name; do 1.13 - [ $FAT -eq $fat ] || [ "$(dd if="$1" bs=1 count=8 skip=$chk)" = "$fat " ] || continue 1.14 - echo "Install $fat bootsector on $1." 1.15 - for arg in "skip=$(($ofs+8)) seek=$(($ofs+8))" "count=11" ; do 1.16 - if [ "$3" ]; then 1.17 - cat "$3" 1.18 - else 1.19 - sed '1,/^exit 1/d' $0 | tar xzOf - boot$bin.bin 1.20 - fi | dd of="$1" bs=1 conv=notrunc $arg 1.21 +ddo="dd of=$1 bs=1 conv=notrunc" 1.22 +while read c o b f; do 1.23 + [ "${FAT:-$(dd if="$1" bs=1 count=5 skip=$c)}" = "$f" ] || continue 1.24 + echo "Install $f bootsector on $1." 1.25 + for a in "$((o+b)) seek=$o count=$((512-o))" "$b count=11"; do 1.26 + sed '1,/^exit 1/d' $0 | unlzma | $ddo skip=$a 1.27 done 1.28 - [ "$2" ] && echo "Set bootfile '$2'" && echo -en "$name" | \ 1.29 - dd of="$1" bs=1 conv=notrunc seek=499 count=11 1.30 - case "$fat" in 1.31 - EXFAT) dd if="$1" bs=512 count=11 | od -v -An -t u1 -w1 - | awk ' 1.32 -BEGIN { chk=0; i=-1 } 1.33 -{ 1.34 - i++ 1.35 - if (i == 106 || i == 107 || i == 112) next 1.36 - chk = or(lshift(chk,31),rshift(chk,1)) + $1 1.37 -} 1.38 -END { a=chk%256; b=(chk/256)%256; c=(chk/256/256)%256; d=chk/256/256/256 1.39 - for (i=0;i<128;i++) printf "echo -en \"\\x%02X\\x%02X\\x%02X\\x%02X\"\n",a,b,c,d 1.40 -} ' | sh | dd bs=512 of="$1" seek=11 1.41 - esac 1.42 + [ "$2" ] && echo "Set boot file '$2'" && echo -n "$2" | case "$f" in 1.43 + E*) sed 's| |.|;s| ||g' | cat - /dev/zero;; 1.44 + *) tr a-z A-Z | sed 's|\.| |;s|^\(.\{8\}\) *|\1|;s|$| |' 1.45 + esac | $ddo seek=499 count=11 1.46 + [ "$f" = "EXFAT" ] && dd if="$1" bs=512 count=11 | od -v -An -t u1 -w1 - | LANG=C awk ' 1.47 +BEGIN { a=0;i=-1;m=0xFFFFFFFE } 1.48 +{ if (++i!=106 && i!=107 && i!=112) a=or(and(lshift(a,31),m),and(rshift(a,1),m/2))+$1 } 1.49 +END { b=a/256;c=b/256; for (i=0;i<128;i++) printf "%c%c%c%c",a%256,b%256,c%256,(c/256)%256 }' | $ddo seek=5632 1.50 exit 0 1.51 -done 2> /dev/null <<EOT 1.52 -54 54 FAT12 16 $(A="${2/./ }";echo "${A:0:8}${A##* } " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g') 1.53 -54 54 FAT16 16 $(A="${2/./ }";echo "${A:0:8}${A##* } " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g') 1.54 -82 82 FAT32 32 $(A="${2/./ }";echo "${A:0:8}${A##* } " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g') 1.55 -3 105 EXFAT ex $(echo "$2" | sed 's| |.|;s| ||g')\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0 1.56 +done 2>/dev/null <<EOT 1.57 +54 62 0 FAT12 1.58 +54 62 0 FAT16 1.59 +82 90 512 FAT32 1.60 +3 113 1024 EXFAT 1.61 EOT 1.62 exit 1