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
This commit is contained in:
William Wilgus 2017-05-17 01:12:25 +02:00
parent 3083abeb95
commit 62e5a3076c
2 changed files with 36 additions and 3 deletions

View file

@ -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 */

View file

@ -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))