Changeset fb48a0e in mainline
- Timestamp:
- 2011-11-30T13:36:49Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 317a463, c48f6ab
- Parents:
- 83285fd
- Files:
-
- 1 deleted
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile
r83285fd rfb48a0e 40 40 $(PACK) $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) arch/$(KARCH) $(COMPONENTS) 41 41 42 $(INITRD).img: $(INITRD).fs 43 $(MKHORD) $(PAGE_SIZE) $< $@ 44 45 $(INITRD).fs: build_dist 42 $(INITRD).img: build_dist 46 43 ifeq ($(RDFMT),tmpfs) 47 44 $(MKTMPFS) $(DIST_PATH) $@ … … 95 92 96 93 clean_dist: 97 rm -f $(INITRD). fs $(INITRD).img $(COMPS_H) $(COMPS_C) $(LINK) $(LINK).comp *.co94 rm -f $(INITRD).img $(COMPS_H) $(COMPS_C) $(LINK) $(LINK).comp *.co 98 95 rm -f $(USPACE_PATH)/dist/srv/* 99 96 rm -rf $(USPACE_PATH)/dist/drv/* -
boot/Makefile.common
r83285fd rfb48a0e 53 53 SANDBOX = pack 54 54 PACK = $(TOOLS_PATH)/pack.py 55 MKHORD = $(TOOLS_PATH)/mkhord.py56 55 MKTMPFS = $(TOOLS_PATH)/mktmpfs.py 57 56 MKFAT = $(TOOLS_PATH)/mkfat.py -
boot/arch/amd64/Makefile.inc
r83285fd rfb48a0e 26 26 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 # 28 29 PAGE_SIZE = 409630 28 31 29 RD_SRVS_ESSENTIAL += \ -
boot/arch/arm32/Makefile.inc
r83285fd rfb48a0e 39 39 BITS = 32 40 40 ENDIANESS = LE 41 PAGE_SIZE = 409642 41 43 42 RD_SRVS_ESSENTIAL += \ -
boot/arch/ia64/Makefile.inc
r83285fd rfb48a0e 33 33 BITS = 64 34 34 ENDIANESS = LE 35 PAGE_SIZE = 1638436 35 EXTRA_CFLAGS = -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -mno-sdata 37 36 -
boot/arch/mips32/Makefile.inc
r83285fd rfb48a0e 29 29 BFD_ARCH = mips 30 30 BITS = 32 31 PAGE_SIZE = 1638432 31 EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=32 33 32 -
boot/arch/mips64/Makefile.inc
r83285fd rfb48a0e 29 29 BFD_ARCH = mips:4000 30 30 BITS = 64 31 PAGE_SIZE = 1638432 31 EXTRA_CFLAGS = -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 -mabi=64 33 32 -
boot/arch/ppc32/Makefile.inc
r83285fd rfb48a0e 37 37 BITS = 32 38 38 ENDIANESS = BE 39 PAGE_SIZE = 409640 39 EXTRA_CFLAGS = -mcpu=powerpc -msoft-float -m32 41 40 -
boot/arch/sparc64/Makefile.inc
r83285fd rfb48a0e 37 37 BITS = 64 38 38 ENDIANESS = BE 39 PAGE_SIZE = 1638440 39 EXTRA_CFLAGS = -mcpu=ultrasparc -m64 -mno-fpu -mcmodel=medlow 41 40 -
kernel/generic/include/lib/rd.h
r83285fd rfb48a0e 38 38 #include <typedefs.h> 39 39 40 /** 41 * RAM disk version 42 */ 43 #define RD_VERSION 1 44 45 /** 46 * RAM disk magic number 47 */ 48 #define RD_MAGIC_SIZE 4 49 #define RD_MAG0 'H' 50 #define RD_MAG1 'O' 51 #define RD_MAG2 'R' 52 #define RD_MAG3 'D' 53 54 /** 55 * RAM disk data encoding types 56 */ 57 #define RD_DATA_NONE 0 58 #define RD_DATA_LSB 1 /* Least significant byte first (little endian) */ 59 #define RD_DATA_MSB 2 /* Most signigicant byte first (big endian) */ 60 61 /** 62 * RAM disk error return codes 63 */ 64 #define RE_OK 0 /* No error */ 65 #define RE_INVALID 1 /* Invalid RAM disk image */ 66 #define RE_UNSUPPORTED 2 /* Non-supported image (e.g. wrong version) */ 67 68 /** RAM disk header */ 69 struct rd_header { 70 uint8_t magic[RD_MAGIC_SIZE]; 71 uint8_t version; 72 uint8_t data_type; 73 uint32_t header_size; 74 uint64_t data_size; 75 } __attribute__ ((packed)); 76 77 typedef struct rd_header rd_header_t; 78 79 extern int init_rd(rd_header_t *addr, size_t size); 40 extern void init_rd(void *, size_t); 80 41 81 42 #endif -
kernel/generic/src/lib/rd.c
r83285fd rfb48a0e 33 33 /** 34 34 * @file 35 * @brief 35 * @brief RAM disk support. 36 36 * 37 37 * Support for RAM disk images. … … 39 39 40 40 #include <lib/rd.h> 41 #include <byteorder.h>42 41 #include <mm/frame.h> 43 42 #include <sysinfo/sysinfo.h> 44 43 #include <ddi/ddi.h> 45 #include <align.h>46 44 47 static parea_t rd_parea; /**< Physical memory area for rd. */ 45 /** Physical memory area for RAM disk. */ 46 static parea_t rd_parea; 48 47 49 /** 50 * RAM disk initialization routine. At this point, the RAM disk memory is shared 51 * and information about the share is provided as sysinfo values to the 52 * userspace tasks. 53 */ 54 int init_rd(rd_header_t *header, size_t size) 48 /** RAM disk initialization routine 49 * 50 * The information about the RAM disk is provided as sysinfo 51 * values to the uspace tasks. 52 * 53 */ 54 void init_rd(void *data, size_t size) 55 55 { 56 /* Identify RAM disk */ 57 if ((header->magic[0] != RD_MAG0) || (header->magic[1] != RD_MAG1) || 58 (header->magic[2] != RD_MAG2) || (header->magic[3] != RD_MAG3)) 59 return RE_INVALID; 56 uintptr_t base = KA2PA((uintptr_t) data); 57 ASSERT((base % FRAME_SIZE) == 0); 60 58 61 /* Identify version */ 62 if (header->version != RD_VERSION) 63 return RE_UNSUPPORTED; 64 65 uint32_t hsize; 66 uint64_t dsize; 67 switch (header->data_type) { 68 case RD_DATA_LSB: 69 hsize = uint32_t_le2host(header->header_size); 70 dsize = uint64_t_le2host(header->data_size); 71 break; 72 case RD_DATA_MSB: 73 hsize = uint32_t_be2host(header->header_size); 74 dsize = uint64_t_be2host(header->data_size); 75 break; 76 default: 77 return RE_UNSUPPORTED; 78 } 79 80 if ((hsize % FRAME_SIZE) || (dsize % FRAME_SIZE)) 81 return RE_UNSUPPORTED; 82 83 if (hsize > size) 84 return RE_INVALID; 85 86 if ((uint64_t) hsize + dsize > size) 87 dsize = size - hsize; 88 89 rd_parea.pbase = ALIGN_DOWN((uintptr_t) KA2PA((void *) header + hsize), 90 FRAME_SIZE); 91 rd_parea.frames = SIZE2FRAMES(dsize); 59 rd_parea.pbase = base; 60 rd_parea.frames = SIZE2FRAMES(size); 92 61 rd_parea.unpriv = false; 93 62 rd_parea.mapped = false; 94 63 ddi_parea_register(&rd_parea); 95 64 96 65 sysinfo_set_item_val("rd", NULL, true); 97 sysinfo_set_item_val("rd.header_size", NULL, hsize); 98 sysinfo_set_item_val("rd.size", NULL, dsize); 99 sysinfo_set_item_val("rd.address.physical", NULL, 100 (sysarg_t) KA2PA((void *) header + hsize)); 101 102 return RE_OK; 66 sysinfo_set_item_val("rd.size", NULL, size); 67 sysinfo_set_item_val("rd.address.physical", NULL, (sysarg_t) base); 103 68 } 104 69 -
kernel/generic/src/main/kinit.c
r83285fd rfb48a0e 179 179 for (i = 0; i < init.cnt; i++) { 180 180 if (init.tasks[i].addr % FRAME_SIZE) { 181 printf("init[%zu] .addris not frame aligned\n", i);181 printf("init[%zu]: Address is not frame aligned\n", i); 182 182 programs[i].task = NULL; 183 183 continue; … … 203 203 namebuf, &programs[i]); 204 204 205 if ((rc == 0) && (programs[i].task != NULL)) { 205 if (rc == 0) { 206 if (programs[i].task != NULL) { 207 /* 208 * Set capabilities to init userspace tasks. 209 */ 210 cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER | 211 CAP_IO_MANAGER | CAP_IRQ_REG); 212 213 if (!ipc_phone_0) 214 ipc_phone_0 = &programs[i].task->answerbox; 215 } 216 206 217 /* 207 * Set capabilities to init userspace tasks. 218 * If programs[i].task == NULL then it is 219 * the program loader and it was registered 220 * successfully. 208 221 */ 209 cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER | 210 CAP_IO_MANAGER | CAP_IRQ_REG); 211 212 if (!ipc_phone_0) 213 ipc_phone_0 = &programs[i].task->answerbox; 214 } else if (rc == 0) { 215 /* It was the program loader and was registered */ 216 } else { 217 /* RAM disk image */ 218 int rd = init_rd((rd_header_t *) init.tasks[i].addr, init.tasks[i].size); 219 220 if (rd != RE_OK) 221 printf("Init binary %zu not used (error %d)\n", i, rd); 222 } 222 } else if (i == init.cnt - 1) { 223 /* 224 * Assume the last task is the RAM disk. 225 */ 226 init_rd((void *) init.tasks[i].addr, init.tasks[i].size); 227 } else 228 printf("init[%zu]: Init binary load failed (error %d)\n", i, rc); 223 229 } 224 230
Note:
See TracChangeset
for help on using the changeset viewer.