From e538cc6b8ba22bc8c57e7016e1b29c9ee7f23e3c Mon Sep 17 00:00:00 2001 From: pointer-to-bios Date: Thu, 12 Sep 2024 07:28:31 +0800 Subject: [PATCH] start --- .cargo/config.toml | 20 ++++++++++++++++++++ .gitignore | 1 + .vscode/settings.json | 7 +++++++ Cargo.lock | 7 +++++++ Cargo.toml | 16 ++++++++++++++++ build.rs | 30 ++++++++++++++++++++++++++++++ src/kernel_end.ll | 1 + src/lib.rs | 13 +++++++++++++ src/memm/manager.rs | 0 src/memm/mod.rs | 0 src/plugin/api_bus.rs | 6 ++++++ src/plugin/mod.rs | 1 + 12 files changed, 102 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 build.rs create mode 100644 src/kernel_end.ll create mode 100644 src/lib.rs create mode 100644 src/memm/manager.rs create mode 100644 src/memm/mod.rs create mode 100644 src/plugin/api_bus.rs create mode 100644 src/plugin/mod.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..fbff60b --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,20 @@ +[alias] +b = "build" +br = "build --release" +c = "check" +t = "test" +r = "run" +rr = "run --release" + +[build] +incremental = true +pipelining = true +rustflags = [ + "-C", "code-model=large", + "-C", "relocation-model=static", + "-C", "embed-bitcode=no" +] +target = ["x86_64-unknown-none"] + +[profile.x86_64-unknown-none] +panic = "abort" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cb0449c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "rust-analyzer.cargo.allTargets": false, + "rust-analyzer.cargo.extraArgs": [ + "--target", + "x86_64-unknown-none" + ] +} diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..04727f6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "nonx" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..3e7a059 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "nonx" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[features] +default = ["large"] +large = [] # Enable for server or desktop devices. +small = [] # Enable for legacy server or desktop devices. +embeded = [] # Enable for embeded devices and extremely old devices. + +[lib] +crate-type = ["staticlib"] +test = false diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..8d9454b --- /dev/null +++ b/build.rs @@ -0,0 +1,30 @@ +use std::{env, path::Path, process::Command}; + +fn main() { + let out_dir = env::var("OUT_DIR").unwrap(); + Command::new("llvm-as") + .args(&["src/kernel_end.ll", "-o"]) + .arg(&format!("{}/kernel_end.bc", out_dir)) + .status() + .unwrap(); + Command::new("llc") + .arg(&format!("{}/kernel_end.bc", out_dir)) + .arg("-o") + .arg(&format!("{}/kernel_end.s", out_dir)) + .status() + .unwrap(); + Command::new("as") + .arg("-o") + .arg(&format!("{}/kernel_end.o", out_dir)) + .arg(&format!("{}/kernel_end.s", out_dir)) + .status() + .unwrap(); + Command::new("ar") + .args(&["crus", "libkernel_end.a", "kernel_end.o"]) + .current_dir(&Path::new(&out_dir)) + .status() + .unwrap(); + println!("cargo::rustc-link-search=native={}", out_dir); + println!("cargo::rustc-link-lib=static=kernel_end"); + println!("cargo::rerun-if-changed=src/kernel_end.ll"); +} diff --git a/src/kernel_end.ll b/src/kernel_end.ll new file mode 100644 index 0000000..7d20171 --- /dev/null +++ b/src/kernel_end.ll @@ -0,0 +1 @@ +@KERNEL_END = global i32 0, section ".kernel-end" diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..24e4ea8 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,13 @@ +#![no_std] + +extern crate alloc; + +use core::panic::PanicInfo; + +pub mod memm; +pub mod plugin; + +#[panic_handler] +fn panic_handler(_panic: &PanicInfo) -> ! { + loop {} +} diff --git a/src/memm/manager.rs b/src/memm/manager.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/memm/mod.rs b/src/memm/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/plugin/api_bus.rs b/src/plugin/api_bus.rs new file mode 100644 index 0000000..0c9f54f --- /dev/null +++ b/src/plugin/api_bus.rs @@ -0,0 +1,6 @@ +use alloc::string::String; + +struct APIRegister{ + name: String, + call: *mut fn(), +} diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs new file mode 100644 index 0000000..a355c48 --- /dev/null +++ b/src/plugin/mod.rs @@ -0,0 +1 @@ +pub mod api_bus; \ No newline at end of file