Rev 3386 | Rev 4581 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3386 | Rev 4153 | ||
|---|---|---|---|
| Line 30... | Line 30... | ||
| 30 | /** @addtogroup arm32boot |
30 | /** @addtogroup arm32boot |
| 31 | * @{ |
31 | * @{ |
| 32 | */ |
32 | */ |
| 33 | /** @file |
33 | /** @file |
| 34 | * @brief Bootstrap. |
34 | * @brief Bootstrap. |
| 35 | */ |
35 | */ |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | #include "main.h" |
38 | #include "main.h" |
| 39 | #include "asm.h" |
39 | #include "asm.h" |
| 40 | #include "_components.h" |
40 | #include "_components.h" |
| 41 | #include <printf.h> |
41 | #include <printf.h> |
| - | 42 | #include <align.h> |
|
| - | 43 | #include <macros.h> |
|
| - | 44 | #include <string.h> |
|
| 42 | 45 | ||
| 43 | #include "mm.h" |
46 | #include "mm.h" |
| 44 | 47 | ||
| 45 | /** Kernel entry point address. */ |
48 | /** Kernel entry point address. */ |
| 46 | #define KERNEL_VIRTUAL_ADDRESS 0x80200000 |
49 | #define KERNEL_VIRTUAL_ADDRESS 0x80200000 |
| 47 | 50 | ||
| 48 | 51 | ||
| 49 | char *release = RELEASE; |
52 | char *release = STRING(RELEASE); |
| 50 | 53 | ||
| 51 | #ifdef REVISION |
54 | #ifdef REVISION |
| 52 | char *revision = ", revision " REVISION; |
55 | char *revision = ", revision " STRING(REVISION); |
| 53 | #else |
56 | #else |
| 54 | char *revision = ""; |
57 | char *revision = ""; |
| 55 | #endif |
58 | #endif |
| 56 | 59 | ||
| 57 | #ifdef TIMESTAMP |
60 | #ifdef TIMESTAMP |
| 58 | char *timestamp = "\nBuilt on " TIMESTAMP; |
61 | char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
| 59 | #else |
62 | #else |
| 60 | char *timestamp = ""; |
63 | char *timestamp = ""; |
| 61 | #endif |
64 | #endif |
| 62 | 65 | ||
| 63 | 66 | ||
| Line 99... | Line 102... | ||
| 99 | top = ALIGN_UP(top, KERNEL_PAGE_SIZE); |
102 | top = ALIGN_UP(top, KERNEL_PAGE_SIZE); |
| 100 | memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size); |
103 | memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size); |
| 101 | if (i > 0) { |
104 | if (i > 0) { |
| 102 | bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top; |
105 | bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top; |
| 103 | bootinfo.tasks[bootinfo.cnt].size = components[i].size; |
106 | bootinfo.tasks[bootinfo.cnt].size = components[i].size; |
| - | 107 | strncpy(bootinfo.tasks[bootinfo.cnt].name, |
|
| - | 108 | components[i].name, BOOTINFO_TASK_NAME_BUFLEN); |
|
| 104 | bootinfo.cnt++; |
109 | bootinfo.cnt++; |
| 105 | } |
110 | } |
| 106 | top += components[i].size; |
111 | top += components[i].size; |
| 107 | printf("done.\n"); |
112 | printf("done.\n"); |
| 108 | } |
113 | } |
| 109 | 114 | ||
| 110 | printf("\nBooting the kernel...\n"); |
115 | printf("\nBooting the kernel...\n"); |
| 111 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo)); |
116 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo); |
| 112 | } |
117 | } |
| 113 | 118 | ||
| 114 | /** @} |
119 | /** @} |
| 115 | */ |
120 | */ |
| 116 | 121 | ||