summaryrefslogtreecommitdiffstats
path: root/scripts/mkdisk.sh
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-08-02 15:21:34 +0200
committersalmonik <salmonik@tuta.io>2026-08-02 15:21:34 +0200
commitc7d92071e1dd11c45999457b16554b4abaa73b28 (patch)
treeaff7c7f19adcffe1dd91e1c2514af02c77fd524e /scripts/mkdisk.sh
parentv0.5.5: fix real-hardware boot crash — shadow back in heap as first allocation (diff)
downloadrs-dos-c7d92071e1dd11c45999457b16554b4abaa73b28.tar.gz
rs-dos-c7d92071e1dd11c45999457b16554b4abaa73b28.zip
v0.5.5: crash reports go to a dedicated CRASHLOG USB stick
The fault handler now writes crash.log to the volume labeled CRASHLOG (label-selected via fat::crash_vol), falling back to slot 0. On real hardware the boot USB may be unwritable, so a second stick labeled CRASHLOG survives the write; the shell auto-prints the previous crash report from it at next boot (read_crash_log resolves /disk/<uid>/crash.log through the FAT path, since Disk nodes hold no cached children). - fat.rs: volume_label() + crash_vol() (no allocation) - fs.rs: write_crash_log targets crash_vol(); read_crash_log prefers the CRASHLOG disk node; drop now-unused first_disk() - mkdisk.sh: --label option - test-fault.sh: boots with a dedicated CRASHLOG stick (mkfs -F 32 -n CRASHLOG), verifies crash.log lands there and NOT on the ESP
Diffstat (limited to 'scripts/mkdisk.sh')
-rwxr-xr-xscripts/mkdisk.sh10
1 files changed, 8 insertions, 2 deletions
diff --git a/scripts/mkdisk.sh b/scripts/mkdisk.sh
index 6bdd50c..2c62f76 100755
--- a/scripts/mkdisk.sh
+++ b/scripts/mkdisk.sh
@@ -9,6 +9,7 @@
9# ./scripts/mkdisk.sh --size 128M # different size (default 64M) 9# ./scripts/mkdisk.sh --size 128M # different size (default 64M)
10# ./scripts/mkdisk.sh /path/img # custom image path 10# ./scripts/mkdisk.sh /path/img # custom image path
11# ./scripts/mkdisk.sh --no-seed # skip the seed/ directory 11# ./scripts/mkdisk.sh --no-seed # skip the seed/ directory
12# ./scripts/mkdisk.sh --label CRASHLOG # volume label (default RSDOS)
12# 13#
13# The image is created with `mkfs.fat -C`, which is the option that 14# The image is created with `mkfs.fat -C`, which is the option that
14# actually creates the file — plain `mkfs.fat` only writes into an 15# actually creates the file — plain `mkfs.fat` only writes into an
@@ -23,6 +24,7 @@ IMG="/tmp/disk.img"
23SIZE="64M" 24SIZE="64M"
24FRESH=0 25FRESH=0
25SEED_DIR="$PROJECT_DIR/seed" 26SEED_DIR="$PROJECT_DIR/seed"
27LABEL="RSDOS"
26 28
27while [ $# -gt 0 ]; do 29while [ $# -gt 0 ]; do
28 case "$1" in 30 case "$1" in
@@ -32,6 +34,10 @@ while [ $# -gt 0 ]; do
32 SIZE="$1" 34 SIZE="$1"
33 ;; 35 ;;
34 --no-seed) SEED_DIR="" ;; 36 --no-seed) SEED_DIR="" ;;
37 --label)
38 shift
39 LABEL="$1"
40 ;;
35 --help | -h) 41 --help | -h)
36 head -20 "$0" | grep "^#" | sed 's/^# \?//' 42 head -20 "$0" | grep "^#" | sed 's/^# \?//'
37 exit 0 43 exit 0
@@ -65,9 +71,9 @@ if [ -z "$SIZE_BLOCKS" ] || [ "$SIZE_BLOCKS" -le 0 ] 2>/dev/null; then
65 exit 1 71 exit 1
66fi 72fi
67 73
68echo "mkdisk: creating $IMG ($SIZE FAT32, label RSDOS)" 74echo "mkdisk: creating $IMG ($SIZE FAT32, label $LABEL)"
69rm -f "$IMG" 75rm -f "$IMG"
70mkfs.fat -C -F 32 -n RSDOS "$IMG" "$SIZE_BLOCKS" 76mkfs.fat -C -F 32 -n "$LABEL" "$IMG" "$SIZE_BLOCKS"
71 77
72if [ -n "$SEED_DIR" ] && [ -d "$SEED_DIR" ]; then 78if [ -n "$SEED_DIR" ] && [ -d "$SEED_DIR" ]; then
73 if ! command -v mcopy >/dev/null 2>&1; then 79 if ! command -v mcopy >/dev/null 2>&1; then