diff --git a/bootloader/x1000.c b/bootloader/x1000.c index bce7b69784..14634683e6 100644 --- a/bootloader/x1000.c +++ b/bootloader/x1000.c @@ -137,11 +137,6 @@ const struct menuitem recovery_items[] = { {MENUITEM_ACTION, "Restore", &bootloader_restore}, }; -/* Temp buffer to contain the binary in memory */ -extern unsigned char loadbuffer[]; -extern unsigned char loadbufferend[]; -#define MAX_LOAD_SIZE (loadbufferend - loadbuffer) - /* Flags to indicate if hardware was already initialized */ bool lcd_inited = false; bool usb_inited = false; @@ -340,8 +335,17 @@ void boot_rockbox(void) if(init_disk() != 0) return; - int rc = load_firmware(loadbuffer, BOOTFILE, MAX_LOAD_SIZE); + size_t max_size = 0; + int handle = core_alloc_maximum("rockbox", &max_size, &buflib_ops_locked); + if(handle < 0) { + splash(5*HZ, "Out of memory"); + return; + } + + unsigned char* loadbuffer = core_get_data(handle); + int rc = load_firmware(loadbuffer, BOOTFILE, max_size); if(rc <= 0) { + core_free(handle); splash2(5*HZ, "Error loading Rockbox", loader_strerror(rc)); return; } diff --git a/firmware/target/mips/ingenic_x1000/app.lds b/firmware/target/mips/ingenic_x1000/app.lds index 26b2854728..9b36071c3c 100644 --- a/firmware/target/mips/ingenic_x1000/app.lds +++ b/firmware/target/mips/ingenic_x1000/app.lds @@ -88,10 +88,8 @@ SECTIONS { . = ALIGN(4); audiobuffer = .; - loadbuffer = .; } > DRAM - loadbufferend = ENDAUDIOADDR; audiobufend = ENDAUDIOADDR; codecbuf = ENDAUDIOADDR; pluginbuf = ENDCODECADDR;