diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 48ebec2279..bb5d3b4a8a 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -2546,10 +2546,21 @@ static bool dbg_boot_data(void) info.scroll_all = true; simplelist_info_init(&info, "Boot data", 1, NULL); simplelist_set_line_count(0); - simplelist_addline("Magic: %.8s", boot_data.magic); + crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); +#if defined(HAVE_MULTIBOOT) + int boot_volume = 0; + if(crc == boot_data.crc) + { + boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */ + } + simplelist_addline("Boot Volume: <%lu>", boot_volume); + simplelist_addline(""); +#endif + simplelist_addline("Bootdata RAW:"); + if (crc != boot_data.crc) + simplelist_addline("Magic: %.8s", boot_data.magic); simplelist_addline("Length: %lu", boot_data.length); simplelist_addline("CRC: %lx", boot_data.crc); - crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); (crc == boot_data.crc) ? simplelist_addline("CRC: OK!") : simplelist_addline("CRC: BAD"); for (unsigned i = 0; i < boot_data.length; i += 4) @@ -2561,7 +2572,8 @@ static bool dbg_boot_data(void) info.hide_selection = true; return simplelist_show_list(&info); } -#endif +#endif /* defined(HAVE_BOOTDATA) && !defined(SIMULATOR) */ + /****** The menu *********/ static const struct { unsigned char *desc; /* string or ID */ diff --git a/firmware/common/disk.c b/firmware/common/disk.c index f32125e8a3..80142f6d94 100644 --- a/firmware/common/disk.c +++ b/firmware/common/disk.c @@ -30,6 +30,11 @@ #include "dircache_redirect.h" #include "disk.h" +#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) +#include "bootdata.h" +#include "crc32.h" +#endif + #ifndef CONFIG_DEFAULT_PARTNUM #define CONFIG_DEFAULT_PARTNUM 0 #endif @@ -258,7 +263,23 @@ int disk_mount_all(void) for (int i = 0; i < NUM_VOLUMES; i++) vol_drive[i] = -1; /* mark all as unassigned */ +#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) + unsigned int crc = 0; + int boot_volume = 0; + crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); + if(crc == boot_data.crc) + { + boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */ + } + #ifdef HAVE_HOTSWAP + if (storage_present(boot_volume)) + #endif + mounted += disk_mount(boot_volume); /* mount boot volume first */ for (int i = 0; i < NUM_DRIVES; i++) + if (i != boot_volume) +#else + for (int i = 0; i < NUM_DRIVES; i++) +#endif { #ifdef HAVE_HOTSWAP if (storage_present(i))