ソースを参照

使用musl进行编译 (#33)

* 把drstd换成musl
裕依2439 1 年間 前
コミット
dfd3fd9812

+ 1 - 11
.cargo/config.toml

@@ -1,12 +1,2 @@
 [build]
-target = "./x86_64-unknown-dragonos.json"
-
-[unstable]
-build-std = ["core", "compiler_builtins", "alloc"]
-build-std-features = ["compiler-builtins-mem"]
-
-[target.'cfg(target_os = "dragonos")']
-rustflags = [
-  "-C", "target-feature=+crt-static",
-  "-C", "link-arg=-no-pie",
-]
+target = "x86_64-unknown-linux-musl"

+ 6 - 0
.github/workflows/cache-toolchain.yml

@@ -37,4 +37,10 @@ jobs:
             rustup target add x86_64-unknown-none
             rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
             rustup component add rustfmt
+
+            rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu
+            rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
+            rustup target add x86_64-unknown-linux-musl --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
+            rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
+            
             cargo install dadk --version 0.1.2

+ 1 - 1
.github/workflows/standard-check.yml

@@ -51,4 +51,4 @@ jobs:
 
           - name: Build check
             run: |
-                  make all -j $(nproc)
+                  make build-release -j $(nproc)

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
 /target
 Cargo.lock
 /DragonReach
+/install

+ 1 - 5
.vscode/settings.json

@@ -3,9 +3,5 @@
         "./Cargo.toml",
         "./systemctl/Cargo.toml"
     ],
-    "rust-analyzer.check.overrideCommand": [
-        "make",
-        "check"
-    ],
-    // "rust-analyzer.cargo.target": "x86_64-unknown-dragonos",
+    "rust-analyzer.checkOnSave": true
 }

+ 5 - 8
Cargo.toml

@@ -7,20 +7,17 @@ edition = "2021"
 name = "DragonReach"
 path = "src/main.rs"
 
+[[bin]]
+name = "systemctl"
+path = "systemctl/src/main.rs"
+
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
 hashbrown = "0.11"
 cfg-if = { version = "1.0"}
-
-[target.'cfg(target_os = "dragonos")'.dependencies]
-drstd = {git = "https://github.com/DragonOS-Community/drstd.git", revision = "8b1e314e01"}
-dragonos-dsc = { git = "https://git.mirrors.dragonos.org/DragonOS-Community/dragonos-dsc.git", rev = "aa61cb0109" }
-
-lazy_static = { version = "1.4.0", default-features = false, features = ["spin_no_std"] }
-
-[target.'cfg(not(target_os = "dragonos"))'.dependencies]
 lazy_static = { version = "1.4.0" }
+libc = "0.2"
 
 [profile.release]
 panic = 'abort'

+ 25 - 38
Makefile

@@ -1,50 +1,37 @@
-export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
-export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
+# The toolchain we use.
+# You can get it by running DragonOS' `tools/bootstrap.sh`
+TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu"
+RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie"
 
-OUTPUT_DIR = $(DADK_BUILD_CACHE_DIR_DRAGONREACH_0_1_0)
-REACH_ETC_DIR=$(OUTPUT_DIR)/etc/reach
-REACH_BIN_DIR=$(OUTPUT_DIR)/bin/
-TMP_INSTALL_DIR=$(OUTPUT_DIR)/tmp_install
+# 如果是在dadk中编译,那么安装到dadk的安装目录中
+INSTALL_DIR?=$(DADK_CURRENT_BUILD_DIR)
+# 如果是在本地编译,那么安装到当前目录下的install目录中
+INSTALL_DIR?=./install
 
-all: build
 
 build:
-	@$(MAKE) -C ./systemctl build
-	cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target ./x86_64-unknown-dragonos.json --release
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) build
 
