Skip to content

Commit

Permalink
add devfs VFS module
Browse files Browse the repository at this point in the history
  • Loading branch information
GwenNelson committed Aug 15, 2016
1 parent 0cbea3a commit f553446
Show file tree
Hide file tree
Showing 9 changed files with 115 additions and 5 deletions.
1 change: 1 addition & 0 deletions kernel/k_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ void userland_init(void* arg) {
// this is a bit of a cheat (directly invoking a syscall function) - will need to use inline asm later
char* argv[]={"/sbin/init",NULL};
char* env[] ={"PATH=/bin:/sbin",NULL};
sys_init();
sys_execve("initrd:/sbin/init",argv,env);
}

Expand Down
8 changes: 7 additions & 1 deletion kernel/k_syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,13 @@ pid_t sys_spawn(char* path, char** argv, char** envp) {
// free(wfname);
}

void sys_null() { }
// used to setup a userspace process
void sys_init() {
int cur_pid = get_cur_task();
tasks[cur_pid].fds[0] = vfs_fopen("/dev/console","r");
tasks[cur_pid].fds[1] = vfs_fopen("/dev/console","w");
tasks[cur_pid].fds[2] = vfs_fopen("/dev/console","w");
}

void sys_getcwd(char* buf, size_t size) {
int cur_pid = get_cur_task();
Expand Down
2 changes: 2 additions & 0 deletions kernel/k_thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
#include <Protocol/DevicePath.h>
#include <Library/PcdLib.h>
#include <Library/UefiLib.h>
#include "k_vfs.h"

typedef struct task_def_t {
int task_id;
void (*task_proc)(void* arg, UINT64 task_id);
thread_list* ctx;
void* arg;

vfs_fd_t* fds[512]; // file descriptor table
char** environ;
char* cwd;

Expand Down
7 changes: 6 additions & 1 deletion kernel/k_vfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

#include "vfs/devuefi.h"
#include "vfs/uefi.h"
//include "vfs/devfs.h"
#include "vfs/devfs.h"

#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
Expand Down Expand Up @@ -117,6 +117,9 @@ void vfs_init_types() {

vfs_init_uefi_fs_type();
vfs_add_type(uefi_fs_type);

vfs_init_devfs_fs_type();
vfs_add_type(devfs_fs_type);
}

void vfs_add_type(vfs_fs_type_t *fs_type) {
Expand All @@ -138,6 +141,8 @@ extern char* argv0; // import from k_main
void vfs_init() {
vfs_init_types();

vfs_simple_mount("devfs", "devfs", "/dev");

vfs_simple_mount("devuefi","uefi","/dev/uefi/");

vfs_simple_mount("uefi","/dev/uefi/initrd","/");
Expand Down
1 change: 1 addition & 0 deletions kernel/kernel.inf.template
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
dmthread.c
vfs/uefi.c
vfs/devuefi.c
vfs/devfs.c

nuklear.c

Expand Down
2 changes: 1 addition & 1 deletion kernel/syscalls.lst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
0 NULL void
0 INIT void
1 EXIT void
2 READ ssize_t unsigned int fd, void* buf, size_t count
3 WRITE ssize_t unsigned int fd, void* buf, size_t count
Expand Down
75 changes: 75 additions & 0 deletions kernel/vfs/devfs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#include <stdint.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

#include "../k_vfs.h"
extern EFI_BOOT_SERVICES *BS;
extern EFI_HANDLE gImageHandle;

#define IN_DEVFS
#include "devfs.h"

vfs_fs_type_t *devfs_fs_type = NULL;
char* devfs_fs_type_s = "devfs";

char** root_list = {
"console",
NULL
};

void vfs_devfs_shutdown(vfs_fs_handler_t* this) {
}

int vfs_devfs_file_exists(vfs_fs_handler_t* this, char* path) {
}

char** vfs_devfs_list_root_dir(vfs_fs_handler_t* this) {
return root_list;
}

void* vfs_devfs_open(vfs_fs_handler_t* this, char* path, int flags) {
}

int vfs_devfs_close(vfs_fs_handler_t* this, void* fd) {
}

ssize_t vfs_devfs_read(vfs_fs_handler_t* this, void* fd, void* buf, size_t count) {
}

ssize_t vfs_devfs_write(vfs_fs_handler_t* this, void* fd, void* buf, size_t count) {
}

off_t vfs_devfs_lseek(vfs_fs_handler_t* this, void* fd, off_t offset, int whence) {
}

int vfs_devfs_stat(vfs_fs_handler_t* this, char* path, struct stat *buf) {
}

int vfs_devfs_fstat(vfs_fs_handler_t* this, void* fd, struct stat *buf) {
}



void vfs_devfs_setup(vfs_fs_handler_t* this, char* dev_name, char* mountpoint) {
this->list_root_dir = &vfs_devfs_list_root_dir;
this->shutdown = &vfs_devfs_shutdown;
this->file_exists = &vfs_devfs_file_exists;
this->list_root_dir = &vfs_devfs_list_root_dir;

this->open = &vfs_devfs_open;
this->close = &vfs_devfs_close;
this->read = &vfs_devfs_read;
this->write = &vfs_devfs_write;
this->lseek = &vfs_devfs_lseek;
this->stat = &vfs_devfs_stat;
this->fstat = &vfs_devfs_fstat;
}

void vfs_init_devfs_fs_type() {
devfs_fs_type = (vfs_fs_type_t*)calloc(sizeof(vfs_fs_type_t),1);
devfs_fs_type->fs_type = devfs_fs_type_s;
devfs_fs_type->setup = &vfs_devfs_setup;
klog("VFS",1,"devfs filesystem driver setup");
}
20 changes: 20 additions & 0 deletions kernel/vfs/devfs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef VFS_DEVFS_H
#define VFS_DEVFS_H

#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

#include "../k_vfs.h"

extern EFI_BOOT_SERVICES *BS;
extern EFI_HANDLE gImageHandle;

#ifndef IN_DEVFS
extern vfs_fs_type_t *devfs_fs_type;
#endif

void vfs_init_devfs_fs_type();

#endif
4 changes: 2 additions & 2 deletions kernel/zoidberg_version.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef ZOIDBERG_VERSION_H
#define ZOIDBERG_VERSION_H
#define ZOIDBERG_VERSION "0.1"
#define ZOIDBERG_BUILD "1944433"
#define ZOIDBERG_BUILDDATE "Mon 15 Aug 20:22:18 BST 2016"
#define ZOIDBERG_BUILD "0cbea3a"
#define ZOIDBERG_BUILDDATE "Mon 15 Aug 20:42:17 BST 2016"
#endif

0 comments on commit f553446

Please sign in to comment.