Rev 3022 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3022 | Rev 4055 | ||
---|---|---|---|
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 74... | Line 77... | ||
74 | { |
77 | { |
75 | mmu_start(); |
78 | mmu_start(); |
76 | version_print(); |
79 | version_print(); |
77 | 80 | ||
78 | component_t components[COMPONENTS]; |
81 | component_t components[COMPONENTS]; |
79 | bootinfo_t bootinfo; |
- | |
80 | init_components(components); |
82 | init_components(components); |
81 | 83 | ||
- | 84 | bootinfo_t bootinfo; |
|
- | 85 | ||
82 | printf("\nMemory statistics\n"); |
86 | printf("\nMemory statistics\n"); |
83 | printf(" kernel entry point at %L\n", KERNEL_VIRTUAL_ADDRESS); |
87 | printf(" kernel entry point at %L\n", KERNEL_VIRTUAL_ADDRESS); |
84 | printf(" %L: boot info structure\n", &bootinfo); |
88 | printf(" %L: boot info structure\n", &bootinfo); |
85 | 89 | ||
86 | unsigned int i, j; |
90 | unsigned int i, j; |
Line 98... | Line 102... | ||
98 | top = ALIGN_UP(top, KERNEL_PAGE_SIZE); |
102 | top = ALIGN_UP(top, KERNEL_PAGE_SIZE); |
99 | 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); |
100 | if (i > 0) { |
104 | if (i > 0) { |
101 | bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top; |
105 | bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top; |
102 | 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); |
|
103 | bootinfo.cnt++; |
109 | bootinfo.cnt++; |
104 | } |
110 | } |
105 | top += components[i].size; |
111 | top += components[i].size; |
106 | printf("done.\n"); |
112 | printf("done.\n"); |
107 | } |
113 | } |
108 | 114 | ||
109 | printf("\nBooting the kernel...\n"); |
115 | printf("\nBooting the kernel...\n"); |
110 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo)); |
116 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo); |
111 | } |
117 | } |
112 | 118 | ||
113 | /** @} |
119 | /** @} |
114 | */ |
120 | */ |
115 | 121 |