diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-02 15:21:34 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-02 15:21:34 +0200 |
| commit | c7d92071e1dd11c45999457b16554b4abaa73b28 (patch) | |
| tree | aff7c7f19adcffe1dd91e1c2514af02c77fd524e /scripts/mkdisk.sh | |
| parent | v0.5.5: fix real-hardware boot crash — shadow back in heap as first allocation (diff) | |
| download | rs-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-x | scripts/mkdisk.sh | 10 |
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" | |||
| 23 | SIZE="64M" | 24 | SIZE="64M" |
| 24 | FRESH=0 | 25 | FRESH=0 |
| 25 | SEED_DIR="$PROJECT_DIR/seed" | 26 | SEED_DIR="$PROJECT_DIR/seed" |
| 27 | LABEL="RSDOS" | ||
| 26 | 28 | ||
| 27 | while [ $# -gt 0 ]; do | 29 | while [ $# -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 |
| 66 | fi | 72 | fi |
| 67 | 73 | ||
| 68 | echo "mkdisk: creating $IMG ($SIZE FAT32, label RSDOS)" | 74 | echo "mkdisk: creating $IMG ($SIZE FAT32, label $LABEL)" |
| 69 | rm -f "$IMG" | 75 | rm -f "$IMG" |
| 70 | mkfs.fat -C -F 32 -n RSDOS "$IMG" "$SIZE_BLOCKS" | 76 | mkfs.fat -C -F 32 -n "$LABEL" "$IMG" "$SIZE_BLOCKS" |
| 71 | 77 | ||
| 72 | if [ -n "$SEED_DIR" ] && [ -d "$SEED_DIR" ]; then | 78 | if [ -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 |
