Пример #1
0
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;
}
Пример #2
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;
}