Skip to content

Commit a8021b5

Browse files
Copilotsofthack007
andcommitted
Improve bootloader and partitions file detection in prepare-firmware.sh
Enhanced file discovery to handle various PlatformIO/ESP-IDF directory structures: **Problem:** The script may fail to find bootloader.bin and partitions.bin if they're in unexpected locations within the build directory. **Improvements:** 1. **Enhanced file search function:** - Checks multiple possible locations for each file - Shows exactly which paths are being checked - Reports which location succeeded - Falls back to recursive search if standard locations fail 2. **Extended search paths:** - bootloader.bin: 3 locations checked - BUILD_DIR/bootloader.bin (ESP-IDF v3.x) - BUILD_DIR/bootloader/bootloader.bin (ESP-IDF v4.x) - BUILD_DIR/esp-idf/bootloader/bootloader.bin (some configs) - partitions.bin: 2 locations checked - BUILD_DIR/partitions.bin (standard) - BUILD_DIR/partitions/partitions.bin (alternative) 3. **Better debugging output:** - Shows search progress for each file - If file not found in expected locations, performs recursive search - Displays first 50 lines of build directory structure - Clear indication of which files are found vs missing 4. **Improved error messages:** - Lists all checked locations before failing - Shows actual filesystem structure to aid diagnosis - Provides actionable troubleshooting steps - Helps identify if files are in unexpected locations This ensures the script works across different PlatformIO and ESP-IDF versions, and provides clear diagnostic information when files can't be found. Co-authored-by: softhack007 <91616163+softhack007@users.noreply.github.com>
1 parent c2c4afc commit a8021b5

1 file changed

Lines changed: 88 additions & 32 deletions

File tree

test/wokwi/prepare-firmware.sh

Lines changed: 88 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,53 +20,109 @@ BUILD_DIR="$PROJECT_ROOT/.pio/build/$ENV_NAME"
2020
FIRMWARE_BIN="$BUILD_DIR/firmware.bin"
2121
FIRMWARE_ELF="$BUILD_DIR/firmware.elf"
2222

23-
# PlatformIO stores bootloader and partitions in the build directory
24-
# but they might be in subdirectories depending on the platform version
25-
BOOTLOADER_BIN="$BUILD_DIR/bootloader.bin"
26-
PARTITIONS_BIN="$BUILD_DIR/partitions.bin"
27-
28-
# Alternative locations for bootloader (ESP-IDF v4+ might use different paths)
29-
if [ ! -f "$BOOTLOADER_BIN" ]; then
30-
ALT_BOOTLOADER="$BUILD_DIR/bootloader/bootloader.bin"
31-
if [ -f "$ALT_BOOTLOADER" ]; then
32-
BOOTLOADER_BIN="$ALT_BOOTLOADER"
33-
fi
23+
echo "=== Preparing firmware for Wokwi simulation ==="
24+
echo "Environment: $ENV_NAME"
25+
echo "Build directory: $BUILD_DIR"
26+
echo ""
27+
28+
# Check if build directory exists
29+
if [ ! -d "$BUILD_DIR" ]; then
30+
echo "❌ ERROR: Build directory not found: $BUILD_DIR"
31+
echo "Please build the firmware first: pio run -e $ENV_NAME"
32+
exit 1
3433
fi
3534

36-
# Check if required files exist
37-
MISSING_FILES=""
35+
echo "Searching for required files in build directory..."
36+
echo ""
3837

39-
if [ ! -f "$FIRMWARE_BIN" ]; then
40-
echo "❌ ERROR: Firmware binary not found at $FIRMWARE_BIN"
41-
MISSING_FILES="${MISSING_FILES}firmware.bin "
42-
fi
38+
# Function to find file with multiple possible locations
39+
find_file() {
40+
local file_desc=$1
41+
shift
42+
local found_file=""
43+
44+
echo "Looking for $file_desc:"
45+
for path in "$@"; do
46+
echo " Checking: $path"
47+
if [ -f "$path" ]; then
48+
found_file="$path"
49+
echo " ✓ Found at: $path"
50+
echo "$found_file"
51+
return 0
52+
fi
53+
done
54+
55+
echo " ❌ Not found in any expected location"
56+
return 1
57+
}
4358

