用户态挂载文件系统问题

在为DragonOS编写用户程序时遇到问题

需求

为ramfs编写测试,在用户态下挂载ramfs

问题

缺乏系统调用,relibc中未找到sys/mount.h的实现
用户程序无法访问内核中的RamFS,MountFS等结构体

请问用户态下挂载文件系统的最佳实践是什么?

编写了以下的用户程序,注入后运行,发生kernel panic:unsupported syscall 165

extern crate libc;
use libc::mount;
use libc::c_char;


fn main() {
    let mut src:[c_char;10]=[0;10];
    src[0]='/' as c_char;

    let mut target:[c_char;10]=[0;10];
    target[0]='/' as c_char;
    target[1]='m' as c_char;
    target[2]='n' as c_char;
    target[3]='t' as c_char;

    let mut fstype:[c_char;10]=[0;10];
    fstype[0]='r' as c_char;
    fstype[1]='a' as c_char;
    fstype[2]='m' as c_char;
    fstype[3]='f' as c_char;
    fstype[4]='s' as c_char;
    unsafe{
        let c_str=std::ffi::CStr::from_ptr(src.as_ptr());
        println!("{:?}",c_str);
    }
    unsafe{
        let result=mount(src.as_ptr(), target.as_ptr(), fstype.as_ptr(), 0, std::ptr::null());
        if result!=0{
            println!("mount fs failed!");
        }
    }
}

relibc目前不再使用,请使用musl libc。

具体请参考文档:应用程序开发文档 — DragonOS dev 文档

然后关于用户态下面挂载文件系统,目前没有实现这个功能,不过难度应该不大,xd可以考虑写个PR来开发这个哈哈哈,我愿意提供一切帮助

1 个赞

这是华工DragonOS内部团队春招的项目任务QAQ重构ramfs的一个方法并在用户空间测试

如果是这个任务的话,那就是在内核里面临时挂载一下就行。参考现有的代码即可。

1 个赞

但是每次构建还会从镜像网站拉取relibc然后安装进usr喵,我以为项目还在施工relibc

这是个遗留问题,见

1 个赞