Firmware "hacker" code for the e200r install so the full bootloader rom doesnt need to be written.
Requires a custom version of e200tool which isnt available yet. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14654 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
c9f6858de8
commit
9db22efd1f
7 changed files with 142 additions and 3 deletions
|
@ -18,7 +18,7 @@ ifdef DEBUG
|
|||
CFLAGS += -g
|
||||
endif
|
||||
|
||||
SRC := $(shell cat SOURCES | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P -include "config.h" - )
|
||||
SRC := $(shell cat SOURCES | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) $(EXTRA_DEFINES) -E -P -include "config.h" - )
|
||||
DIRS = .
|
||||
|
||||
ifdef APPEXTRA
|
||||
|
@ -50,7 +50,7 @@ endif
|
|||
dep: $(DEPFILE)
|
||||
|
||||
$(LINKFILE): $(LDS)
|
||||
$(call PRINTS,Build $(@F))cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@
|
||||
$(call PRINTS,Build $(@F))cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) $(DEFINES) -E -P $(ROMBUILD) - >$@
|
||||
|
||||
$(MAXOUTFILE):
|
||||
$(SILENT)echo '#include "config.h"' > $(MAXINFILE)
|
||||
|
|
|
@ -6,7 +6,11 @@ ipod.c
|
|||
gigabeat.c
|
||||
#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) || \
|
||||
defined(SANSA_E200) || defined(SANSA_C200)
|
||||
#ifdef E200R_INSTALLER
|
||||
main-e200r-installer.c
|
||||
#else
|
||||
main-pp.c
|
||||
#endif
|
||||
#elif defined(ELIO_TPJ1022)
|
||||
tpj1022.c
|
||||
#elif defined(IAUDIO_X5) || defined(IAUDIO_M5)
|
||||
|
|
119
bootloader/main-e200r-installer.c
Normal file
119
bootloader/main-e200r-installer.c
Normal file
|
@ -0,0 +1,119 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 by Barry Wardell
|
||||
*
|
||||
* Based on Rockbox iriver bootloader by Linus Nielsen Feltzing
|
||||
* and the ipodlinux bootloader by Daniel Palffy and Bernard Leach
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "common.h"
|
||||
#include "cpu.h"
|
||||
#include "file.h"
|
||||
#include "system.h"
|
||||
#include "kernel.h"
|
||||
#include "lcd.h"
|
||||
#include "font.h"
|
||||
#include "ata.h"
|
||||
#include "button.h"
|
||||
#include "disk.h"
|
||||
#include "crc32-mi4.h"
|
||||
#include <string.h>
|
||||
#include "i2c.h"
|
||||
#include "backlight-target.h"
|
||||
|
||||
/* Bootloader version */
|
||||
char version[] = APPSVERSION;
|
||||
|
||||
#define START_SECTOR_OF_ROM 1
|
||||
#define ROMSECTOR_TO_HACK 63
|
||||
#define HACK_OFFSET 498
|
||||
#define KNOWN_CRC32 0x5a09c266
|
||||
char knownBytes[] = {0x00, 0x24, 0x07, 0xe1};
|
||||
char changedBytes[] = {0xc0, 0x46, 0xc0, 0x46 };
|
||||
void* main(void)
|
||||
{
|
||||
int i;
|
||||
int btn;
|
||||
int num_partitions;
|
||||
int crc32;
|
||||
char sector[512];
|
||||
struct partinfo* pinfo;
|
||||
chksum_crc32gentab ();
|
||||
|
||||
system_init();
|
||||
kernel_init();
|
||||
lcd_init();
|
||||
font_init();
|
||||
button_init();
|
||||
i2c_init();
|
||||
__backlight_on();
|
||||
|
||||
lcd_set_foreground(LCD_WHITE);
|
||||
lcd_set_background(LCD_BLACK);
|
||||
lcd_clear_display();
|
||||
|
||||
btn = button_read_device();
|
||||
verbose = true;
|
||||
|
||||
lcd_setfont(FONT_SYSFIXED);
|
||||
|
||||
printf("Rockbox e200R installer");
|
||||
printf("Version: %s", version);
|
||||
printf(MODEL_NAME);
|
||||
|
||||
i=ata_init();
|
||||
disk_init(IF_MV(0));
|
||||
num_partitions = disk_mount_all();
|
||||
if (num_partitions<=0)
|
||||
{
|
||||
error(EDISK,num_partitions);
|
||||
}
|
||||
pinfo = disk_partinfo(1);
|
||||
printf("--- Partition info ---");
|
||||
printf("start: %x", pinfo->start);
|
||||
printf("size: %x", pinfo->size);
|
||||
printf("type: %x", pinfo->type);
|
||||
printf("reading: %x", (START_SECTOR_OF_ROM + ROMSECTOR_TO_HACK)*512);
|
||||
ata_read_sectors(IF_MV2(0,)
|
||||
pinfo->start + START_SECTOR_OF_ROM + ROMSECTOR_TO_HACK,
|
||||
1 , sector);
|
||||
crc32 = chksum_crc32 (sector, 512);
|
||||
printf("--- Hack Status ---");
|
||||
printf("Sector checksum: %x", crc32);
|
||||
|
||||
if ((crc32 == KNOWN_CRC32) &&
|
||||
!memcmp(§or[HACK_OFFSET], knownBytes,
|
||||
sizeof(knownBytes)/sizeof(*knownBytes)))
|
||||
{
|
||||
|
||||
memcpy(§or[HACK_OFFSET], changedBytes,
|
||||
sizeof(changedBytes)/sizeof(*changedBytes));
|
||||
ata_write_sectors(IF_MV2(0,)
|
||||
pinfo->start + START_SECTOR_OF_ROM + ROMSECTOR_TO_HACK,
|
||||
1 , sector);
|
||||
printf("Firmware Hacked");
|
||||
printf("Proceed to Step 2");
|
||||
}
|
||||
else
|
||||
printf("Unknown bootloader... aborted");
|
||||
GPIOG_OUTPUT_VAL &=~0x80;
|
||||
|
||||
while(1);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -45,7 +45,9 @@ INPUT(target/sh/crt0.o)
|
|||
#define FLASHSIZE 2M
|
||||
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
||||
#define DRAMORIG 0x10000000
|
||||
#ifndef IRAMORIG
|
||||
#define IRAMORIG 0x40000000
|
||||
#endif
|
||||
#define IRAMSIZE 0x20000
|
||||
#define FLASHORIG 0x001f0000
|
||||
#define FLASHSIZE 2M
|
||||
|
|
|
@ -187,4 +187,7 @@
|
|||
#define DEFAULT_REC_LEFT_GAIN 23
|
||||
#define DEFAULT_REC_RIGHT_GAIN 23
|
||||
|
||||
#ifdef E200R_INSTALLER
|
||||
#define IRAMORIG 0x40004000
|
||||
#endif
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ start:
|
|||
#endif
|
||||
|
||||
msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ */
|
||||
|
||||
#ifndef E200R_INSTALLER
|
||||
/* 1 - Copy the bootloader to IRAM */
|
||||
/* get the high part of our execute address */
|
||||
ldr r7, =0xffffff00
|
||||
|
@ -79,6 +79,7 @@ pad_skip:
|
|||
|
||||
/* 2 - Jump both CPU and COP there */
|
||||
ldr pc, =start_loc /* jump to the relocated start_loc: */
|
||||
#endif /* E200R_INSTALLER */
|
||||
|
||||
start_loc:
|
||||
|
||||
|
|
10
tools/configure
vendored
10
tools/configure
vendored
|
@ -1424,6 +1424,9 @@ fi
|
|||
ifp7xx)
|
||||
gdbstub="(G)DB stub, "
|
||||
;;
|
||||
e200r|e200)
|
||||
gdbstub="(I)installer, "
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
@ -1434,6 +1437,13 @@ fi
|
|||
option=`input`;
|
||||
|
||||
case $option in
|
||||
[Ii])
|
||||
appsdir='\$(ROOTDIR)/bootloader'
|
||||
apps="bootloader"
|
||||
extradefines="-DBOOTLOADER -DE200R_INSTALLER -ffunction-sections -fdata-sections"
|
||||
bootloader="1"
|
||||
echo "e200R-installer build selected"
|
||||
;;
|
||||
[Bb])
|
||||
if test $t_manufacturer = "archos"; then
|
||||
# Archos SH-based players do this somewhat differently for
|
||||
|
|
Loading…
Reference in a new issue