44-
if [ ! -f "$BOOTLOADER_BIN" ]; then
45-
echo "❌ ERROR: bootloader.bin not found!"
46-
echo " Checked: $BUILD_DIR/bootloader.bin"
47-
echo " Also checked: $BUILD_DIR/bootloader/bootloader.bin"
48-
MISSING_FILES="${MISSING_FILES}bootloader.bin "
49-
fi
59+
# Find firmware.bin
60+
FIRMWARE_BIN=$(find_file "firmware.bin" \
61+
"$BUILD_DIR/firmware.bin") || {
62+
echo ""
63+
echo "❌ ERROR: firmware.bin not found"
64+
FIRMWARE_BIN=""
65+
}
66+
echo ""
5067

51-
if [ ! -f "$PARTITIONS_BIN" ]; then
52-
echo "❌ ERROR: partitions.bin not found at $PARTITIONS_BIN"
53-
MISSING_FILES="${MISSING_FILES}partitions.bin "
54-
fi
68+
# Find bootloader.bin - check multiple common locations
69+
BOOTLOADER_BIN=$(find_file "bootloader.bin" \
70+
"$BUILD_DIR/bootloader.bin" \
71+
"$BUILD_DIR/bootloader/bootloader.bin" \
72+
"$BUILD_DIR/esp-idf/bootloader/bootloader.bin") || {
73+
echo ""
74+
echo "❌ ERROR: bootloader.bin not found"
75+
echo "Searching entire build directory for bootloader.bin:"
76+
find "$BUILD_DIR" -name "bootloader.bin" -type f 2>/dev/null | while read f; do
77+
echo " Found: $f"
78+
done
79+
BOOTLOADER_BIN=""
80+
}
81+
echo ""
5582

56-
if [ -n "$MISSING_FILES" ]; then
83+
# Find partitions.bin - check multiple common locations
84+
PARTITIONS_BIN=$(find_file "partitions.bin" \
85+
"$BUILD_DIR/partitions.bin" \
86+
"$BUILD_DIR/partitions/partitions.bin") || {
5787
echo ""
88+
echo "❌ ERROR: partitions.bin not found"
89+
echo "Searching entire build directory for partitions.bin:"
90+
find "$BUILD_DIR" -name "partitions.bin" -type f 2>/dev/null | while read f; do
91+
echo " Found: $f"
92+
done
93+
PARTITIONS_BIN=""
94+
}
95+
echo ""
96+
97+
# Check if any files are missing
98+
MISSING_FILES=""
99+
[ -z "$FIRMWARE_BIN" ] && MISSING_FILES="${MISSING_FILES}firmware.bin "
100+
[ -z "$BOOTLOADER_BIN" ] && MISSING_FILES="${MISSING_FILES}bootloader.bin "
101+
[ -z "$PARTITIONS_BIN" ] && MISSING_FILES="${MISSING_FILES}partitions.bin "
102+
103+
if [ -n "$MISSING_FILES" ]; then
58104
echo "❌ ERROR: Missing required files: $MISSING_FILES"
59105
echo ""
60-
echo "Build directory contents:"
61-
ls -la "$BUILD_DIR" | head -20
106+
echo "Build directory structure:"
107+
echo "----------------------------------------"
108+
ls -lR "$BUILD_DIR" | head -50
109+
echo "----------------------------------------"
62110
echo ""
63111
echo "These files are generated by PlatformIO/ESP-IDF during the build process."
64-
echo "To fix this issue:"
112+
echo ""
113+
echo "Troubleshooting steps:"
65114
echo "1. Ensure the build completed successfully: pio run -e $ENV_NAME"
66-
echo "2. Verify the partition table is correctly specified in platformio.ini"
115+
echo "2. Check for build errors in PlatformIO output"
116+
echo "3. Verify partition table is specified in platformio.ini"
117+
echo "4. For ESP-IDF framework, bootloader should be auto-generated"
118+
echo ""
119+
echo "If files are in unexpected locations, the script will show them above."
67120
exit 1
68121
fi
69122

123+
echo "✅ All required files found!"
124+
echo ""
125+
70126
echo "Creating combined firmware image for Wokwi..."
71127
echo "Using files from $ENV_NAME build:"
72128
echo " - Bootloader: $(basename $(dirname "$BOOTLOADER_BIN"))/$(basename "$BOOTLOADER_BIN")"

0 commit comments

Comments
 (0)