예제 #1
0
void init_dev_fs()
{
	devfs_root = (struct inode*)kmalloc(sizeof(struct inode));
	_strcpy(devfs_root->name, "dev");
	devfs_root->i_ops = &devfs_inode_ops;
	devfs_root->parent = current_task->thread->root;
	devfs_root->mode = S_IFDIR | 0x1FF;
	devfs_root->num = -1;
	rwlock_create(&devfs_root->rwl);
	/* Create device nodes */
	char tty[6] = "tty";
	int i;
	for(i=1;i<10;i++) {
		sprintf(tty, "tty%d", i);
		devfs_add(devfs_root, tty, S_IFCHR, 3, i);
	}
	devfs_add(devfs_root, "tty", S_IFCHR, 4, 0);
	devfs_add(devfs_root, "null", S_IFCHR, 0, 0);
	devfs_add(devfs_root, "zero", S_IFCHR, 1, 0);
	devfs_add(devfs_root, "com0", S_IFCHR, 5, 0);
	/* Mount the filesystem */
	add_inode(current_task->thread->root, devfs_root);
#if CONFIG_MODULES
	add_kernel_symbol(devfs_add);
	add_kernel_symbol(devfs_remove);
#endif
}
예제 #2
0
파일: fs.c 프로젝트: Barracuda72/OS_64
void fs_init(void)
#endif
{
  char *rnn;

  kprintf("FS initialization...\n");
  vfs_node_t *main;

#ifdef __HOSTED__
  main = initrd_init(p, len);
  rnn = "initrd0";
#else
  main = ata_init();
  rnn = "ata0";
#endif

  dfs = devfs_init();

  devfs_add(main);

  root = vfs_alloc_node();
  root->name[0] = '/';
  root->name[1] = 0;

  root->flags = VFS_DIRECTORY;

  vfs_node_t *t = vfs_finddir(dfs, rnn);
  vfs_mount(t, root);

  if (root->ptr != NULL)
  {
    kprintf("Root mounted successfully\n");
  }

  tty_node = tty_init(NULL);
  devfs_add(tty_node);

  fs_print_dir(dfs);
}