summaryrefslogtreecommitdiffstats
path: root/fastboot
diff options
context:
space:
mode:
authorBrian Swetland <swetland@google.com>2009-04-28 16:05:07 -0700
committerBrian Swetland <swetland@google.com>2009-04-28 16:05:07 -0700
commit2a63bb7abf1b27a7a2e8fd5951d77f71a2f290d4 (patch)
tree5e3e2fbff2f0ce4a96bd109f6c3dcaf54a3b80c5 /fastboot
parent6181f70bd40fd020661841923e725df75a3a2793 (diff)
downloadsystem_core-2a63bb7abf1b27a7a2e8fd5951d77f71a2f290d4.zip
system_core-2a63bb7abf1b27a7a2e8fd5951d77f71a2f290d4.tar.gz
system_core-2a63bb7abf1b27a7a2e8fd5951d77f71a2f290d4.tar.bz2
fastboot, mkbootimg: support alternate base addresses
Add the --base flag to mkbootimg and -b flag to fastboot, to allow the default kernel base address (0x10000000) to be changed. Signed-off-by: Brian Swetland <swetland@google.com>
Diffstat (limited to 'fastboot')
-rw-r--r--fastboot/bootimg.c17
-rw-r--r--fastboot/fastboot.c16
2 files changed, 23 insertions, 10 deletions
diff --git a/fastboot/bootimg.c b/fastboot/bootimg.c
index 1d77b3c..e5aea4e 100644
--- a/fastboot/bootimg.c
+++ b/fastboot/bootimg.c
@@ -40,7 +40,7 @@ void bootimg_set_cmdline(boot_img_hdr *h, const char *cmdline)
boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
void *ramdisk, unsigned ramdisk_size,
void *second, unsigned second_size,
- unsigned page_size,
+ unsigned page_size, unsigned base,
unsigned *bootimg_size)
{
unsigned kernel_actual;
@@ -65,15 +65,14 @@ boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
memcpy(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE);
- hdr->kernel_size = kernel_size;
- hdr->kernel_addr = 0x10008000;
+ hdr->kernel_size = kernel_size;
hdr->ramdisk_size = ramdisk_size;
- hdr->ramdisk_addr = 0x11000000;
- hdr->second_size = second_size;
- hdr->second_addr = 0x10F00000;
-
- hdr->tags_addr = 0x10000100;
- hdr->page_size = page_size;
+ hdr->second_size = second_size;
+ hdr->kernel_addr = base + 0x00008000;
+ hdr->ramdisk_addr = base + 0x01000000;
+ hdr->second_addr = base + 0x00F00000;
+ hdr->tags_addr = base + 0x00000100;
+ hdr->page_size = page_size;
memcpy(hdr->magic + page_size,
kernel, kernel_size);
diff --git a/fastboot/fastboot.c b/fastboot/fastboot.c
index 498b4a6..95e20b5 100644
--- a/fastboot/fastboot.c
+++ b/fastboot/fastboot.c
@@ -42,6 +42,14 @@
#include "fastboot.h"
+void bootimg_set_cmdline(boot_img_hdr *h, const char *cmdline);
+
+boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size,
+ void *ramdisk, unsigned ramdisk_size,
+ void *second, unsigned second_size,
+ unsigned page_size, unsigned base,
+ unsigned *bootimg_size);
+
static usb_handle *usb = 0;
static const char *serial = 0;
static const char *product = 0;
@@ -49,6 +57,8 @@ static const char *cmdline = 0;
static int wipe_data = 0;
static unsigned short vendor_id = 0;
+static unsigned base_addr = 0x10000000;
+
void die(const char *fmt, ...)
{
va_list ap;
@@ -257,7 +267,7 @@ void *load_bootable_image(const char *kernel, const char *ramdisk,
}
fprintf(stderr,"creating boot image...\n");
- bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, 2048, &bsize);
+ bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, 2048, base_addr, &bsize);
if(bdata == 0) {
fprintf(stderr,"failed to create boot.img\n");
return 0;
@@ -545,6 +555,10 @@ int main(int argc, char **argv)
if(!strcmp(*argv, "-w")) {
wants_wipe = 1;
skip(1);
+ } else if(!strcmp(*argv, "-b")) {
+ require(2);
+ base_addr = strtoul(argv[1], 0, 16);
+ skip(2);
} else if(!strcmp(*argv, "-s")) {
require(2);
serial = argv[1];