-install:
-	mkdir -p $(TMP_INSTALL_DIR)
-	mkdir -p $(REACH_ETC_DIR)
-	mkdir -p $(REACH_ETC_DIR)/system/
-	mkdir -p $(REACH_BIN_DIR)
-	mkdir -p $(REACH_ETC_DIR)/ipc/
-
-	cp ./parse_test/shell.service $(REACH_ETC_DIR)/system/shell.service
-
-	cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path .  --root $(TMP_INSTALL_DIR)
-	mv $(TMP_INSTALL_DIR)/bin/DragonReach $(REACH_BIN_DIR)/DragonReach
-	
-	cargo -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path ./systemctl  --root $(TMP_INSTALL_DIR)
-	mv $(TMP_INSTALL_DIR)/bin/systemctl $(REACH_BIN_DIR)/systemctl
-	
-	rm -rf $(TMP_INSTALL_DIR)
-
-build-linux:
-	@$(MAKE) -C ./systemctl build-linux
-	cargo -Z build-std=core,alloc,compiler_builtins build --target x86_64-unknown-linux-gnu
+run-dragonreach:
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) run --bin DragonReach
 
 clean:
-	cargo clean
-	@$(MAKE) -C ./systemctl clean
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) clean
+
+build-release:
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) build --release
+
+clean-release:
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) clean --release
 
 fmt:
-	cargo fmt
-	@$(MAKE) -C ./systemctl fmt
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) fmt
 
 fmt-check:
-	cargo fmt --check
-	@$(MAKE) -C ./systemctl fmt-check
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) fmt --check
 
-check:
-	cargo -Z build-std=core,alloc,compiler_builtins check --workspace --message-format=json --target ./x86_64-unknown-dragonos.json
-	@$(MAKE) -C ./systemctl check
+.PHONY: install
+install:
+	mkdir -p $(INSTALL_DIR)/etc/reach/system
+	cp ./parse_test/shell.service $(INSTALL_DIR)/etc/reach/system/shell.service
+	RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) install --path . --no-track --root $(INSTALL_DIR) --force

+ 0 - 2
src/error/mod.rs

@@ -1,8 +1,6 @@
 pub mod parse_error;
 pub mod runtime_error;
 
-use std::string::String;
-
 pub trait ErrorFormat {
     fn error_format(&self) -> String;
 }

+ 0 - 4
src/error/parse_error/mod.rs

@@ -1,7 +1,3 @@
-use std::format;
-use std::string::String;
-use std::string::ToString;
-
 use super::ErrorFormat;
 /// 解析错误,错误信息应该包括文件名以及行号
 #[repr(i32)]

+ 0 - 3
src/error/runtime_error/mod.rs

@@ -1,8 +1,5 @@
 use super::ErrorFormat;
 
