blob: 75c881833c6f7b38dffe3194c181c9c6944ccc7f [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use crate::fs::tmpfs::*;
use crate::fs::*;
use crate::task::*;
use crate::types::*;
use std::sync::Arc;
pub fn dev_tmp_fs(kernel: &Arc<Kernel>) -> &FileSystemHandle {
kernel.dev_tmp_fs.get_or_init(|| init_devtmpfs(kernel))
}
fn init_devtmpfs(kernel: &Arc<Kernel>) -> FileSystemHandle {
let fs = TmpFs::new(kernel);
let root = fs.root();
let mkchr = |name, device_type| {
root.create_node(name, FileMode::IFCHR | FileMode::from_bits(0o666), device_type).unwrap();
};
let mkdir = |name| {
root.create_node(name, FileMode::IFDIR | FileMode::from_bits(0o755), DeviceType::NONE)
.unwrap();
};
mkchr(b"null", DeviceType::NULL);
mkchr(b"zero", DeviceType::ZERO);
mkchr(b"full", DeviceType::FULL);
mkchr(b"random", DeviceType::RANDOM);
mkchr(b"urandom", DeviceType::URANDOM);
mkdir(b"shm");
// tty related nodes
mkdir(b"pts");
mkchr(b"tty", DeviceType::TTY);
root.create_symlink(b"ptmx", b"pts/ptmx").unwrap();
fs
}