void process_initrd() { unsigned int i; printk(5, "[vfs]: Processing initrd..."); struct inode *node = init_ramfs(); addr_t location = initrd_location; initrd_header = (initrd_header_t *)location; file_headers = (initrd_file_header_t *) (location+sizeof(initrd_header_t)); struct inode *q; /* Temporarily set the FS indicators to the ramfs root so we can use the * VFS. This makes parsing directories much easier. */ current_task->thread->pwd=current_task->thread->root=node; printk(1, "\n"); int count=0, size=0; for (i = 0; i < initrd_header->nfiles; i++) { printk(1, "\t* Loading '%s': %d bytes...\n", (char *)&file_headers[i].name, file_headers[i].length); file_headers[i].offset += location; char name[128]; sprintf(name, "/%s", (char *)&file_headers[i].name); q = cget_idir(name, 0, 0x1FF); rfs_write(q, 0, file_headers[i].length, (char *)((addr_t)file_headers[i].offset)); count++; size += file_headers[i].length / 1024; } printk(1, "\t* Creating directories...\n"); rfs_create(0, "dev", S_IFDIR); rfs_create(0, "mnt", S_IFDIR); rfs_create(0, "mnt2", S_IFDIR); rfs_create(0, "proc", S_IFDIR); printk(5, "\r[vfs]: Initrd loaded (%d files, %d KB: ok)\n", count, size); /* Reset the indicators to FS-less system */ current_task->thread->root = current_task->thread->pwd=0; }
void test_fsys(device_t * devp) { void * rwbuf = new_buf(FSYS_ALCBLKSZ); if(rwbuf == NULL) { hal_sysdie("rwbuf is NULL"); } hal_memset(rwbuf, FSYS_ALCBLKSZ, 0xff); objnode_t * ondp = krlnew_objnode(); if(ondp == NULL) { hal_sysdie("ondp is NULL"); } ondp->on_acsflgs = FSDEV_OPENFLG_NEWFILE; ondp->on_fname = "/testfile"; ondp->on_buf = rwbuf; ondp->on_bufsz = FSYS_ALCBLKSZ; ondp->on_len = 512; ondp->on_ioctrd = FSDEV_IOCTRCD_DELFILE; if(rfs_open(devp, ondp) == DFCERRSTUS) { hal_sysdie("new file is err"); } ondp->on_acsflgs = FSDEV_OPENFLG_OPEFILE; if(rfs_open(devp, ondp) == DFCERRSTUS) { hal_sysdie("open file is err"); } if(rfs_write(devp, ondp) == DFCERRSTUS) { hal_sysdie("write file is err"); } if(rfs_close(devp, ondp) == DFCERRSTUS) { hal_sysdie("close file is err"); } char_t * cb = (char_t *)rwbuf; for(uint_t i=0; i<512; i++) { if(cb[i] != 0xff) { hal_sysdie("chek rwbuf err"); } //printfk("rwbuf[%x]: %x\n\r", i, (uint_t)cb[i]); } //printfk("write and read ok\n\r"); if(rfs_ioctrl(devp, ondp) == DFCERRSTUS) { hal_sysdie("del file is err"); } ondp->on_acsflgs = FSDEV_OPENFLG_OPEFILE; if(rfs_open(devp, ondp) == DFCOKSTUS) { hal_sysdie("2open2 file is err"); } printfk("write and read test ok\n\r"); //hal_sysdie("test_fsys ok"); return; }