From 6cb769c423b09e88fea1763210200a716477be0a Mon Sep 17 00:00:00 2001 From: login Date: Sun, 27 Nov 2022 14:17:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86include=E7=9B=AE=E5=BD=95=E4=B8=8B?= =?UTF-8?q?=E7=9A=84rust=E4=BB=A3=E7=A0=81=E8=BD=AC=E7=A7=BB=E5=88=B0?= =?UTF-8?q?=E4=BB=96=E4=BB=AC=E5=BA=94=E5=BD=93=E5=B1=9E=E4=BA=8E=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=B8=AD=20(#96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 将include目录下的rust代码转移到他们应当属于的模块下。 --- kernel/src/include/DragonOS/mod.rs | 3 - kernel/src/include/DragonOS/printk.rs | 86 ------------------ kernel/src/include/mod.rs | 3 +- kernel/src/ipc/mod.rs | 3 +- kernel/src/ipc/signal.rs | 18 ++-- .../signal.rs => ipc/signal_types.rs} | 0 kernel/src/libs/printk.rs | 88 +++++++++++++++++++ kernel/src/mm/allocator.rs | 2 +- kernel/src/{include/DragonOS => mm}/gfp.rs | 0 kernel/src/mm/mod.rs | 3 +- kernel/src/process/fork.rs | 12 +-- kernel/src/process/initial_proc.rs | 7 +- 12 files changed, 114 insertions(+), 111 deletions(-) delete mode 100644 kernel/src/include/DragonOS/mod.rs delete mode 100644 kernel/src/include/DragonOS/printk.rs rename kernel/src/{include/DragonOS/signal.rs => ipc/signal_types.rs} (100%) rename kernel/src/{include/DragonOS => mm}/gfp.rs (100%) diff --git a/kernel/src/include/DragonOS/mod.rs b/kernel/src/include/DragonOS/mod.rs deleted file mode 100644 index ac2cbb11..00000000 --- a/kernel/src/include/DragonOS/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod gfp; -pub mod printk; -pub mod signal; diff --git a/kernel/src/include/DragonOS/printk.rs b/kernel/src/include/DragonOS/printk.rs deleted file mode 100644 index 81990bc3..00000000 --- a/kernel/src/include/DragonOS/printk.rs +++ /dev/null @@ -1,86 +0,0 @@ -#![allow(unused)] -// ====== 定义颜色 ====== -/// 白色 -pub const COLOR_WHITE: u32 = 0x00ffffff; -/// 黑色 -pub const COLOR_BLACK: u32 = 0x00000000; -/// 红色 -pub const COLOR_RED: u32 = 0x00ff0000; -/// 橙色 -pub const COLOR_ORANGE: u32 = 0x00ff8000; -/// 黄色 -pub const COLOR_YELLOW: u32 = 0x00ffff00; -/// 绿色 -pub const COLOR_GREEN: u32 = 0x0000ff00; -/// 蓝色 -pub const COLOR_BLUE: u32 = 0x000000ff; -/// 靛色 -pub const COLOR_INDIGO: u32 = 0x0000ffff; -/// 紫色 -pub const COLOR_PURPLE: u32 = 0x008000ff; - -#[macro_export] -macro_rules! print { - ($($arg:tt)*) => ($crate::libs::printk::__printk(format_args!($($arg)*))); -} - -#[macro_export] -macro_rules! println { - () => { - $crate::print!("\n"); - }; - ($($arg:tt)*) => ($crate::print!("{}\n", format_args!($($arg)*))); -} - -/// 指定颜色,彩色输出 -/// @param FRcolor 前景色 -/// @param BKcolor 背景色 -#[macro_export] -macro_rules! printk_color { - - ($FRcolor:expr, $BKcolor:expr, $($arg:tt)*) => { - use alloc; - $crate::libs::printk::PrintkWriter.__write_string_color($FRcolor, $BKcolor, alloc::fmt::format(format_args!($($arg)*)).as_str()) - }; -} - -#[macro_export] -macro_rules! kdebug { - ($($arg:tt)*) => { - $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("[ DEBUG ] ({}:{})\t", file!(), line!()))+ - alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) - } -} - -#[macro_export] -macro_rules! kinfo { - ($($arg:tt)*) => { - $crate::libs::printk::PrintkWriter.__write_string((alloc::string::String::from("[ INFO ] ")+ alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) - } -} - -#[macro_export] -macro_rules! kwarn { - ($($arg:tt)*) => { - $crate::libs::printk::PrintkWriter.__write_string_color($crate::include::DragonOS::printk::COLOR_YELLOW, $crate::include::DragonOS::printk::COLOR_BLACK, "[ WARN ] "); - $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!($($arg)*)) + "\n").as_str()) - } -} - -#[macro_export] -macro_rules! kerror { - ($($arg:tt)*) => { - $crate::libs::printk::PrintkWriter.__write_string_color($crate::include::DragonOS::printk::COLOR_RED, $crate::include::DragonOS::printk::COLOR_BLACK, "[ ERROR ] "); - $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("({}:{})\t", file!(), line!())) + - alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) - } -} - -#[macro_export] -macro_rules! kBUG { - ($($arg:tt)*) => { - $crate::libs::printk::PrintkWriter.__write_string_color($crate::include::DragonOS::printk::COLOR_RED, $crate::include::DragonOS::printk::COLOR_BLACK, "[ BUG ] "); - $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("({}:{})\t", file!(), line!())) + - alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) - } -} \ No newline at end of file diff --git a/kernel/src/include/mod.rs b/kernel/src/include/mod.rs index 2a2ff986..b9da6e6e 100644 --- a/kernel/src/include/mod.rs +++ b/kernel/src/include/mod.rs @@ -1,3 +1,2 @@ #![allow(non_snake_case)] -pub mod bindings; -pub mod DragonOS; \ No newline at end of file +pub mod bindings; \ No newline at end of file diff --git a/kernel/src/ipc/mod.rs b/kernel/src/ipc/mod.rs index 6d430e26..00f0754e 100644 --- a/kernel/src/ipc/mod.rs +++ b/kernel/src/ipc/mod.rs @@ -1 +1,2 @@ -pub mod signal; \ No newline at end of file +pub mod signal; +pub mod signal_types; \ No newline at end of file diff --git a/kernel/src/ipc/signal.rs b/kernel/src/ipc/signal.rs index b6011fe6..9a0337a2 100644 --- a/kernel/src/ipc/signal.rs +++ b/kernel/src/ipc/signal.rs @@ -6,10 +6,7 @@ use crate::{ pid_t, process_control_block, process_find_pcb_by_pid, pt_regs, spinlock_t, EINVAL, ENOTSUP, ESRCH, PF_EXITING, PF_KTHREAD, PF_WAKEKILL, PROC_INTERRUPTIBLE, }, - DragonOS::signal::{ - si_code_val, sigaction, sigaction__union_u, sighand_struct, siginfo, signal_struct, - sigpending, sigset_t, SignalNumber, MAX_SIG_NUM, - }, + }, kBUG, kdebug, kwarn, libs::{ @@ -23,7 +20,14 @@ use crate::{ }, }; -use crate::include::DragonOS::signal::{__siginfo_union, __siginfo_union_data}; +use super::signal_types::{ + si_code_val, sigaction, sigaction__union_u, sighand_struct, siginfo, signal_struct, + sigpending, sigset_t, SignalNumber, MAX_SIG_NUM, +}; + + + +use super::signal_types::{__siginfo_union, __siginfo_union_data}; /// 默认信号处理程序占位符(用于在sighand结构体中的action数组中占位) pub static DEFAULT_SIGACTION: sigaction = sigaction { @@ -61,8 +65,8 @@ pub extern "C" fn sys_kill(regs: &pt_regs) -> u64 { si_code: si_code_val::SI_USER as i32, si_errno: 0, reserved: 0, - _sifields: crate::include::DragonOS::signal::__sifields { - _kill: crate::include::DragonOS::signal::__sifields__kill { _pid: pid }, + _sifields: super::signal_types::__sifields { + _kill: super::signal_types::__sifields__kill { _pid: pid }, }, }, }, diff --git a/kernel/src/include/DragonOS/signal.rs b/kernel/src/ipc/signal_types.rs similarity index 100% rename from kernel/src/include/DragonOS/signal.rs rename to kernel/src/ipc/signal_types.rs diff --git a/kernel/src/libs/printk.rs b/kernel/src/libs/printk.rs index 756d235c..ae4ee213 100644 --- a/kernel/src/libs/printk.rs +++ b/kernel/src/libs/printk.rs @@ -1,7 +1,95 @@ +#![allow(unused)] use crate::include::bindings::bindings::{printk_color, BLACK, WHITE}; use ::core::ffi::c_char; use alloc::vec::Vec; use core::fmt; + +// ====== 定义颜色 ====== +/// 白色 +pub const COLOR_WHITE: u32 = 0x00ffffff; +/// 黑色 +pub const COLOR_BLACK: u32 = 0x00000000; +/// 红色 +pub const COLOR_RED: u32 = 0x00ff0000; +/// 橙色 +pub const COLOR_ORANGE: u32 = 0x00ff8000; +/// 黄色 +pub const COLOR_YELLOW: u32 = 0x00ffff00; +/// 绿色 +pub const COLOR_GREEN: u32 = 0x0000ff00; +/// 蓝色 +pub const COLOR_BLUE: u32 = 0x000000ff; +/// 靛色 +pub const COLOR_INDIGO: u32 = 0x0000ffff; +/// 紫色 +pub const COLOR_PURPLE: u32 = 0x008000ff; + +#[macro_export] +macro_rules! print { + ($($arg:tt)*) => ($crate::libs::printk::__printk(format_args!($($arg)*))); +} + +#[macro_export] +macro_rules! println { + () => { + $crate::print!("\n"); + }; + ($($arg:tt)*) => ($crate::print!("{}\n", format_args!($($arg)*))); +} + +/// 指定颜色,彩色输出 +/// @param FRcolor 前景色 +/// @param BKcolor 背景色 +#[macro_export] +macro_rules! printk_color { + + ($FRcolor:expr, $BKcolor:expr, $($arg:tt)*) => { + use alloc; + $crate::libs::printk::PrintkWriter.__write_string_color($FRcolor, $BKcolor, alloc::fmt::format(format_args!($($arg)*)).as_str()) + }; +} + +#[macro_export] +macro_rules! kdebug { + ($($arg:tt)*) => { + $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("[ DEBUG ] ({}:{})\t", file!(), line!()))+ + alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) + } +} + +#[macro_export] +macro_rules! kinfo { + ($($arg:tt)*) => { + $crate::libs::printk::PrintkWriter.__write_string((alloc::string::String::from("[ INFO ] ")+ alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) + } +} + +#[macro_export] +macro_rules! kwarn { + ($($arg:tt)*) => { + $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::printk::COLOR_YELLOW, $crate::libs::printk::COLOR_BLACK, "[ WARN ] "); + $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!($($arg)*)) + "\n").as_str()) + } +} + +#[macro_export] +macro_rules! kerror { + ($($arg:tt)*) => { + $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::printk::COLOR_RED, $crate::libs::printk::COLOR_BLACK, "[ ERROR ] "); + $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("({}:{})\t", file!(), line!())) + + alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) + } +} + +#[macro_export] +macro_rules! kBUG { + ($($arg:tt)*) => { + $crate::libs::printk::PrintkWriter.__write_string_color($crate::libs::printk::COLOR_RED, $crate::libs::printk::COLOR_BLACK, "[ BUG ] "); + $crate::libs::printk::PrintkWriter.__write_string((alloc::fmt::format(format_args!("({}:{})\t", file!(), line!())) + + alloc::fmt::format(format_args!($($arg)*)).as_str() + "\n").as_str()) + } +} + pub struct PrintkWriter; impl PrintkWriter { diff --git a/kernel/src/mm/allocator.rs b/kernel/src/mm/allocator.rs index 28d0e3b8..1078812b 100644 --- a/kernel/src/mm/allocator.rs +++ b/kernel/src/mm/allocator.rs @@ -1,5 +1,5 @@ use crate::include::bindings::bindings::{gfp_t, kfree, kmalloc, PAGE_2M_SIZE}; -use crate::include::DragonOS::gfp::__GFP_ZERO; +use super::gfp::__GFP_ZERO; use core::alloc::{GlobalAlloc, Layout}; diff --git a/kernel/src/include/DragonOS/gfp.rs b/kernel/src/mm/gfp.rs similarity index 100% rename from kernel/src/include/DragonOS/gfp.rs rename to kernel/src/mm/gfp.rs diff --git a/kernel/src/mm/mod.rs b/kernel/src/mm/mod.rs index f47c56a1..20f94e7f 100644 --- a/kernel/src/mm/mod.rs +++ b/kernel/src/mm/mod.rs @@ -1 +1,2 @@ -pub mod allocator; \ No newline at end of file +pub mod allocator; +pub mod gfp; \ No newline at end of file diff --git a/kernel/src/process/fork.rs b/kernel/src/process/fork.rs index 5e8206d2..96f5dacd 100644 --- a/kernel/src/process/fork.rs +++ b/kernel/src/process/fork.rs @@ -4,13 +4,13 @@ use alloc::boxed::Box; use crate::{ arch::x86_64::asm::current::current_pcb, - include::{ - bindings::bindings::{ - process_control_block, CLONE_CLEAR_SIGHAND, CLONE_SIGHAND, CLONE_THREAD, ENOMEM, - }, - DragonOS::signal::{sigaction, sighand_struct, signal_struct}, + include::bindings::bindings::{ + process_control_block, CLONE_CLEAR_SIGHAND, CLONE_SIGHAND, CLONE_THREAD, ENOMEM, + }, + ipc::{ + signal::DEFAULT_SIGACTION, + signal_types::{sigaction, sighand_struct, signal_struct}, }, - ipc::signal::DEFAULT_SIGACTION, kdebug, libs::{ atomic::atomic_set, diff --git a/kernel/src/process/initial_proc.rs b/kernel/src/process/initial_proc.rs index c887dd46..42ca5904 100644 --- a/kernel/src/process/initial_proc.rs +++ b/kernel/src/process/initial_proc.rs @@ -1,11 +1,10 @@ use crate::{ - include::{ - bindings::bindings::{atomic_t, spinlock_t}, - DragonOS::signal::{sighand_struct, signal_struct, MAX_SIG_NUM}, - }, + include::bindings::bindings::{atomic_t, spinlock_t}, ipc::signal::DEFAULT_SIGACTION, }; +use crate::ipc::signal_types::{sighand_struct, signal_struct, MAX_SIG_NUM}; + /// @brief 初始进程的signal结构体 #[no_mangle] pub static INITIAL_SIGNALS: signal_struct = signal_struct {