From ddb9d91712b6e87aa15b9cc4a8fdec8ae0996a5e Mon Sep 17 00:00:00 2001 From: Xshine Date: Sun, 27 Aug 2023 15:54:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=20io=20=E7=A7=BB=E5=8A=A8=E8=87=B3=20?= =?UTF-8?q?vfs=20=E7=9B=AE=E5=BD=95=EF=BC=8C=E5=B9=B6=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E8=B7=AF=E5=BE=84=20(#339)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 将 io 移动至 vfs 目录,并修正引用路径 * fix bug in makefile --- kernel/src/Makefile | 2 +- kernel/src/driver/disk/ahci/ahci_inode.rs | 2 +- kernel/src/driver/disk/ahci/ahcidisk.rs | 14 +++++++------- kernel/src/driver/disk/ahci/mod.rs | 4 ++-- kernel/src/filesystem/fat/bpb.rs | 2 +- kernel/src/filesystem/fat/entry.rs | 2 +- kernel/src/filesystem/fat/fs.rs | 2 +- kernel/src/filesystem/vfs/core.rs | 2 +- kernel/src/filesystem/vfs/file.rs | 4 ++-- kernel/src/{ => filesystem/vfs}/io/Makefile | 0 kernel/src/{ => filesystem/vfs}/io/block/Makefile | 0 kernel/src/{ => filesystem/vfs}/io/block/mod.rs | 0 kernel/src/{ => filesystem/vfs}/io/device.rs | 0 kernel/src/{ => filesystem/vfs}/io/disk_info.rs | 0 kernel/src/{ => filesystem/vfs}/io/mod.rs | 0 kernel/src/filesystem/vfs/mod.rs | 1 + kernel/src/filesystem/vfs/syscall.rs | 2 +- kernel/src/lib.rs | 1 - kernel/src/libs/elf.rs | 2 +- kernel/src/libs/vec_cursor.rs | 2 +- kernel/src/process/exec.rs | 2 +- kernel/src/syscall/mod.rs | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) rename kernel/src/{ => filesystem/vfs}/io/Makefile (100%) rename kernel/src/{ => filesystem/vfs}/io/block/Makefile (100%) rename kernel/src/{ => filesystem/vfs}/io/block/mod.rs (100%) rename kernel/src/{ => filesystem/vfs}/io/device.rs (100%) rename kernel/src/{ => filesystem/vfs}/io/disk_info.rs (100%) rename kernel/src/{ => filesystem/vfs}/io/mod.rs (100%) diff --git a/kernel/src/Makefile b/kernel/src/Makefile index 7500550a..673183b4 100644 --- a/kernel/src/Makefile +++ b/kernel/src/Makefile @@ -17,7 +17,7 @@ export ASFLAGS := --64 LD_LIST := head.o -kernel_subdirs := common driver process debug arch exception smp sched syscall ktest libs ipc io time +kernel_subdirs := common driver process debug arch exception smp sched syscall ktest libs ipc time diff --git a/kernel/src/driver/disk/ahci/ahci_inode.rs b/kernel/src/driver/disk/ahci/ahci_inode.rs index 1dca48e3..adbe7f00 100644 --- a/kernel/src/driver/disk/ahci/ahci_inode.rs +++ b/kernel/src/driver/disk/ahci/ahci_inode.rs @@ -1,10 +1,10 @@ use crate::filesystem::devfs::{DevFS, DeviceINode}; use crate::filesystem::vfs::file::FileMode; +use crate::filesystem::vfs::io::device::BlockDevice; use crate::filesystem::vfs::{ core::generate_inode_id, make_rawdev, FilePrivateData, FileSystem, FileType, IndexNode, Metadata, PollStatus, }; -use crate::io::device::BlockDevice; use crate::syscall::SystemError; use crate::{libs::spinlock::SpinLock, time::TimeSpec}; use alloc::{ diff --git a/kernel/src/driver/disk/ahci/ahcidisk.rs b/kernel/src/driver/disk/ahci/ahcidisk.rs index 9f07c3db..f952e265 100644 --- a/kernel/src/driver/disk/ahci/ahcidisk.rs +++ b/kernel/src/driver/disk/ahci/ahcidisk.rs @@ -1,8 +1,8 @@ use super::{_port, hba::HbaCmdTable, virt_2_phys}; use crate::driver::disk::ahci::HBA_PxIS_TFES; use crate::filesystem::mbr::MbrDiskPartionTable; +use crate::filesystem::vfs::io::{device::BlockDevice, disk_info::Partition, SeekFrom}; use crate::include::bindings::bindings::verify_area; -use crate::io::{device::BlockDevice, disk_info::Partition, SeekFrom}; use crate::libs::{spinlock::SpinLock, vec_cursor::VecCursor}; use crate::mm::phys_2_virt; @@ -52,8 +52,8 @@ impl Debug for AhciDisk { impl AhciDisk { fn read_at( &self, - lba_id_start: crate::io::device::BlockId, // 起始lba编号 - count: usize, // 读取lba的数量 + lba_id_start: crate::filesystem::vfs::io::device::BlockId, // 起始lba编号 + count: usize, // 读取lba的数量 buf: &mut [u8], ) -> Result { compiler_fence(core::sync::atomic::Ordering::SeqCst); @@ -211,7 +211,7 @@ impl AhciDisk { fn write_at( &self, - lba_id_start: crate::io::device::BlockId, + lba_id_start: crate::filesystem::vfs::io::device::BlockId, count: usize, buf: &[u8], ) -> Result { @@ -449,7 +449,7 @@ impl BlockDevice for LockedAhciDisk { #[inline] fn read_at( &self, - lba_id_start: crate::io::device::BlockId, + lba_id_start: crate::filesystem::vfs::io::device::BlockId, count: usize, buf: &mut [u8], ) -> Result { @@ -463,7 +463,7 @@ impl BlockDevice for LockedAhciDisk { #[inline] fn write_at( &self, - lba_id_start: crate::io::device::BlockId, + lba_id_start: crate::filesystem::vfs::io::device::BlockId, count: usize, buf: &[u8], ) -> Result { @@ -475,7 +475,7 @@ impl BlockDevice for LockedAhciDisk { } #[inline] - fn device(&self) -> Arc { + fn device(&self) -> Arc { return self.0.lock().self_ref.upgrade().unwrap(); } diff --git a/kernel/src/driver/disk/ahci/mod.rs b/kernel/src/driver/disk/ahci/mod.rs index d886acd2..fbb3d7f2 100644 --- a/kernel/src/driver/disk/ahci/mod.rs +++ b/kernel/src/driver/disk/ahci/mod.rs @@ -3,10 +3,10 @@ pub mod ahci_inode; pub mod ahcidisk; pub mod hba; -use crate::io::device::BlockDevice; +use crate::filesystem::vfs::io::device::BlockDevice; // 依赖的rust工具包 use crate::filesystem::devfs::devfs_register; -use crate::io::disk_info::BLK_GF_AHCI; +use crate::filesystem::vfs::io::disk_info::BLK_GF_AHCI; use crate::kerror; use crate::libs::spinlock::{SpinLock, SpinLockGuard}; use crate::mm::virt_2_phys; diff --git a/kernel/src/filesystem/fat/bpb.rs b/kernel/src/filesystem/fat/bpb.rs index feb516ff..9f5c8573 100644 --- a/kernel/src/filesystem/fat/bpb.rs +++ b/kernel/src/filesystem/fat/bpb.rs @@ -2,7 +2,7 @@ use alloc::{sync::Arc, vec::Vec}; use crate::{ - io::{device::LBA_SIZE, disk_info::Partition, SeekFrom}, + filesystem::vfs::io::{device::LBA_SIZE, disk_info::Partition, SeekFrom}, kerror, libs::vec_cursor::VecCursor, syscall::SystemError, diff --git a/kernel/src/filesystem/fat/entry.rs b/kernel/src/filesystem/fat/entry.rs index f10140a2..af7af5d1 100644 --- a/kernel/src/filesystem/fat/entry.rs +++ b/kernel/src/filesystem/fat/entry.rs @@ -2,7 +2,7 @@ use core::{cmp::min, intrinsics::unlikely}; use crate::{ - io::{device::LBA_SIZE, SeekFrom}, + filesystem::vfs::io::{device::LBA_SIZE, SeekFrom}, kwarn, libs::vec_cursor::VecCursor, syscall::SystemError, diff --git a/kernel/src/filesystem/fat/fs.rs b/kernel/src/filesystem/fat/fs.rs index e0cce03c..cf59a043 100644 --- a/kernel/src/filesystem/fat/fs.rs +++ b/kernel/src/filesystem/fat/fs.rs @@ -9,12 +9,12 @@ use alloc::{ }; use crate::{ + filesystem::vfs::io::{device::LBA_SIZE, disk_info::Partition, SeekFrom}, filesystem::vfs::{ core::generate_inode_id, file::{FileMode, FilePrivateData}, FileSystem, FileType, IndexNode, InodeId, Metadata, PollStatus, }, - io::{device::LBA_SIZE, disk_info::Partition, SeekFrom}, kerror, libs::{ spinlock::{SpinLock, SpinLockGuard}, diff --git a/kernel/src/filesystem/vfs/core.rs b/kernel/src/filesystem/vfs/core.rs index 0c3af33e..1a7b8eb4 100644 --- a/kernel/src/filesystem/vfs/core.rs +++ b/kernel/src/filesystem/vfs/core.rs @@ -168,7 +168,7 @@ fn migrate_virtual_filesystem(new_fs: Arc) -> Result<(), SystemE #[no_mangle] pub extern "C" fn mount_root_fs() -> i32 { kinfo!("Try to mount FAT32 as root fs..."); - let partiton: Arc = + let partiton: Arc = ahci::get_disks_by_name("ahci_disk_0".to_string()) .unwrap() .0 diff --git a/kernel/src/filesystem/vfs/file.rs b/kernel/src/filesystem/vfs/file.rs index 769df7f6..2520c0d6 100644 --- a/kernel/src/filesystem/vfs/file.rs +++ b/kernel/src/filesystem/vfs/file.rs @@ -4,8 +4,8 @@ use alloc::{boxed::Box, string::String, sync::Arc, vec::Vec}; use crate::{ arch::asm::current::current_pcb, driver::tty::TtyFilePrivateData, - filesystem::procfs::ProcfsFilePrivateData, include::bindings::bindings::process_control_block, - io::SeekFrom, kerror, syscall::SystemError, + filesystem::procfs::ProcfsFilePrivateData, filesystem::vfs::io::SeekFrom, + include::bindings::bindings::process_control_block, kerror, syscall::SystemError, }; use super::{Dirent, FileType, IndexNode, Metadata}; diff --git a/kernel/src/io/Makefile b/kernel/src/filesystem/vfs/io/Makefile similarity index 100% rename from kernel/src/io/Makefile rename to kernel/src/filesystem/vfs/io/Makefile diff --git a/kernel/src/io/block/Makefile b/kernel/src/filesystem/vfs/io/block/Makefile similarity index 100% rename from kernel/src/io/block/Makefile rename to kernel/src/filesystem/vfs/io/block/Makefile diff --git a/kernel/src/io/block/mod.rs b/kernel/src/filesystem/vfs/io/block/mod.rs similarity index 100% rename from kernel/src/io/block/mod.rs rename to kernel/src/filesystem/vfs/io/block/mod.rs diff --git a/kernel/src/io/device.rs b/kernel/src/filesystem/vfs/io/device.rs similarity index 100% rename from kernel/src/io/device.rs rename to kernel/src/filesystem/vfs/io/device.rs diff --git a/kernel/src/io/disk_info.rs b/kernel/src/filesystem/vfs/io/disk_info.rs similarity index 100% rename from kernel/src/io/disk_info.rs rename to kernel/src/filesystem/vfs/io/disk_info.rs diff --git a/kernel/src/io/mod.rs b/kernel/src/filesystem/vfs/io/mod.rs similarity index 100% rename from kernel/src/io/mod.rs rename to kernel/src/filesystem/vfs/io/mod.rs diff --git a/kernel/src/filesystem/vfs/mod.rs b/kernel/src/filesystem/vfs/mod.rs index d037e068..d4232d79 100644 --- a/kernel/src/filesystem/vfs/mod.rs +++ b/kernel/src/filesystem/vfs/mod.rs @@ -3,6 +3,7 @@ pub mod core; pub mod fcntl; pub mod file; +pub mod io; pub mod mount; pub mod syscall; mod utils; diff --git a/kernel/src/filesystem/vfs/syscall.rs b/kernel/src/filesystem/vfs/syscall.rs index d580623a..3a5e90c7 100644 --- a/kernel/src/filesystem/vfs/syscall.rs +++ b/kernel/src/filesystem/vfs/syscall.rs @@ -3,8 +3,8 @@ use alloc::{boxed::Box, sync::Arc, vec::Vec}; use crate::{ arch::asm::current::current_pcb, filesystem::vfs::file::FileDescriptorVec, + filesystem::vfs::io::SeekFrom, include::bindings::bindings::{verify_area, AT_REMOVEDIR, PAGE_4K_SIZE, PROC_MAX_FD_NUM}, - io::SeekFrom, kerror, syscall::{Syscall, SystemError}, time::TimeSpec, diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 6efa09df..274a005d 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -29,7 +29,6 @@ mod include; mod driver; // 如果driver依赖了libs,应该在libs后面导出 mod exception; mod filesystem; -mod io; mod ipc; mod mm; mod net; diff --git a/kernel/src/libs/elf.rs b/kernel/src/libs/elf.rs index d65f3e1f..7fd9d348 100644 --- a/kernel/src/libs/elf.rs +++ b/kernel/src/libs/elf.rs @@ -10,7 +10,7 @@ use elf::{endian::AnyEndian, file::FileHeader, segment::ProgramHeader}; use crate::{ arch::MMArch, current_pcb, - io::SeekFrom, + filesystem::vfs::io::SeekFrom, kerror, libs::align::page_align_up, mm::{ diff --git a/kernel/src/libs/vec_cursor.rs b/kernel/src/libs/vec_cursor.rs index 78f4e4f8..74371297 100644 --- a/kernel/src/libs/vec_cursor.rs +++ b/kernel/src/libs/vec_cursor.rs @@ -4,7 +4,7 @@ use core::mem::size_of; use alloc::vec::Vec; -use crate::{io::SeekFrom, syscall::SystemError}; +use crate::{filesystem::vfs::io::SeekFrom, syscall::SystemError}; /// @brief 本模块用于为数组提供游标的功能,以简化其操作。 #[derive(Debug)] diff --git a/kernel/src/process/exec.rs b/kernel/src/process/exec.rs index 3e27a0d2..be6e1601 100644 --- a/kernel/src/process/exec.rs +++ b/kernel/src/process/exec.rs @@ -3,11 +3,11 @@ use core::{fmt::Debug, ptr::null}; use alloc::{collections::BTreeMap, string::String, sync::Arc, vec::Vec}; use crate::{ + filesystem::vfs::io::SeekFrom, filesystem::vfs::{ file::{File, FileMode}, ROOT_INODE, }, - io::SeekFrom, libs::elf::ELF_LOADER, mm::{ ucontext::{AddressSpace, UserStack}, diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 6965356c..ee27caa9 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -7,6 +7,7 @@ use num_traits::{FromPrimitive, ToPrimitive}; use crate::{ arch::{cpu::cpu_reset, MMArch}, + filesystem::vfs::io::SeekFrom, filesystem::vfs::{ fcntl::FcntlCommand, file::FileMode, @@ -14,7 +15,6 @@ use crate::{ MAX_PATHLEN, }, include::bindings::bindings::{pid_t, PAGE_2M_SIZE, PAGE_4K_SIZE}, - io::SeekFrom, kinfo, libs::align::page_align_up, mm::{verify_area, MemoryManagementArch, VirtAddr},