Skip to content

Commit 52d7279

Browse files
committed
introduce MountFS, mount RamFS at /tmp, mount DevFS at /dev
1 parent ab06422 commit 52d7279

File tree

5 files changed

+76
-11
lines changed

5 files changed

+76
-11
lines changed

kernel/Cargo.lock

Lines changed: 44 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kernel/Cargo.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,12 @@ smoltcp = { git = "https://github.com/rcore-os/smoltcp", default-features = fals
6565
bitmap-allocator = { git = "https://github.com/rcore-os/bitmap-allocator" }
6666
rcore-memory = { path = "../crate/memory" }
6767
rcore-thread = { git = "https://github.com/rcore-os/rcore-thread" }
68-
rcore-fs = { git = "https://github.com/rcore-os/rcore-fs" }
69-
rcore-fs-sfs = { git = "https://github.com/rcore-os/rcore-fs" }
70-
compression = { version="0.1.3", default-features = false, features=["gzip"]}
68+
rcore-fs = { git = "https://github.com/rcore-os/rcore-fs", rev = "22c759f4" }
69+
rcore-fs-sfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "22c759f4" }
70+
rcore-fs-ramfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "22c759f4" }
71+
rcore-fs-mountfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "22c759f4" }
72+
rcore-fs-devfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "22c759f4" }
73+
compression = { version = "0.1.3", default-features = false, features = ["gzip"] }
7174

7275

7376
[target.'cfg(target_arch = "x86_64")'.dependencies]

kernel/src/fs/mod.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ use alloc::{sync::Arc, vec::Vec};
33
use rcore_fs::dev::block_cache::BlockCache;
44
use rcore_fs::vfs::*;
55
use rcore_fs_sfs::SimpleFileSystem;
6+
use rcore_fs_mountfs::MountFS;
7+
use rcore_fs_ramfs::RamFS;
8+
use rcore_fs_devfs::{DevFS, special::*};
69

710
use crate::drivers::BlockDriver;
811

@@ -69,8 +72,26 @@ lazy_static! {
6972
Arc::new(unsafe { device::MemBuf::new(_user_img_start, _user_img_end) })
7073
};
7174

75+
// use SFS as rootfs
7276
let sfs = SimpleFileSystem::open(device).expect("failed to open SFS");
73-
sfs.root_inode()
77+
let rootfs = MountFS::new(sfs);
78+
let root = rootfs.root_inode();
79+
80+
// create DevFS
81+
let devfs = DevFS::new();
82+
devfs.add("null", Arc::new(NullINode::default())).expect("failed to mknod /dev/null");
83+
devfs.add("zero", Arc::new(ZeroINode::default())).expect("failed to mknod /dev/zero");
84+
85+
// mount DevFS at /dev
86+
let dev = root.create("dev", FileType::Dir, 0o666).expect("failed to mkdir /dev");
87+
dev.mount(devfs).expect("failed to mount DevFS");
88+
89+
// mount RamFS at /tmp
90+
let ramfs = RamFS::new();
91+
let tmp = root.create("tmp", FileType::Dir, 0o666).expect("failed to mkdir /tmp");
92+
tmp.mount(ramfs).expect("failed to mount RamFS");
93+
94+
root
7495
};
7596
}
7697

kernel/src/syscall/fs.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,8 @@ impl From<FsError> for SysError {
951951
FsError::IOCTLError => SysError::EINVAL,
952952
FsError::NoDevice => SysError::EINVAL,
953953
FsError::Again => SysError::EAGAIN,
954+
FsError::SymLoop => SysError::ELOOP,
955+
FsError::Busy => SysError::EBUSY,
954956
}
955957
}
956958
}

kernel/src/syscall/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ pub enum SysError {
486486
ENOLCK = 37,
487487
ENOSYS = 38,
488488
ENOTEMPTY = 39,
489+
ELOOP = 40,
489490
ENOTSOCK = 80,
490491
ENOPROTOOPT = 92,
491492
EPFNOSUPPORT = 96,
@@ -543,6 +544,7 @@ impl fmt::Display for SysError {
543544
ENOLCK => "No record locks available",
544545
ENOSYS => "Function not implemented",
545546
ENOTEMPTY => "Directory not empty",
547+
ELOOP => "Too many symbolic links encountered",
546548
ENOTSOCK => "Socket operation on non-socket",
547549
ENOPROTOOPT => "Protocol not available",
548550
EPFNOSUPPORT => "Protocol family not supported",

0 commit comments

Comments
 (0)