-use std::format;
-use std::string::String;
-
 #[derive(Debug)]
 pub enum RuntimeErrorType {
     //启动失败

+ 1 - 3
src/executor/dep_graph/mod.rs

@@ -1,6 +1,4 @@
-use std::sync::Arc;
-use std::sync::Mutex;
-use std::vec::Vec;
+use std::sync::{Arc, Mutex};
 
 use crate::manager::UnitManager;
 use crate::{

+ 5 - 6
src/executor/service_executor/mod.rs

@@ -1,3 +1,8 @@
+use std::{
+    process::{Command, Stdio},
+    time::Duration,
+};
+
 use crate::{
     error::runtime_error::{RuntimeError, RuntimeErrorType},
     manager::{timer_manager::TimerManager, UnitManager},
@@ -8,12 +13,6 @@ use crate::{
     },
 };
 
-use std::process::Command;
-use std::process::Stdio;
-use std::time::Duration;
-use std::vec::Vec;
-use std::{eprint, eprintln};
-
 use super::{Executor, ExitStatus};
 
 pub struct ServiceExecutor;

+ 4 - 20
src/main.rs

@@ -1,12 +1,4 @@
-#![no_std]
-#![no_main]
-#![feature(slice_pattern)]
-#![feature(fn_traits)]
-
-#[cfg(target_os = "dragonos")]
-extern crate drstd as std;
-
-extern crate hashbrown;
+#![allow(non_snake_case)]
 
 mod contants;
 mod error;
@@ -18,15 +10,9 @@ mod task;
 mod time;
 mod unit;
 
-use std::{eprint, eprintln};
-
-use std::string::ToString;
-use std::vec::Vec;
-
 use error::ErrorFormat;
 use executor::Executor;
-use manager::timer_manager::TimerManager;
-use manager::Manager;
+use manager::{timer_manager::TimerManager, Manager};
 use parse::UnitParser;
 use systemctl::listener::Systemctl;
 
@@ -34,7 +20,6 @@ pub struct FileDescriptor(usize);
 
 const DRAGON_REACH_UNIT_DIR: &'static str = "/etc/reach/system/";
 
-#[no_mangle]
 fn main() {
     // 初始化
     Systemctl::init();
@@ -46,9 +31,8 @@ fn main() {
             if let Ok(entry) = entry {
                 if let Ok(file_type) = entry.file_type() {
                     if file_type.is_file() {
-                        let filename = entry.file_name();
-                        let filename = filename.to_str().unwrap();
-                        units_file_name.push(filename.to_string());
+                        let filename = entry.file_name().to_str().unwrap().to_string();
+                        units_file_name.push(filename);
                     }
                 }
             }

+ 65 - 79
src/manager/ctl_manager/mod.rs

@@ -1,18 +1,13 @@
 use lazy_static::lazy_static;
 use std::fs::File;
 use std::os::fd::FromRawFd;
-use std::string::String;
-use std::string::ToString;
-use std::sync::Arc;
-use std::{eprint, eprintln, format};
-use std::{libc, print, println};
-use std::{sync::Mutex, vec::Vec};
+use std::sync::{Arc, Mutex};
 
 use crate::error::runtime_error::RuntimeError;
 use crate::error::runtime_error::RuntimeErrorType;
 use crate::error::ErrorFormat;
 use crate::parse::parse_util::UnitParseUtil;
-use crate::systemctl::ctl_parser::Pattern;
+use crate::systemctl::ctl_parser::{CommandOperation, Pattern};
 use crate::systemctl::ctl_path;
 use crate::systemctl::listener::Command;
 use crate::unit::Unit;
@@ -32,82 +27,76 @@ impl CtlManager {
     pub fn exec_ctl(cmd: Command) -> Result<(), RuntimeError> {
         // TODO:目前假设一个时刻只有一个进程使用systemdctl,后续应该使用DBus等更灵活的进程通信方式
         match cmd.operation {
-            crate::systemctl::ctl_parser::CommandOperation::ListUnits => {
-                Self::list_unit(cmd.patterns)
-            }
-            crate::systemctl::ctl_parser::CommandOperation::Start => Self::start(cmd.args.unwrap()),
-            crate::systemctl::ctl_parser::CommandOperation::Restart => {
-                Self::restart(cmd.args.unwrap(), false)
-            }
-            crate::systemctl::ctl_parser::CommandOperation::Stop => Self::stop(cmd.args.unwrap()),
-            crate::systemctl::ctl_parser::CommandOperation::Reboot => Ok(Self::reboot()),
-            crate::systemctl::ctl_parser::CommandOperation::ListSockets => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ListTimers => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Reload => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::TryRestart => {
-                Self::restart(cmd.args.unwrap(), true)
-            }
-            crate::systemctl::ctl_parser::CommandOperation::ReloadOrRestart => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ReloadOrTryRestart => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Isolate => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Kill => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::IsActive => {
+            CommandOperation::ListUnits => Self::list_unit(cmd.patterns),
+            CommandOperation::Start => Self::start(cmd.args.unwrap()),
+            CommandOperation::Restart => Self::restart(cmd.args.unwrap(), false),
+            CommandOperation::Stop => Self::stop(cmd.args.unwrap()),
+            CommandOperation::Reboot => Ok(Self::reboot()),
+            CommandOperation::ListSockets => todo!(),
+            CommandOperation::ListTimers => todo!(),
+            CommandOperation::Reload => todo!(),
+            CommandOperation::TryRestart => Self::restart(cmd.args.unwrap(), true),
+            CommandOperation::ReloadOrRestart => todo!(),
+            CommandOperation::ReloadOrTryRestart => todo!(),
+            CommandOperation::Isolate => todo!(),
+            CommandOperation::Kill => todo!(),
+            CommandOperation::IsActive => {
                 let mut patterns = cmd.patterns.clone();
                 patterns.push(Pattern::State(UnitState::Active));
                 Self::list_unit(patterns)
             }
-            crate::systemctl::ctl_parser::CommandOperation::IsFailed => {
+            CommandOperation::IsFailed => {
                 let mut patterns = cmd.patterns.clone();
                 patterns.push(Pattern::State(UnitState::Failed));
                 Self::list_unit(patterns)
             }
-            crate::systemctl::ctl_parser::CommandOperation::Status => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Show => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Cat => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::SetProperty => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Help => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ResetFailed => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ListDependencies => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ListUnitFiles => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Enable => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Disable => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Reenable => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Preset => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::PresetAll => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::IsEnabled => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Mask => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::UnMask => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Link => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::AddWants => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::AddRequires => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Edit => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::GetDefault => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::SetDefault => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ListMachines => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ListJobs => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Cancel => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Snapshot => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Delete => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ShowEnvironment => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::SetEnvironment => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::UnsetEnvironment => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::ImportEnvironment => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::DeamonReload => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::DeamonReexec => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::IsSystemRunning => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Default => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Rescue => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Emergency => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Halt => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Poweroff => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Kexec => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Exit => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::SwitchRoot => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Suspend => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::Hibernate => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::HybridSleep => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::UnSupported => todo!(),
-            crate::systemctl::ctl_parser::CommandOperation::None => {
+            CommandOperation::Status => todo!(),
+            CommandOperation::Show => todo!(),
+            CommandOperation::Cat => todo!(),
+            CommandOperation::SetProperty => todo!(),
+            CommandOperation::Help => todo!(),
+            CommandOperation::ResetFailed => todo!(),
+            CommandOperation::ListDependencies => todo!(),
+            CommandOperation::ListUnitFiles => todo!(),
+            CommandOperation::Enable => todo!(),
+            CommandOperation::Disable => todo!(),
+            CommandOperation::Reenable => todo!(),
+            CommandOperation::Preset => todo!(),
+            CommandOperation::PresetAll => todo!(),
+            CommandOperation::IsEnabled => todo!(),
+            CommandOperation::Mask => todo!(),
+            CommandOperation::UnMask => todo!(),
+            CommandOperation::Link => todo!(),
+            CommandOperation::AddWants => todo!(),
+            CommandOperation::AddRequires => todo!(),
+            CommandOperation::Edit => todo!(),
+            CommandOperation::GetDefault => todo!(),
+            CommandOperation::SetDefault => todo!(),
+            CommandOperation::ListMachines => todo!(),
+            CommandOperation::ListJobs => todo!(),
+            CommandOperation::Cancel => todo!(),
+            CommandOperation::Snapshot => todo!(),
+            CommandOperation::Delete => todo!(),
+            CommandOperation::ShowEnvironment => todo!(),
+            CommandOperation::SetEnvironment => todo!(),
+            CommandOperation::UnsetEnvironment => todo!(),
+            CommandOperation::ImportEnvironment => todo!(),
+            CommandOperation::DeamonReload => todo!(),
+            CommandOperation::DeamonReexec => todo!(),
+            CommandOperation::IsSystemRunning => todo!(),
+            CommandOperation::Default => todo!(),
+            CommandOperation::Rescue => todo!(),
+            CommandOperation::Emergency => todo!(),
+            CommandOperation::Halt => todo!(),
+            CommandOperation::Poweroff => todo!(),
+            CommandOperation::Kexec => todo!(),
+            CommandOperation::Exit => todo!(),
+            CommandOperation::SwitchRoot => todo!(),
+            CommandOperation::Suspend => todo!(),
+            CommandOperation::Hibernate => todo!(),
+            CommandOperation::HybridSleep => todo!(),
+            CommandOperation::UnSupported => todo!(),
+            CommandOperation::None => {
                 println!("No such command!");
                 return Err(RuntimeError::new(RuntimeErrorType::InvalidInput));
             }
@@ -167,10 +156,7 @@ impl CtlManager {
     }
 
     pub fn reboot() {
-        #[cfg(target_os = "dragonos")]
-        unsafe {
-            dsc::syscall!(SYS_REBOOT)
-        };
+        unsafe { libc::syscall(libc::SYS_reboot, 0, 0, 0, 0, 0, 0) };
     }
 
     pub fn restart(names: Vec<String>, is_try: bool) -> Result<(), RuntimeError> {

+ 0 - 2
src/manager/mod.rs

@@ -1,5 +1,3 @@
-use std::{eprint, eprintln, vec::Vec};
-
 pub mod ctl_manager;
 pub mod timer_manager;
 pub mod unit_manager;

+ 2 - 1
src/manager/timer_manager/mod.rs

@@ -1,6 +1,7 @@
+use std::{sync::RwLock, time::Duration};
+
 use crate::{error::runtime_error::RuntimeError, time::timer::Timer};
 use lazy_static::lazy_static;
-use std::{boxed::Box, sync::RwLock, time::Duration, vec::Vec};
 
 lazy_static! {
     // 管理全局计时器任务

+ 2 - 5
src/manager/unit_manager/mod.rs

@@ -1,11 +1,8 @@
-use std::hash::{Hash, Hasher};
 use std::{
-    collections::hash_map::DefaultHasher,
-    collections::vec_deque::VecDeque,
-    print, println,
+    collections::{hash_map::DefaultHasher, VecDeque},
+    hash::{Hash, Hasher},
     process::Child,
     sync::{Arc, Mutex, RwLock},
-    vec::Vec,
 };
 
 use crate::unit::Unit;

+ 2 - 4
src/parse/graph/mod.rs

@@ -1,12 +1,10 @@
+use std::io::BufRead;
+
 use crate::{
     error::parse_error::{ParseError, ParseErrorType},
     unit::UnitType,
 };
 
-use std::io::BufRead;
-use std::string::{String, ToString};
-use std::vec::Vec;
-
 use super::UnitParser;
 
 pub struct GraphNode {

+ 4 - 7
src/parse/mod.rs

@@ -1,3 +1,7 @@
+use std::fs::File;
+use std::io::{self, BufRead};
+use std::sync::{Arc, Mutex};
+
 use crate::error::parse_error::ParseErrorType;
 use crate::manager::UnitManager;
 use crate::unit::timer::TimerUnitAttr;
@@ -10,13 +14,6 @@ use crate::{
 
 use hashbrown::HashMap;
 use lazy_static::lazy_static;
-use std::format;
-use std::fs::File;
-use std::io::{self, BufRead};
-use std::string::String;
-use std::string::ToString;
-use std::sync::{Arc, Mutex};
-use std::vec::Vec;
 
 use self::parse_service::ServiceParser;
 use self::parse_target::TargetParser;

+ 0 - 2
src/parse/parse_service/mod.rs

@@ -4,8 +4,6 @@ use super::parse_util::UnitParseUtil;
 use crate::error::parse_error::ParseError;
 use crate::manager::UnitManager;
 
-use std::string::ToString;
-
 pub struct ServiceParser;
 
 impl ServiceParser {

+ 0 - 2
src/parse/parse_target/mod.rs

@@ -4,8 +4,6 @@ use super::parse_util::UnitParseUtil;
 use crate::error::parse_error::ParseError;
 use crate::manager::UnitManager;
 
-use std::string::ToString;
-
 pub struct TargetParser;
 
 impl TargetParser {

+ 3 - 6
src/parse/parse_util/mod.rs

@@ -1,3 +1,5 @@
+use std::{fs, io::BufRead, os::unix::fs::PermissionsExt, path::Path};
+
 use crate::{
     contants::{AF_INET, AF_INET6, IPV4_MIN_MTU, IPV6_MIN_MTU, PRIO_MAX, PRIO_MIN},
     error::{parse_error::ParseError, parse_error::ParseErrorType},
@@ -6,11 +8,6 @@ use crate::{
     FileDescriptor,
 };
 
-use std::{
-    fs, io::BufRead, os::unix::prelude::PermissionsExt, path::Path, string::String,
-    string::ToString, vec, vec::Vec,
-};
-
 use super::{UnitParser, BASE_IEC, BASE_SI, SEC_UNIT_TABLE};
 
 #[allow(dead_code)]
@@ -691,7 +688,7 @@ impl UnitParseUtil {
         return false;
     }
 
-    ///// ## 通过文件名解析该Unit的类型
+    /// ## 通过文件名解析该Unit的类型
     pub fn parse_type(path: &str) -> UnitType {
         let ret: &str;
         if let Some(index) = path.rfind('.') {

+ 0 - 4
src/systemctl/ctl_parser/mod.rs

@@ -3,10 +3,6 @@ use crate::parse::parse_util::UnitParseUtil;
 use crate::unit::{UnitState, UnitType};
 use hashbrown::HashMap;
 use lazy_static::lazy_static;
-use std::format;
-use std::string::String;
-use std::string::ToString;
-use std::vec::Vec;
 
 use super::listener::Command;
 

+ 2 - 4
src/systemctl/listener/mod.rs

@@ -1,11 +1,9 @@
-use lazy_static::lazy_static;
 use std::fs::{self, File};
 use std::io::Read;
 use std::os::fd::FromRawFd;
-use std::string::String;
 use std::sync::{Arc, Mutex};
-use std::vec::Vec;
-use std::{eprint, eprintln, libc};
+
+use lazy_static::lazy_static;
 
 use crate::error::ErrorFormat;
 use crate::manager::ctl_manager::CtlManager;

+ 1 - 1
src/task/cmdtask/mod.rs

@@ -1,4 +1,4 @@
-use std::{eprint, eprintln, print, process::Command, string::String, vec::Vec};
+use std::process::Command;
 
 use crate::{
     error::runtime_error::{RuntimeError, RuntimeErrorType},

+ 0 - 2
src/time/timer/mod.rs

@@ -1,6 +1,4 @@
-use std::boxed::Box;
 use std::time::{Duration, Instant};
-use std::{print, println};
 
 use crate::error::runtime_error::RuntimeError;
 

+ 4 - 17
src/unit/mod.rs

@@ -1,6 +1,7 @@
-use std::format;
-
-use std::string::ToString;
+use std::any::Any;
+use std::fmt::Debug;
+use std::sync::atomic::AtomicUsize;
+use std::sync::atomic::Ordering;
 
 use crate::error::parse_error::ParseError;
 use crate::error::parse_error::ParseErrorType;
@@ -10,20 +11,6 @@ use crate::executor::ExitStatus;
 use crate::parse::parse_util::UnitParseUtil;
 use crate::parse::Segment;
 
-use std::any::Any;
-use std::default::Default;
-use std::fmt::Debug;
-use std::marker::{Send, Sized, Sync};
-
-use std::result::Result;
-use std::result::Result::Err;
-use std::result::Result::Ok;
-use std::string::String;
-use std::sync::atomic::AtomicUsize;
-use std::sync::atomic::Ordering;
-
-use std::vec::Vec;
-
 pub mod service;
 pub mod target;
 pub mod timer;

+ 0 - 3
src/unit/service/mod.rs

@@ -9,9 +9,6 @@ use crate::parse::parse_util::UnitParseUtil;
 use crate::parse::{Segment, SERVICE_UNIT_ATTR_TABLE};
 use crate::task::cmdtask::CmdTask;
 
-use std::string::{String, ToString};
-
-use std::vec::Vec;
 #[derive(Clone, Debug)]
 pub struct ServiceUnit {
     unit_base: BaseUnit,

+ 0 - 2
src/unit/target/mod.rs

@@ -5,8 +5,6 @@ use crate::parse::Segment;
 
 use core::result::Result::{self, Ok};
 
-use std::marker::{Send, Sized, Sync};
-
 #[derive(Debug, Clone, Default)]
 pub struct TargetUnit {
     unit_base: BaseUnit,

+ 0 - 12
systemctl/.cargo/config.toml

@@ -1,12 +0,0 @@
-[build]
-target = "../x86_64-unknown-dragonos.json"
-
-[unstable]
-build-std = ["core", "compiler_builtins", "alloc"]
-build-std-features = ["compiler-builtins-mem"]
-
-[target.'cfg(target_os = "dragonos")']
-rustflags = [
-  "-C", "target-feature=+crt-static",
-  "-C", "link-arg=-no-pie",
-]

+ 1 - 2
systemctl/.gitignore

@@ -1,2 +1 @@
-/target
-Cargo.lock
+/target/

+ 0 - 16
systemctl/Cargo.toml

@@ -1,16 +0,0 @@
-[package]
-name = "systemctl"
-version = "0.1.0"
-edition = "2021"
-
-[[bin]]
-name = "systemctl"
-path = "src/main.rs"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-cfg-if = { version = "1.0"}
-
-[target.'cfg(target_os = "dragonos")'.dependencies]
-drstd = {git = "https://github.com/DragonOS-Community/drstd.git", revision = "8b1e314e01"}

+ 0 - 34
systemctl/Makefile

@@ -1,34 +0,0 @@
-export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
-export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
-
-OUTPUT_DIR = $(DADK_BUILD_CACHE_DIR_DRAGONREACH_0_1_0)
-REACH_BIN_DIR=$(OUTPUT_DIR)/bin/
-TMP_INSTALL_DIR=$(OUTPUT_DIR)/tmp_install
-
-all: build
-
-build:
-	cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target ../x86_64-unknown-dragonos.json --release
-
-install:
-	mkdir -p $(TMP_INSTALL_DIR)
-	mkdir -p $(REACH_BIN_DIR)
-
-	cargo -Z build-std=core,alloc,compiler_builtins install --target $(TARGET) --path .  --root $(TMP_INSTALL_DIR)
-	mv $(TMP_INSTALL_DIR)/bin/systemctl $(REACH_BIN_DIR)/systemctl
-	rm -rf $(TMP_INSTALL_DIR)
-
-build-linux:
-	cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins build --target x86_64-unknown-linux-gnu
-
-clean:
-	cargo clean
-
-fmt:
-	cargo fmt
-
-fmt-check:
-	cargo fmt --check
-
-check:
-	cargo +nightly-2023-08-15 -Z build-std=core,alloc,compiler_builtins check --workspace --message-format=json --target ../x86_64-unknown-dragonos.json

+ 3 - 36
systemctl/src/main.rs

@@ -1,22 +1,8 @@
-#![no_std]
-#![no_main]
-
-#[cfg(target_os = "dragonos")]
-extern crate drstd as std;
-
-use std::fs::File;
-use std::libc::c_str::CString;
-use std::os::fd::FromRawFd;
-use std::{env, libc};
-use std::{string::String, vec::Vec};
+use std::{env, fs::File, io::Write};
 
 const REACH_PIPE_PATH: &str = "/etc/reach/ipc/ctl";
 
-#[cfg(target_os = "dragonos")]
-#[no_mangle]
 fn main() {
-    use std::{eprint, eprintln, format, io::Write};
-
     let mut args: Vec<String> = env::args().collect();
 
     if args.len() <= 2 {
@@ -32,27 +18,8 @@ fn main() {
         msg = format!("{} {}", msg, arg);
     }
 
-    if let Err(err) = get_writer().write_all(msg.as_bytes()) {
+    let mut file = File::open(REACH_PIPE_PATH).unwrap();
+    if let Err(err) = file.write_all(msg.as_bytes()) {
         eprintln!("write error {}", err);
     }
 }
-
-#[cfg(not(target_os = "dragonos"))]
-fn main() {}
-
-fn get_writer() -> File {
-    let fd = unsafe { libc::open(ctl_path().as_ptr(), libc::O_WRONLY) };
-
-    unsafe { File::from_raw_fd(fd) }
-}
-
-#[allow(dead_code)]
-fn get_reader() -> File {
-    let fd = unsafe { libc::open(ctl_path().as_ptr(), libc::O_RDONLY) };
-
-    unsafe { File::from_raw_fd(fd) }
-}
-
-fn ctl_path() -> CString {
-    CString::new(REACH_PIPE_PATH).expect("create pipe path CString error")
-}

+ 0 - 35
x86_64-unknown-dragonos.json

@@ -1,35 +0,0 @@
-{
-    "arch": "x86_64",
-    "code-model": "kernel",
-    "cpu": "x86-64",
-    "os": "dragonos",
-    "target-endian": "little",
-    "target-pointer-width": "64",
-    "target-family": [
-        "unix"
-    ],
-    "env": "musl",
-    "target-c-int-width": "32",
-    "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128",
-    "disable-redzone": true,
-    "features": "-3dnow,-3dnowa,-avx,-avx2",
-    "linker": "rust-lld",
-    "linker-flavor": "ld.lld",
-    "llvm-target": "x86_64-unknown-none",
-    "max-atomic-width": 64,
-    "panic-strategy": "abort",
-    "position-independent-executables": true,
-    "relro-level": "full",
-    "stack-probes": {
-        "kind": "inline-or-call",
-        "min-llvm-version-for-inline": [
-            16,
-            0,
-            0
-        ]
-    },
-    "static-position-independent-executables": true,
-    "supported-sanitizers": [
-        "kcfi"
-    ]
-}