Reserve 8MB space for kernel before RAM_loader

...so that kernel does not overwrite the loader.

Signed-off-by: Adrien Destugues <pulkomandy@pulkomandy.tk>

Fixes #11067.
This commit is contained in:
Arvind S Raj 2014-08-08 20:14:54 +05:30 committed by Adrien Destugues
parent 2ba49c8804
commit 82d287ddcb
5 changed files with 43 additions and 24 deletions

View File

@ -8,19 +8,19 @@ HAIKU_BOARD_DESCRIPTION = "BeagleBoard" ;
#
# load address for haiku_loader
HAIKU_BOARD_LOADER_BASE = 0x80008000 ;
HAIKU_BOARD_LOADER_BASE = 0x80800000 ;
# entry points (raw binary, and netbsd loader emulation)
HAIKU_BOARD_LOADER_ENTRY_RAW = 0x80008000 ;
HAIKU_BOARD_LOADER_ENTRY_NBSD = 0x80008008 ;
HAIKU_BOARD_LOADER_ENTRY_RAW = $(HAIKU_BOARD_LOADER_BASE) ;
HAIKU_BOARD_LOADER_ENTRY_NBSD = `printf \"obase=16;ibase=16;8 + %x\\n\" $(HAIKU_BOARD_LOADER_BASE)|bc` ;
HAIKU_BOARD_LOADER_ENTRY = $(HAIKU_BOARD_LOADER_ENTRY_NBSD) ;
HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
# load address for haiku_loader uimage
# (must be different than real load address)
HAIKU_BOARD_LOADER_UIBASE = 0x84000000 ;
HAIKU_BOARD_LOADER_UIBASE = 0x82800000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x84000000 ;
HAIKU_BOARD_LOADER_STACK_BASE = 0x81a00000 ;
#
# Flash image
@ -65,8 +65,14 @@ HAIKU_BOARD_SDIMAGE_FILES =
#
HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH)
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
-DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
-DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
HAIKU_CCFLAGS_$(HAIKU_PACKAGING_ARCH)
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
-DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
-DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;
HAIKU_C++FLAGS_$(HAIKU_PACKAGING_ARCH)
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard ;
+= -mcpu=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard
-DHAIKU_BOARD_LOADER_STACK_BASE=$(HAIKU_BOARD_LOADER_STACK_BASE)
-DHAIKU_BOARD_LOADER_UIBASE=$(HAIKU_BOARD_LOADER_UIBASE) ;

View File

@ -24,6 +24,8 @@
#define __PLATFORM_OMAP3_H
#define SDRAM_BASE 0x80000000
// Offset of stack top defined with respect to SDRAM_BASE
#define KSTACK_TOP 0x27fffff
#define VECT_BASE 0x00000000
#define VECT_SIZE 0x1000

View File

@ -58,6 +58,12 @@ TODO:
*/
// 8 MB for the kernel, kernel args, modules, driver settings, ...
static const size_t kMaxKernelSize = 0x800000;
// Base address for loader
static const size_t kLoaderBaseAddress = KERNEL_LOAD_BASE + kMaxKernelSize;
/*
*defines a block in memory
*/
@ -80,34 +86,40 @@ static struct memblock LOADER_MEMORYMAP[] = {
DEVICE_BASE + DEVICE_SIZE - 1,
ARM_MMU_L2_FLAG_B,
},
{
"RAM_kernel", // 8MB space for kernel, drivers etc
KERNEL_LOAD_BASE,
KERNEL_LOAD_BASE + kMaxKernelSize - 1,
ARM_MMU_L2_FLAG_C,
},
{
"RAM_loader", // 1MB loader
SDRAM_BASE + 0,
SDRAM_BASE + 0x0fffff,
kLoaderBaseAddress + 0,
kLoaderBaseAddress + 0x0fffff,
ARM_MMU_L2_FLAG_C,
},
{
"RAM_pt", // Page Table 1MB
SDRAM_BASE + 0x100000,
SDRAM_BASE + 0x1FFFFF,
kLoaderBaseAddress + 0x100000,
kLoaderBaseAddress + 0x1FFFFF,
ARM_MMU_L2_FLAG_C,
},
{
"RAM_free", // 16MB free RAM (more but we don't map it automaticaly)
SDRAM_BASE + 0x0200000,
SDRAM_BASE + 0x11FFFFF,
kLoaderBaseAddress + 0x0200000,
kLoaderBaseAddress + 0x11FFFFF,
ARM_MMU_L2_FLAG_C,
},
{
"RAM_stack", // stack
SDRAM_BASE + 0x1200000,
SDRAM_BASE + 0x2000000,
HAIKU_BOARD_LOADER_STACK_BASE,
HAIKU_BOARD_LOADER_STACK_BASE + 0xe00000,
ARM_MMU_L2_FLAG_C,
},
{
"RAM_initrd", // stack
SDRAM_BASE + 0x2000000,
SDRAM_BASE + 0x2500000,
"RAM_initrd", // initrd
HAIKU_BOARD_LOADER_UIBASE,
HAIKU_BOARD_LOADER_UIBASE + 0x500000,
ARM_MMU_L2_FLAG_C,
},
@ -124,10 +136,9 @@ static struct memblock LOADER_MEMORYMAP[] = {
//static const uint32 kDefaultPageTableFlags = MMU_FLAG_READWRITE;
// not cached not buffered, R/W
static const size_t kMaxKernelSize = 0x200000; // 2 MB for the kernel
static addr_t sNextPhysicalAddress = 0; //will be set by mmu_init
static addr_t sNextVirtualAddress = KERNEL_LOAD_BASE + kMaxKernelSize;
static addr_t sNextVirtualAddress = LOADER_MEMORYMAP[4].start;
static addr_t sNextPageTableAddress = 0;
//the page directory is in front of the pagetable

View File

@ -184,8 +184,8 @@ actions BuildUBootSDImage1
# We load the uImage 2MB above its final destination, bootm will decode
# it to the proper location. Our image is smaller than 2MB so this works.
echo 'uenvcmd=run loadImage; run mmcboot;
loadImage=fatload mmc0 0 0x80200000 haiku_loader_nbsd.ub
mmcboot=bootm 0x80200000' > uEnv.txt
loadImage=fatload mmc0 0 $(HAIKU_BOARD_LOADER_UIBASE) haiku_loader_nbsd.ub
mmcboot=bootm $(HAIKU_BOARD_LOADER_UIBASE)' > uEnv.txt
# populate
MTOOLSRC=$(1).mtools mcopy $(2[1-]) i:
MTOOLSRC=$(1).mtools mcopy uEnv.txt i:

View File

@ -62,7 +62,7 @@ SYMBOL(_start_common):
ldr sp,=SDRAM_BASE + 0x2000000
ldr sp,=SDRAM_BASE + KSTACK_TOP
ldrb r4,gUBootOS
cmp r4,#0
beq start_raw