Changeset 3eee37d in mainline
- Timestamp:
- 2006-05-18T19:42:34Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- de1b8b1
- Parents:
- a62347a
- Location:
- arch/ppc32
- Files:
-
- 1 added
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/Makefile.inc
ra62347a r3eee37d 30 30 31 31 image.boot: kernel uspace 32 make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNEL =../../../$(KERNELDIR)/kernel.bin INIT=../../../$(USPACEDIR)/init/init32 make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) 33 33 cp arch/$(ARCH)/loader/image.boot image.boot 34 34 35 35 clean: clean_kernel clean_uspace 36 make -C arch/$(ARCH)/loader clean 36 make -C arch/$(ARCH)/loader clean KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) 37 37 -rm -f image.boot 38 38 -
arch/ppc32/loader/Makefile
ra62347a r3eee37d 57 57 boot.S 58 58 59 COMPONENTS = \ 60 $(KERNELDIR)/kernel.bin \ 61 $(USPACEDIR)/ns/ns \ 62 $(USPACEDIR)/init/init \ 63 $(USPACEDIR)/fb/fb 64 59 65 OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) 66 COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS)))) 60 67 61 68 .PHONY: all clean depend … … 65 72 -include Makefile.depend 66 73 67 image.boot: depend $(OBJECTS) kernel.o init.o68 $(LD) -no-check-sections -N -T _link.ld $( OBJECTS) kernel.o init.o-o $@74 image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) kernel.o 75 $(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@ 69 76 70 77 depend: … … 72 79 73 80 clean: 74 -rm -f $(OBJECTS) image.boot kernel.o init.oMakefile.depend81 -rm -f _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot Makefile.depend 75 82 76 kernel.o: $(KERNEL) 77 $(OBJCOPY) -I binary -O elf32-powerpc -B powerpc:common --rename-section .data=.kernel_image $(KERNEL) $@ 78 79 init.o: $(INIT) 80 $(OBJCOPY) -I binary -O elf32-powerpc -B powerpc:common --rename-section .data=.init_image $(INIT) $@ 83 _components.h _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS) 84 ./pack $(OBJCOPY) $(COMPONENTS) 81 85 82 86 %.o: %.S -
arch/ppc32/loader/main.c
ra62347a r3eee37d 30 30 #include "printf.h" 31 31 #include "asm.h" 32 33 #define KERNEL_START ((void *) &_binary_____________kernel_kernel_bin_start) 34 #define KERNEL_END ((void *) &_binary_____________kernel_kernel_bin_end) 35 #define KERNEL_SIZE ((unsigned int) KERNEL_END - (unsigned int) KERNEL_START) 36 37 #define INIT_START ((void *) &_binary_____________uspace_init_init_start) 38 #define INIT_END ((void *) &_binary_____________uspace_init_init_end) 39 #define INIT_SIZE ((unsigned int) INIT_END - (unsigned int) INIT_START) 32 #include "_components.h" 40 33 41 34 #define HEAP_GAP 1024000 … … 83 76 printf("\nHelenOS PPC Bootloader\n"); 84 77 85 check_align(KERNEL_START, "Kernel image"); 86 check_align(INIT_START, "Init image"); 87 check_align(&real_mode, "Bootstrap trampoline"); 88 check_align(&trans, "Translation table"); 78 init_components(); 79 80 unsigned int i; 81 82 for (i = 0; i < COMPONENTS; i++) 83 check_align(components[i].start, components[i].name); 84 85 check_align(&real_mode, "bootstrap trampoline"); 86 check_align(&trans, "translation table"); 89 87 90 88 if (!ofw_memmap(&bootinfo.memmap)) { 91 printf("Error: Unable to get memory map, halting.\n");89 printf("Error: unable to get memory map, halting.\n"); 92 90 halt(); 93 91 } 94 92 95 93 if (bootinfo.memmap.total == 0) { 96 printf("Error: No memory detected, halting.\n");94 printf("Error: no memory detected, halting.\n"); 97 95 halt(); 98 96 } 99 97 100 98 if (!ofw_screen(&bootinfo.screen)) { 101 printf("Error: Unable to get screen properties, halting.\n");99 printf("Error: unable to get screen properties, halting.\n"); 102 100 halt(); 103 101 } … … 112 110 113 111 printf("\nMemory statistics (total %d MB)\n", bootinfo.memmap.total >> 20); 114 printf(" kernel image at %L (size %d bytes)\n", KERNEL_START, KERNEL_SIZE);115 printf(" init image at %L (size %d bytes)\n", INIT_START, INIT_SIZE);116 printf(" boot info structure at %L (physical %L)\n", &bootinfo, bootinfo_pa);117 printf(" bootstrap trampoline at %L (physical %L)\n", &real_mode, real_mode_pa);118 printf(" translation table at %L (physical %L)\n", &trans, trans_pa);112 printf(" %L: boot info structure (physical %L)\n", &bootinfo, bootinfo_pa); 113 printf(" %L: bootstrap trampoline (physical %L)\n", &real_mode, real_mode_pa); 114 printf(" %L: translation table (physical %L)\n", &trans, trans_pa); 115 for (i = 0; i < COMPONENTS; i++) 116 printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size); 119 117 120 unsigned int top = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) + ALIGN_UP(INIT_SIZE, PAGE_SIZE);121 unsigned int kernel_pages = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) >> PAGE_WIDTH;122 unsigned int init_pages = ALIGN_UP(INIT_SIZE, PAGE_SIZE) >> PAGE_WIDTH;118 unsigned int top = 0; 119 for (i = 0; i < COMPONENTS; i++) 120 top += ALIGN_UP(components[i].size, PAGE_SIZE); 123 121 124 unsigned int i;122 unsigned int pages = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) >> PAGE_WIDTH; 125 123 126 for (i = 0; i < kernel_pages; i++) {124 for (i = 0; i < pages; i++) { 127 125 void *pa = ofw_translate(KERNEL_START + (i << PAGE_WIDTH)); 128 fix_overlap(KERNEL_START + (i << PAGE_WIDTH), &pa, " Kernel image", &top);126 fix_overlap(KERNEL_START + (i << PAGE_WIDTH), &pa, "kernel", &top); 129 127 trans[i] = pa; 130 128 } 131 129 132 for (i = 0; i < init_pages; i++) { 133 void *pa = ofw_translate(INIT_START + (i << PAGE_WIDTH)); 134 fix_overlap(INIT_START + (i << PAGE_WIDTH), &pa, "Init image", &top); 135 trans[kernel_pages + i] = pa; 136 if (i == 0) { 137 bootinfo.init.addr = (void *) ((kernel_pages + i) << PAGE_WIDTH); 138 bootinfo.init.size = INIT_SIZE; 130 bootinfo.taskmap.count = 0; 131 for (i = 1; i < COMPONENTS; i++) { 132 unsigned int component_pages = ALIGN_UP(components[i].size, PAGE_SIZE) >> PAGE_WIDTH; 133 unsigned int j; 134 135 for (j = 0; j < component_pages; j++) { 136 void *pa = ofw_translate(components[i].start + (j << PAGE_WIDTH)); 137 fix_overlap(components[i].start + (j << PAGE_WIDTH), &pa, components[i].name, &top); 138 trans[pages + j] = pa; 139 if (j == 0) { 140 bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = (void *) (pages << PAGE_WIDTH); 141 bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size; 142 bootinfo.taskmap.count++; 143 } 139 144 } 145 146 pages += component_pages; 140 147 } 141 148 142 fix_overlap(&real_mode, &real_mode_pa, " Bootstrap trampoline", &top);143 fix_overlap(&trans, &trans_pa, " Translation table", &top);144 fix_overlap(&bootinfo, &bootinfo_pa, " Boot info", &top);149 fix_overlap(&real_mode, &real_mode_pa, "bootstrap trampoline", &top); 150 fix_overlap(&trans, &trans_pa, "translation table", &top); 151 fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top); 145 152 146 153 printf("\nBooting the kernel...\n"); 147 jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, (kernel_pages + init_pages)<< PAGE_WIDTH, fb, real_mode_pa);154 jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, fb, real_mode_pa); 148 155 } -
arch/ppc32/loader/main.h
ra62347a r3eee37d 39 39 #define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) 40 40 41 #define TASKMAP_MAX_RECORDS 32 42 41 43 typedef struct { 42 44 void *addr; 43 45 unsigned int size; 44 } utask_t;46 } task_t; 45 47 46 48 typedef struct { 47 utask_t init; 49 unsigned int count; 50 task_t tasks[TASKMAP_MAX_RECORDS]; 51 } taskmap_t; 52 53 typedef struct { 54 taskmap_t taskmap; 48 55 memmap_t memmap; 49 56 screen_t screen; 50 57 } bootinfo_t; 51 52 extern int _binary_____________kernel_kernel_bin_start;53 extern int _binary_____________kernel_kernel_bin_end;54 55 extern int _binary_____________uspace_init_init_start;56 extern int _binary_____________uspace_init_init_end;57 58 58 59 extern void start(void);
Note:
See TracChangeset
for help on using the changeset viewer.