aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/core
diff options
context:
space:
mode:
authorAlex Auvolat <alex.auvolat@ens.fr>2015-02-12 18:34:39 +0100
committerAlex Auvolat <alex.auvolat@ens.fr>2015-02-12 18:34:39 +0100
commit493b5a2cf072c1f183d4724c9c0cc7b63d4771ae (patch)
tree82bbc8885a2798c1e1f256e9763914a93c290929 /src/kernel/core
parent2432a437a715f7220697d13aae13e97087709842 (diff)
downloadkogata-493b5a2cf072c1f183d4724c9c0cc7b63d4771ae.tar.gz
kogata-493b5a2cf072c1f183d4724c9c0cc7b63d4771ae.zip
kmain.c is kind of an example of how the VFS should be used from the outside...
Diffstat (limited to 'src/kernel/core')
-rw-r--r--src/kernel/core/kmain.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/kernel/core/kmain.c b/src/kernel/core/kmain.c
index 9b1cd12..c9a9d13 100644
--- a/src/kernel/core/kmain.c
+++ b/src/kernel/core/kmain.c
@@ -240,18 +240,23 @@ void kernel_init_stage2(void* data) {
// Create devfs
register_nullfs_driver();
- fs_t *devfs_fs = make_fs("nullfs", 0, "");
- ASSERT(devfs_fs != 0);
- nullfs_t *devfs = as_nullfs(devfs_fs);
+ fs_t *devfs = make_fs("nullfs", 0, "cd");
ASSERT(devfs != 0);
+ nullfs_t *devfs_n = as_nullfs(devfs);
+ ASSERT(devfs_n != 0);
// Add kernel command line to devfs
- dbg_printf("Kernel command line: '%s'\n", (char*)mbd->cmdline);
- ASSERT(nullfs_add_ram_file(devfs, "/cmdline",
- (void*)mbd->cmdline, strlen((char*)mbd->cmdline),
- false, FM_READ));
+ {
+ dbg_printf("Kernel command line: '%s'\n", (char*)mbd->cmdline);
+ size_t len = strlen((char*)mbd->cmdline);
+ fs_handle_t* cmdline = fs_open(devfs, "/cmdline", FM_WRITE | FM_CREATE);
+ ASSERT(cmdline != 0);
+ ASSERT(file_write(cmdline, 0, len, (char*)mbd->cmdline) == len);
+ unref_file(cmdline);
+ }
// Populate devfs with files for kernel modules
+ ASSERT(fs_create(devfs, "/mod", FT_DIR));
multiboot_module_t *mods = (multiboot_module_t*)mbd->mods_addr;
for (unsigned i = 0; i < mbd->mods_count; i++) {
char* modname = (char*)mods[i].string;
@@ -267,16 +272,16 @@ void kernel_init_stage2(void* data) {
dbg_printf("Adding module to VFS: '%s'\n", name);
- ASSERT(nullfs_add_ram_file(devfs, name,
- (void*)mods[i].mod_start,
- mods[i].mod_end - mods[i].mod_start,
- false,
- FM_READ | FM_MMAP));
+ size_t len = mods[i].mod_end - mods[i].mod_start;
+ fs_handle_t* mod_f = fs_open(devfs, name, FM_WRITE | FM_CREATE);
+ ASSERT(mod_f != 0);
+ ASSERT(file_write(mod_f, 0, len, (char*)mods[i].mod_start) == len);
+ unref_file(mod_f);
}
// TEST : read /cmdline
dbg_printf("Trying to read /cmdline... ");
- fs_handle_t *f = fs_open(devfs_fs, "/cmdline", FM_READ);
+ fs_handle_t *f = fs_open(devfs, "/cmdline", FM_READ);
ASSERT(f != 0);
char buf[256];
size_t l = file_read(f, 0, 255, buf);