Ok, new version of my patches. There're two patches in attachment. First fixes parser behavior to treat underscore as legal token char, second adds configurable kernel offset.
Regards Vasily
From 4bb2c1caa7e9d1605aeb1a3377bbb3753c3247ee Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick <anars...@gmail.com> Date: Thu, 17 Sep 2009 14:28:33 +0300 Subject: [PATCH 1/2] Treat underscore as legal token character Signed-off-by: Vasily Khoruzhick <anars...@gmail.com> --- src/script.cpp | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/script.cpp b/src/script.cpp index c22e27b..5c32011 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -146,7 +146,7 @@ get_token(const char **s, char *storage, int storesize, int for_expr) while (*e && (*e != quote)) e++; else if (for_expr) - while (*e && isalnum(*e)) + while (*e && (isalnum(*e) || (*e == '_'))) e++; else while (*e && !isspace(*e)) -- 1.6.5.rc1
From 5c431b6c1e748b5e8aa3cb184b56d8e88cd51b37 Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick <anars...@gmail.com> Date: Thu, 17 Sep 2009 14:28:56 +0300 Subject: [PATCH 2/2] Make kernel offset configurable Signed-off-by: Vasily Khoruzhick <anars...@gmail.com> --- src/linboot.cpp | 31 ++++++++++++++++++------------- 1 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/linboot.cpp b/src/linboot.cpp index d44ea11..3c00b81 100644 --- a/src/linboot.cpp +++ b/src/linboot.cpp @@ -36,6 +36,8 @@ static char *bootCmdline = "root=/dev/ram0 ro console=tty0"; static uint32 bootMachineType = 0; // Enable framebuffer writes during bootup. static uint32 FBDuringBoot = 1; +// Kernel text offset delta value +static uint32 kernelOffset = 0x0; REG_VAR_STR(0, "KERNEL", bootKernel, "Linux kernel file name") REG_VAR_STR(0, "INITRD", bootInitrd, "Initial Ram Disk file name") @@ -44,6 +46,7 @@ REG_VAR_INT(0, "MTYPE", bootMachineType , "ARM machine type (see linux/arch/arm/tools/mach-types)") REG_VAR_INT(0, "FBDURINGBOOT", FBDuringBoot , "Enable/disable writing status lines to screen during boot") +REG_VAR_INT(0, "KERNEL_OFFSET", kernelOffset, "Kernel text offset delta value") /* * Theory of operation: @@ -85,9 +88,9 @@ REG_VAR_INT(0, "FBDURINGBOOT", FBDuringBoot * Linux utility functions ****************************************************************/ -// Recommended tags placement = RAM start + 256 +// Recommended tags placement = RAM start + kernelOffset + 256 #define PHYSOFFSET_TAGS 0x100 -// Recommended kernel placement = RAM start + 32K +// Recommended kernel placement = RAM start + kernelOffset + 32K #define PHYSOFFSET_KERNEL 0x8000 // Initrd will be put at the address of kernel + 5MB #define PHYSOFFSET_INITRD (PHYSOFFSET_KERNEL + 0x500000) @@ -154,6 +157,7 @@ struct preloadData { uint32 startRam; char *tags; + uint32 kernelOffset; uint32 kernelSize; uint32 initrdSize; const char **indexPages[MAX_INDEX]; @@ -239,7 +243,7 @@ static inline int __preload fbOverlaps(struct preloadData *pd) { return IN_RANGE(pd->physFB, pd->startRam - , PHYSOFFSET_INITRD + pd->initrdSize); + , PHYSOFFSET_INITRD + pd->kernelOffset + pd->initrdSize); } // Code to launch kernel. @@ -261,20 +265,20 @@ preloader(struct preloadData *data) } // Copy tags to beginning of ram. - char *destTags = (char *)data->startRam + PHYSOFFSET_TAGS; + char *destTags = (char *)data->startRam + PHYSOFFSET_TAGS + data->kernelOffset; do_copy(destTags, data->tags, TAGSIZE); FB_PRINTF(&data->fbi, "Tags relocated\\n"); // Copy kernel image - char *destKernel = (char *)data->startRam + PHYSOFFSET_KERNEL; + char *destKernel = (char *)data->startRam + PHYSOFFSET_KERNEL + data->kernelOffset; int kernelCount = PAGE_ALIGN(data->kernelSize) / PAGE_SIZE; do_copyPages((char *)destKernel, data->indexPages, 0, kernelCount); FB_PRINTF(&data->fbi, "Kernel relocated\\n"); // Copy initrd (if applicable) - char *destInitrd = (char *)data->startRam + PHYSOFFSET_INITRD; + char *destInitrd = (char *)data->startRam + PHYSOFFSET_INITRD + data->kernelOffset; int initrdCount = PAGE_ALIGN(data->initrdSize) / PAGE_SIZE; do_copyPages(destInitrd, data->indexPages, kernelCount, initrdCount); @@ -427,13 +431,13 @@ prepForKernel(uint32 kernelSize, uint32 initrdSize) // See if this page will be overwritten in preloader. if (relPhys == 0) ovpg = pg_tag; - else if (relPhys >= PHYSOFFSET_KERNEL - && relPhys < PHYSOFFSET_KERNEL + kernelSize) - ovpg = &pgs_kernel[(relPhys - PHYSOFFSET_KERNEL) / PAGE_SIZE]; + else if (relPhys >= PHYSOFFSET_KERNEL + kernelOffset + && relPhys < PHYSOFFSET_KERNEL + kernelOffset + kernelSize) + ovpg = &pgs_kernel[(relPhys - PHYSOFFSET_KERNEL - kernelOffset) / PAGE_SIZE]; else if (initrdSize - && (relPhys >= PHYSOFFSET_INITRD - && relPhys < PHYSOFFSET_INITRD + initrdSize)) - ovpg = &pgs_initrd[(relPhys - PHYSOFFSET_INITRD) / PAGE_SIZE]; + && (relPhys >= PHYSOFFSET_INITRD + kernelOffset + && relPhys < PHYSOFFSET_INITRD + kernelOffset + initrdSize)) + ovpg = &pgs_initrd[(relPhys - PHYSOFFSET_INITRD - kernelOffset) / PAGE_SIZE]; else // This page wont be overwritten. continue; @@ -458,7 +462,7 @@ prepForKernel(uint32 kernelSize, uint32 initrdSize) // Setup linux tags. setup_linux_params(pg_tag->virtLoc, memPhysAddr + PHYSOFFSET_INITRD - , initrdSize); + + kernelOffset, initrdSize); Output("Built kernel tags area"); // Setup kernel/initrd indexes @@ -476,6 +480,7 @@ prepForKernel(uint32 kernelSize, uint32 initrdSize) struct preloadData *pd = (struct preloadData *)pg_data->virtLoc; pd->machtype = machType; pd->tags = (char *)pg_tag->physLoc; + pd->kernelOffset = kernelOffset; pd->kernelSize = kernelSize; pd->initrdSize = initrdSize; for (int i=0; i<indexCount; i++) -- 1.6.5.rc1
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Haret mailing list Haret@handhelds.org https://handhelds.org/mailman/listinfo/haret