Reserve 8MB space for kernel before RAM_loader
...so that kernel does not overwrite the loader. Signed-off-by: Adrien Destugues <[email protected]> Fixes #11067.
This commit is contained in:
committed by
Adrien Destugues
parent
2ba49c8804
commit
82d287ddcb
@@ -8,19 +8,19 @@ HAIKU_BOARD_DESCRIPTION = "BeagleBoard" ;
|
|||||||
#
|
#
|
||||||
|
|
||||||
# load address for haiku_loader
|
# load address for haiku_loader
|
||||||
HAIKU_BOARD_LOADER_BASE = 0x80008000 ;
|
HAIKU_BOARD_LOADER_BASE = 0x80800000 ;
|
||||||
# entry points (raw binary, and netbsd loader emulation)
|
# entry points (raw binary, and netbsd loader emulation)
|
||||||
HAIKU_BOARD_LOADER_ENTRY_RAW = 0x80008000 ;
|
HAIKU_BOARD_LOADER_ENTRY_RAW = $(HAIKU_BOARD_LOADER_BASE) ;
|
||||||
HAIKU_BOARD_LOADER_ENTRY_NBSD = 0x80008008 ;
|
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_ENTRY = $(HAIKU_BOARD_LOADER_ENTRY_NBSD) ;
|
||||||
HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
|
HAIKU_BOARD_LOADER_FAKE_OS = netbsd ;
|
||||||
|
|
||||||
# load address for haiku_loader uimage
|
# load address for haiku_loader uimage
|
||||||
# (must be different than real load address)
|
# (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
|
# Flash image
|
||||||
@@ -65,8 +65,14 @@ HAIKU_BOARD_SDIMAGE_FILES =
|
|||||||
#
|
#
|
||||||
|
|
||||||
HAIKU_ASFLAGS_$(HAIKU_PACKAGING_ARCH)
|
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)
|
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)
|
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) ;
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
#define __PLATFORM_OMAP3_H
|
#define __PLATFORM_OMAP3_H
|
||||||
|
|
||||||
#define SDRAM_BASE 0x80000000
|
#define SDRAM_BASE 0x80000000
|
||||||
|
// Offset of stack top defined with respect to SDRAM_BASE
|
||||||
|
#define KSTACK_TOP 0x27fffff
|
||||||
|
|
||||||
#define VECT_BASE 0x00000000
|
#define VECT_BASE 0x00000000
|
||||||
#define VECT_SIZE 0x1000
|
#define VECT_SIZE 0x1000
|
||||||
|
|||||||
@@ -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
|
*defines a block in memory
|
||||||
*/
|
*/
|
||||||
@@ -80,34 +86,40 @@ static struct memblock LOADER_MEMORYMAP[] = {
|
|||||||
DEVICE_BASE + DEVICE_SIZE - 1,
|
DEVICE_BASE + DEVICE_SIZE - 1,
|
||||||
ARM_MMU_L2_FLAG_B,
|
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
|
"RAM_loader", // 1MB loader
|
||||||
SDRAM_BASE + 0,
|
kLoaderBaseAddress + 0,
|
||||||
SDRAM_BASE + 0x0fffff,
|
kLoaderBaseAddress + 0x0fffff,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"RAM_pt", // Page Table 1MB
|
"RAM_pt", // Page Table 1MB
|
||||||
SDRAM_BASE + 0x100000,
|
kLoaderBaseAddress + 0x100000,
|
||||||
SDRAM_BASE + 0x1FFFFF,
|
kLoaderBaseAddress + 0x1FFFFF,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"RAM_free", // 16MB free RAM (more but we don't map it automaticaly)
|
"RAM_free", // 16MB free RAM (more but we don't map it automaticaly)
|
||||||
SDRAM_BASE + 0x0200000,
|
kLoaderBaseAddress + 0x0200000,
|
||||||
SDRAM_BASE + 0x11FFFFF,
|
kLoaderBaseAddress + 0x11FFFFF,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"RAM_stack", // stack
|
"RAM_stack", // stack
|
||||||
SDRAM_BASE + 0x1200000,
|
HAIKU_BOARD_LOADER_STACK_BASE,
|
||||||
SDRAM_BASE + 0x2000000,
|
HAIKU_BOARD_LOADER_STACK_BASE + 0xe00000,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"RAM_initrd", // stack
|
"RAM_initrd", // initrd
|
||||||
SDRAM_BASE + 0x2000000,
|
HAIKU_BOARD_LOADER_UIBASE,
|
||||||
SDRAM_BASE + 0x2500000,
|
HAIKU_BOARD_LOADER_UIBASE + 0x500000,
|
||||||
ARM_MMU_L2_FLAG_C,
|
ARM_MMU_L2_FLAG_C,
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -124,10 +136,9 @@ static struct memblock LOADER_MEMORYMAP[] = {
|
|||||||
|
|
||||||
//static const uint32 kDefaultPageTableFlags = MMU_FLAG_READWRITE;
|
//static const uint32 kDefaultPageTableFlags = MMU_FLAG_READWRITE;
|
||||||
// not cached not buffered, R/W
|
// 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 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;
|
static addr_t sNextPageTableAddress = 0;
|
||||||
//the page directory is in front of the pagetable
|
//the page directory is in front of the pagetable
|
||||||
|
|||||||
@@ -184,8 +184,8 @@ actions BuildUBootSDImage1
|
|||||||
# We load the uImage 2MB above its final destination, bootm will decode
|
# 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.
|
# it to the proper location. Our image is smaller than 2MB so this works.
|
||||||
echo 'uenvcmd=run loadImage; run mmcboot;
|
echo 'uenvcmd=run loadImage; run mmcboot;
|
||||||
loadImage=fatload mmc0 0 0x80200000 haiku_loader_nbsd.ub
|
loadImage=fatload mmc0 0 $(HAIKU_BOARD_LOADER_UIBASE) haiku_loader_nbsd.ub
|
||||||
mmcboot=bootm 0x80200000' > uEnv.txt
|
mmcboot=bootm $(HAIKU_BOARD_LOADER_UIBASE)' > uEnv.txt
|
||||||
# populate
|
# populate
|
||||||
MTOOLSRC=$(1).mtools mcopy $(2[1-]) i:
|
MTOOLSRC=$(1).mtools mcopy $(2[1-]) i:
|
||||||
MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
|
MTOOLSRC=$(1).mtools mcopy uEnv.txt i:
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ SYMBOL(_start_common):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ldr sp,=SDRAM_BASE + 0x2000000
|
ldr sp,=SDRAM_BASE + KSTACK_TOP
|
||||||
ldrb r4,gUBootOS
|
ldrb r4,gUBootOS
|
||||||
cmp r4,#0
|
cmp r4,#0
|
||||||
beq start_raw
|
beq start_raw
|
||||||
|
|||||||
Reference in New Issue
Block a user