From 563ad96efbe036bf9fd271115b439bcbc9b0bb53 Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Mon, 17 Sep 2012 23:33:50 -0400 Subject: [PATCH] Add memory initialization to start_kernel.c --- kernel/start_kernel.c | 56 +++++++++++++++++++++++++++++++++++++++---- link.ld | 3 ++- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/kernel/start_kernel.c b/kernel/start_kernel.c index ff09084..32b7080 100644 --- a/kernel/start_kernel.c +++ b/kernel/start_kernel.c @@ -1,3 +1,4 @@ +#include #include #include @@ -5,21 +6,66 @@ #include #include +extern const unsigned int kernel_end; + struct fb myfb; void video(void) { -// unsigned int x, y; + unsigned int x, y; pl111_init(&myfb, 24); -// x = 0, y = 0; -// for (y=0; y<480; y++) -// for (x=0; x<640; x++) -// fb_write_pixel(&myfb, x, y, 0x3f, 0x0, 0x6f); + x = 0, y = 0; + for (y=0; y<480; y++) + for (x=0; x<640; x++) + fb_write_pixel(&myfb, x, y, 0x3f, 0x0, 0x6f); + console_init(&myfb); } + +void test_memory() { + struct page *p, *q; + p = mm_get_free_pages(0); + if (p) + print("%x, %x\n", p, p->address); + else + print("Error: failed to allocate memory for p\n"); + + q = mm_get_free_pages(4); + if (q) + print("%x, %x\n", q, q->address); + else + print("Error: failed to allocate memory for q\n"); + + mm_put_free_pages(p); + mm_put_free_pages(q); + + q = mm_get_free_pages(1); + if (q) + print("%x, %x\n", q, q->address); + else + print("Error: failed to allocate memory for q\n"); + + p = mm_get_free_pages(0); + if (p) + print("%x, %x\n", p, p->address); + else + print("Error: failed to allocate memory for p\n"); + +} int main(void) { + char *lower; print_init(&pl011_putc); //initialize the serial console + //setup memory + mm_init(); + mm_add_free_region((void*)0x60000000, (void*)0x7FFFFFFF); + lower = (char*) &kernel_end; + if ((unsigned int)lower % MM_PAGE_SIZE != 0) + lower += (MM_PAGE_SIZE - ((unsigned int)lower % MM_PAGE_SIZE)); + mm_add_free_region((void*)lower, (void*)0x9FFFFFFF); //subtract the memory used by the kernel + + test_memory(); + video(); return 0; diff --git a/link.ld b/link.ld index 89f7549..584f7f5 100644 --- a/link.ld +++ b/link.ld @@ -2,8 +2,9 @@ ENTRY (_start) SECTIONS { - . = 0; + . = 0x80000000; .text : { *(.text*) *(.rodata*) } .data : { *(.data*) } .bss : { *(.bss*) *(COMMON*) } + kernel_end = .; }