Add memory initialization to start_kernel.c
This commit is contained in:
		| @@ -1,3 +1,4 @@ | ||||
| #include <mm.h> | ||||
| #include <print.h> | ||||
| #include <devices/pl011.h> | ||||
|  | ||||
| @@ -5,21 +6,66 @@ | ||||
| #include <framebuffer.h> | ||||
| #include <console.h> | ||||
|  | ||||
| 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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user