diff options
author | William Wilgus <me.theuser@yahoo.com> | 2017-05-17 01:12:25 +0200 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2019-11-15 11:26:56 +0100 |
commit | 62e5a3076ca540b2ab54d2e12f8ada42ffe42148 (patch) | |
tree | c77d1256d0d5cf6179a8adf2a9fc745a395dcbfd | |
parent | 3083abeb95e95dd1d12e78f1973546d93c3e12ab (diff) | |
download | rockbox-62e5a3076ca540b2ab54d2e12f8ada42ffe42148.tar.gz rockbox-62e5a3076ca540b2ab54d2e12f8ada42ffe42148.zip |
MultiBoot_Firmware
Stop gap till I get a chance to work on the root folder stuff
Makes whatever volume marked by bootdata.boot_volume
the base or root volume, mounts all other volumes after
the specified boot volume.
Has the effect of swapping the SD card to the slot for internal
and Internal storage is mounted as the Sd-card.
Does not honor root redirect -- uses .rockbox folder in the root of boot volume
Change-Id: I0f786aa0c8721e21cba607366775be3e3c0cf474
-rw-r--r-- | apps/debug_menu.c | 18 | ||||
-rw-r--r-- | firmware/common/disk.c | 21 |
2 files changed, 36 insertions, 3 deletions
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) | |||
2546 | info.scroll_all = true; | 2546 | info.scroll_all = true; |
2547 | simplelist_info_init(&info, "Boot data", 1, NULL); | 2547 | simplelist_info_init(&info, "Boot data", 1, NULL); |
2548 | simplelist_set_line_count(0); | 2548 | simplelist_set_line_count(0); |
2549 | simplelist_addline("Magic: %.8s", boot_data.magic); | 2549 | crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); |
2550 | #if defined(HAVE_MULTIBOOT) | ||
2551 | int boot_volume = 0; | ||
2552 | if(crc == boot_data.crc) | ||
2553 | { | ||
2554 | boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */ | ||
2555 | } | ||
2556 | simplelist_addline("Boot Volume: <%lu>", boot_volume); | ||
2557 | simplelist_addline(""); | ||
2558 | #endif | ||
2559 | simplelist_addline("Bootdata RAW:"); | ||
2560 | if (crc != boot_data.crc) | ||
2561 | simplelist_addline("Magic: %.8s", boot_data.magic); | ||
2550 | simplelist_addline("Length: %lu", boot_data.length); | 2562 | simplelist_addline("Length: %lu", boot_data.length); |
2551 | simplelist_addline("CRC: %lx", boot_data.crc); | 2563 | simplelist_addline("CRC: %lx", boot_data.crc); |
2552 | crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); | ||
2553 | (crc == boot_data.crc) ? simplelist_addline("CRC: OK!") : | 2564 | (crc == boot_data.crc) ? simplelist_addline("CRC: OK!") : |
2554 | simplelist_addline("CRC: BAD"); | 2565 | simplelist_addline("CRC: BAD"); |
2555 | for (unsigned i = 0; i < boot_data.length; i += 4) | 2566 | for (unsigned i = 0; i < boot_data.length; i += 4) |
@@ -2561,7 +2572,8 @@ static bool dbg_boot_data(void) | |||
2561 | info.hide_selection = true; | 2572 | info.hide_selection = true; |
2562 | return simplelist_show_list(&info); | 2573 | return simplelist_show_list(&info); |
2563 | } | 2574 | } |
2564 | #endif | 2575 | #endif /* defined(HAVE_BOOTDATA) && !defined(SIMULATOR) */ |
2576 | |||
2565 | /****** The menu *********/ | 2577 | /****** The menu *********/ |
2566 | static const struct { | 2578 | static const struct { |
2567 | unsigned char *desc; /* string or ID */ | 2579 | 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 @@ | |||
30 | #include "dircache_redirect.h" | 30 | #include "dircache_redirect.h" |
31 | #include "disk.h" | 31 | #include "disk.h" |
32 | 32 | ||
33 | #if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) | ||
34 | #include "bootdata.h" | ||
35 | #include "crc32.h" | ||
36 | #endif | ||
37 | |||
33 | #ifndef CONFIG_DEFAULT_PARTNUM | 38 | #ifndef CONFIG_DEFAULT_PARTNUM |
34 | #define CONFIG_DEFAULT_PARTNUM 0 | 39 | #define CONFIG_DEFAULT_PARTNUM 0 |
35 | #endif | 40 | #endif |
@@ -258,7 +263,23 @@ int disk_mount_all(void) | |||
258 | for (int i = 0; i < NUM_VOLUMES; i++) | 263 | for (int i = 0; i < NUM_VOLUMES; i++) |
259 | vol_drive[i] = -1; /* mark all as unassigned */ | 264 | vol_drive[i] = -1; /* mark all as unassigned */ |
260 | 265 | ||
266 | #if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) | ||
267 | unsigned int crc = 0; | ||
268 | int boot_volume = 0; | ||
269 | crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); | ||
270 | if(crc == boot_data.crc) | ||
271 | { | ||
272 | boot_volume = boot_data.boot_volume; /* boot volume contained in uint8_t payload */ | ||
273 | } | ||
274 | #ifdef HAVE_HOTSWAP | ||
275 | if (storage_present(boot_volume)) | ||
276 | #endif | ||
277 | mounted += disk_mount(boot_volume); /* mount boot volume first */ | ||
261 | for (int i = 0; i < NUM_DRIVES; i++) | 278 | for (int i = 0; i < NUM_DRIVES; i++) |
279 | if (i != boot_volume) | ||
280 | #else | ||
281 | for (int i = 0; i < NUM_DRIVES; i++) | ||
282 | #endif | ||
262 | { | 283 | { |
263 | #ifdef HAVE_HOTSWAP | 284 | #ifdef HAVE_HOTSWAP |
264 | if (storage_present(i)) | 285 | if (storage_present(i)) |