Changeset 27518e4 in mainline
- Timestamp:
- 2008-09-13T14:45:04Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9f3363e
- Parents:
- 0320823
- Location:
- boot/arch/sparc64
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/sparc64/Makefile.inc
r0320823 r27518e4 38 38 cp arch/$(ARCH)/loader/image.boot $(TMP)/HelenOS/image.boot 39 39 gzip -f $(TMP)/HelenOS/image.boot 40 cp arch/$(ARCH)/loader/initrd.img $(TMP)/HelenOS/initrd.img 40 41 mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o $(BASE)/image.iso $(TMP)/ 41 42 -
boot/arch/sparc64/loader/Makefile
r0320823 r27518e4 115 115 -include Makefile.depend 116 116 117 image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o$(OBJECTS)118 $(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) initrd.o$(OBJECTS) -o $@117 image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) 118 $(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@ 119 119 120 120 depend: … … 125 125 rm -f $(USPACEDIR)/dist/sbin/`basename $$task` ; \ 126 126 done 127 -rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o$(OBJECTS) initrd.img image.boot image.map image.disasm Makefile.depend127 -rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) initrd.img image.boot image.map image.disasm Makefile.depend 128 128 129 129 _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_TASKS) _link.ld.in … … 139 139 ../../../../tools/mkhord.py 16384 initrd.fs initrd.img 140 140 rm initrd.fs 141 ../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 1 "unsigned long" $(COMPONENTS) ./initrd.img141 ../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 1 "unsigned long" $(COMPONENTS) 142 142 143 143 %.o: %.S -
boot/arch/sparc64/loader/main.c
r0320823 r27518e4 65 65 void bootstrap(void) 66 66 { 67 void *base = (void *) KERNEL_VIRTUAL_ADDRESS; 68 void *balloc_base; 69 unsigned int top = 0; 70 int i, j; 71 67 72 version_print(); 68 73 … … 92 97 silo_ramdisk_image += bootinfo.physmem_start; 93 98 silo_ramdisk_image -= 0x400000; 99 /* Install 1:1 mapping for the ramdisk. */ 100 if (ofw_map((void *)((uintptr_t)silo_ramdisk_image), 101 (void *)((uintptr_t)silo_ramdisk_image), 102 silo_ramdisk_size, -1) != 0) { 103 printf("Failed to map ramdisk.\n"); 104 halt(); 105 } 94 106 } 95 107 … … 102 114 printf(" %P: boot info structure\n", &bootinfo); 103 115 104 unsigned int i; 105 for (i = 0; i < COMPONENTS; i++) 116 /* 117 * Figure out destination address for each component. 118 * In this phase, we don't copy the components yet because we want to 119 * to be careful not to overwrite anything, especially the components 120 * which haven't been copied yet. 121 */ 122 bootinfo.taskmap.count = 0; 123 for (i = 0; i < COMPONENTS; i++) { 106 124 printf(" %P: %s image (size %d bytes)\n", components[i].start, 107 125 components[i].name, components[i].size); 108 109 void * base = (void *) KERNEL_VIRTUAL_ADDRESS; 110 unsigned int top = 0; 111 112 printf("\nCopying components\n"); 113 bootinfo.taskmap.count = 0; 114 for (i = 0; i < COMPONENTS; i++) { 126 top = ALIGN_UP(top, PAGE_SIZE); 127 if (i > 0) { 128 if (bootinfo.taskmap.count == TASKMAP_MAX_RECORDS) { 129 printf("Skipping superfluous components.\n"); 130 break; 131 } 132 bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = 133 base + top; 134 bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = 135 components[i].size; 136 bootinfo.taskmap.count++; 137 } 138 top += components[i].size; 139 } 140 141 j = bootinfo.taskmap.count - 1; /* do not consider ramdisk */ 142 143 if (silo_ramdisk_image) { 144 /* Treat the ramdisk as the last bootinfo task. */ 145 if (bootinfo.taskmap.count == TASKMAP_MAX_RECORDS) { 146 printf("Skipping ramdisk.\n"); 147 goto skip_ramdisk; 148 } 149 top = ALIGN_UP(top, PAGE_SIZE); 150 bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = 151 base + top; 152 bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = 153 silo_ramdisk_size; 154 bootinfo.taskmap.count++; 155 printf("\nCopying ramdisk..."); 156 /* 157 * Claim and map the whole ramdisk as it may exceed the area 158 * given to us by SILO. 159 */ 160 (void) ofw_claim_phys(base + top, silo_ramdisk_size); 161 (void) ofw_map(base + top, base + top, silo_ramdisk_size, -1); 162 /* 163 * FIXME If the source and destination overlap, it may be 164 * desirable to copy in reverse order, depending on how the two 165 * regions overlap. 166 */ 167 memcpy(base + top, (void *)((uintptr_t)silo_ramdisk_image), 168 silo_ramdisk_size); 169 printf("done.\n"); 170 top += silo_ramdisk_size; 171 } 172 skip_ramdisk: 173 174 /* 175 * Now we can proceed to copy the components. We do it in reverse order 176 * so that we don't overwrite anything even if the components overlap 177 * with base. 178 */ 179 printf("\nCopying bootinfo tasks\n"); 180 for (i = COMPONENTS - 1; i > 0; i--, j--) { 115 181 printf(" %s...", components[i].name); 116 top = ALIGN_UP(top, PAGE_SIZE);117 182 118 183 /* … … 123 188 * to addresses from [0xffd00000; 0xffefffff] and 124 189 * [0xfe000000; 0xfeffffff]. 190 * 191 * XXX We don't map this piece of memory. We simply rely on 192 * SILO to have it done for us already in this case. 125 193 */ 126 (void) ofw_claim_phys(bootinfo.physmem_start + base + top, 194 (void) ofw_claim_phys(bootinfo.physmem_start + 195 bootinfo.taskmap.tasks[j].addr, 127 196 ALIGN_UP(components[i].size, PAGE_SIZE)); 128 197 129 memcpy(base + top, components[i].start, components[i].size); 130 if (i > 0) { 131 bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = 132 base + top; 133 bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = 134 components[i].size; 135 bootinfo.taskmap.count++; 136 } 137 top += components[i].size; 198 memcpy((void *)bootinfo.taskmap.tasks[j].addr, 199 components[i].start, components[i].size); 138 200 printf("done.\n"); 139 201 } 140 202 141 /* 142 * Claim the physical memory for the boot allocator. 203 printf("\nCopying kernel..."); 204 (void) ofw_claim_phys(bootinfo.physmem_start + base, 205 ALIGN_UP(components[0].size, PAGE_SIZE)); 206 memcpy(base, components[0].start, components[0].size); 207 printf("done.\n"); 208 209 /* 210 * Claim and map the physical memory for the boot allocator. 143 211 * Initialize the boot allocator. 144 212 */ 145 (void) ofw_claim_phys(bootinfo.physmem_start + 146 base + ALIGN_UP(top, PAGE_SIZE), BALLOC_MAX_SIZE); 147 balloc_init(&bootinfo.ballocs, ALIGN_UP(((uintptr_t) base) + top, 148 PAGE_SIZE)); 213 balloc_base = base + ALIGN_UP(top, PAGE_SIZE); 214 (void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, 215 BALLOC_MAX_SIZE); 216 (void) ofw_map(balloc_base, balloc_base, BALLOC_MAX_SIZE, -1); 217 balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); 149 218 150 219 printf("\nCanonizing OpenFirmware device tree..."); -
boot/arch/sparc64/silo/silo.conf
r0320823 r27518e4 2 2 image = /HelenOS/image.boot.gz 3 3 label = HelenOS 4 initrd = /HelenOS/initrd.img
Note:
See TracChangeset
for help on using the changeset viewer.