From a21f6fb944b1caca3c68f892a69d0b1ad6903777 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 11:46:36 +0800 Subject: [PATCH 01/10] reconstructed files' structure --- .gitignore | 1 + {os => kernel}/.cargo/config.toml | 0 {os => kernel}/Cargo.lock | 26 ++++++++-------- {os => kernel}/Cargo.toml | 2 +- {os => kernel}/Makefile | 0 {os => kernel}/build.rs | 0 {os => kernel}/rust-analyzer.toml | 0 {os => kernel}/rust_objcopy.sh | 0 {os => kernel}/src/boards/qemu.rs | 0 {os => kernel}/src/config.rs | 0 {os => kernel}/src/console.rs | 0 {os => kernel}/src/entry.asm | 0 {os => kernel}/src/lang_items.rs | 0 kernel/src/link_app.S | 39 ++++++++++++++++++++++++ {os => kernel}/src/linker-qemu.ld | 0 {os => kernel}/src/loader.rs | 0 {os => kernel}/src/logging.rs | 0 {os => kernel}/src/main.rs | 4 +-- {os => kernel}/src/mm/address.rs | 0 {os => kernel}/src/mm/frame_allocator.rs | 0 {os => kernel}/src/mm/heap_allocator.rs | 0 {os => kernel}/src/mm/memory_set.rs | 0 {os => kernel}/src/mm/mod.rs | 0 {os => kernel}/src/mm/page_table.rs | 0 {os => kernel}/src/sbi.rs | 0 {os => kernel}/src/sync/mod.rs | 0 {os => kernel}/src/sync/up.rs | 0 {os => kernel}/src/syscall/fs.rs | 0 {os => kernel}/src/syscall/mod.rs | 0 {os => kernel}/src/syscall/process.rs | 0 {os => kernel}/src/task/context.rs | 0 {os => kernel}/src/task/mod.rs | 0 {os => kernel}/src/task/switch.S | 0 {os => kernel}/src/task/switch.rs | 0 {os => kernel}/src/task/task.rs | 0 {os => kernel}/src/timer.rs | 0 {os => kernel}/src/trap/context.rs | 0 {os => kernel}/src/trap/mod.rs | 0 {os => kernel}/src/trap/trap.S | 0 39 files changed, 56 insertions(+), 16 deletions(-) rename {os => kernel}/.cargo/config.toml (100%) rename {os => kernel}/Cargo.lock (99%) rename {os => kernel}/Cargo.toml (95%) rename {os => kernel}/Makefile (100%) rename {os => kernel}/build.rs (100%) rename {os => kernel}/rust-analyzer.toml (100%) rename {os => kernel}/rust_objcopy.sh (100%) rename {os => kernel}/src/boards/qemu.rs (100%) rename {os => kernel}/src/config.rs (100%) rename {os => kernel}/src/console.rs (100%) rename {os => kernel}/src/entry.asm (100%) rename {os => kernel}/src/lang_items.rs (100%) create mode 100644 kernel/src/link_app.S rename {os => kernel}/src/linker-qemu.ld (100%) rename {os => kernel}/src/loader.rs (100%) rename {os => kernel}/src/logging.rs (100%) rename {os => kernel}/src/main.rs (94%) rename {os => kernel}/src/mm/address.rs (100%) rename {os => kernel}/src/mm/frame_allocator.rs (100%) rename {os => kernel}/src/mm/heap_allocator.rs (100%) rename {os => kernel}/src/mm/memory_set.rs (100%) rename {os => kernel}/src/mm/mod.rs (100%) rename {os => kernel}/src/mm/page_table.rs (100%) rename {os => kernel}/src/sbi.rs (100%) rename {os => kernel}/src/sync/mod.rs (100%) rename {os => kernel}/src/sync/up.rs (100%) rename {os => kernel}/src/syscall/fs.rs (100%) rename {os => kernel}/src/syscall/mod.rs (100%) rename {os => kernel}/src/syscall/process.rs (100%) rename {os => kernel}/src/task/context.rs (100%) rename {os => kernel}/src/task/mod.rs (100%) rename {os => kernel}/src/task/switch.S (100%) rename {os => kernel}/src/task/switch.rs (100%) rename {os => kernel}/src/task/task.rs (100%) rename {os => kernel}/src/timer.rs (100%) rename {os => kernel}/src/trap/context.rs (100%) rename {os => kernel}/src/trap/mod.rs (100%) rename {os => kernel}/src/trap/trap.S (100%) diff --git a/.gitignore b/.gitignore index b618fef..ebc645d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /.nix-tools /.direnv /os/src/linker.ld +/kernel/target diff --git a/os/.cargo/config.toml b/kernel/.cargo/config.toml similarity index 100% rename from os/.cargo/config.toml rename to kernel/.cargo/config.toml diff --git a/os/Cargo.lock b/kernel/Cargo.lock similarity index 99% rename from os/Cargo.lock rename to kernel/Cargo.lock index a737b60..834cbc9 100644 --- a/os/Cargo.lock +++ b/kernel/Cargo.lock @@ -41,6 +41,19 @@ dependencies = [ "spin 0.7.1", ] +[[package]] +name = "kernel" +version = "0.1.0" +dependencies = [ + "bitflags", + "buddy_system_allocator", + "lazy_static", + "log", + "riscv", + "sbi-rt", + "xmas-elf", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -62,19 +75,6 @@ version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" -[[package]] -name = "os" -version = "0.1.0" -dependencies = [ - "bitflags", - "buddy_system_allocator", - "lazy_static", - "log", - "riscv", - "sbi-rt", - "xmas-elf", -] - [[package]] name = "regex" version = "1.12.3" diff --git a/os/Cargo.toml b/kernel/Cargo.toml similarity index 95% rename from os/Cargo.toml rename to kernel/Cargo.toml index 4f65901..86778d7 100644 --- a/os/Cargo.toml +++ b/kernel/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "os" +name = "kernel" version = "0.1.0" edition = "2024" diff --git a/os/Makefile b/kernel/Makefile similarity index 100% rename from os/Makefile rename to kernel/Makefile diff --git a/os/build.rs b/kernel/build.rs similarity index 100% rename from os/build.rs rename to kernel/build.rs diff --git a/os/rust-analyzer.toml b/kernel/rust-analyzer.toml similarity index 100% rename from os/rust-analyzer.toml rename to kernel/rust-analyzer.toml diff --git a/os/rust_objcopy.sh b/kernel/rust_objcopy.sh similarity index 100% rename from os/rust_objcopy.sh rename to kernel/rust_objcopy.sh diff --git a/os/src/boards/qemu.rs b/kernel/src/boards/qemu.rs similarity index 100% rename from os/src/boards/qemu.rs rename to kernel/src/boards/qemu.rs diff --git a/os/src/config.rs b/kernel/src/config.rs similarity index 100% rename from os/src/config.rs rename to kernel/src/config.rs diff --git a/os/src/console.rs b/kernel/src/console.rs similarity index 100% rename from os/src/console.rs rename to kernel/src/console.rs diff --git a/os/src/entry.asm b/kernel/src/entry.asm similarity index 100% rename from os/src/entry.asm rename to kernel/src/entry.asm diff --git a/os/src/lang_items.rs b/kernel/src/lang_items.rs similarity index 100% rename from os/src/lang_items.rs rename to kernel/src/lang_items.rs diff --git a/kernel/src/link_app.S b/kernel/src/link_app.S new file mode 100644 index 0000000..34d5e98 --- /dev/null +++ b/kernel/src/link_app.S @@ -0,0 +1,39 @@ + + .align 3 + .section .data + .global _num_app + _num_app: + .quad 4 + .quad app_0_start + .quad app_1_start + .quad app_2_start + .quad app_3_start + .quad app_3_end + + .section .data + .global app_0_start + .global app_0_end + app_0_start: + .incbin "../user/target/riscv64gc-unknown-none-elf/release/00power_3" + app_0_end: + + .section .data + .global app_1_start + .global app_1_end + app_1_start: + .incbin "../user/target/riscv64gc-unknown-none-elf/release/01power_5" + app_1_end: + + .section .data + .global app_2_start + .global app_2_end + app_2_start: + .incbin "../user/target/riscv64gc-unknown-none-elf/release/02power_7" + app_2_end: + + .section .data + .global app_3_start + .global app_3_end + app_3_start: + .incbin "../user/target/riscv64gc-unknown-none-elf/release/03sleep" + app_3_end: diff --git a/os/src/linker-qemu.ld b/kernel/src/linker-qemu.ld similarity index 100% rename from os/src/linker-qemu.ld rename to kernel/src/linker-qemu.ld diff --git a/os/src/loader.rs b/kernel/src/loader.rs similarity index 100% rename from os/src/loader.rs rename to kernel/src/loader.rs diff --git a/os/src/logging.rs b/kernel/src/logging.rs similarity index 100% rename from os/src/logging.rs rename to kernel/src/logging.rs diff --git a/os/src/main.rs b/kernel/src/main.rs similarity index 94% rename from os/src/main.rs rename to kernel/src/main.rs index f99fa61..8c97bfa 100644 --- a/os/src/main.rs +++ b/kernel/src/main.rs @@ -98,8 +98,8 @@ pub fn rust_main() -> ! { // TODO: // 7.19,20;继续排除问题重构代码让上面这两个函数的调用链正常,遇到必要时,重构代码和写测试代码 // 重构代码,参考framework kernel,分离safe rust和unsafe rust; - // 给孙班主任分享想法(重构framework kernel后,录制演示视频) - // 关键给孙老师直接录制演示视频,写一个架构介绍去咨询意见 + // 分享想法(重构framework kernel后,录制演示视频) + // 直接录制演示视频,写一个架构介绍去咨询意见 mm::init(); trap::init(); // setup the kernel trap trap::enable_timer_interrupt(); diff --git a/os/src/mm/address.rs b/kernel/src/mm/address.rs similarity index 100% rename from os/src/mm/address.rs rename to kernel/src/mm/address.rs diff --git a/os/src/mm/frame_allocator.rs b/kernel/src/mm/frame_allocator.rs similarity index 100% rename from os/src/mm/frame_allocator.rs rename to kernel/src/mm/frame_allocator.rs diff --git a/os/src/mm/heap_allocator.rs b/kernel/src/mm/heap_allocator.rs similarity index 100% rename from os/src/mm/heap_allocator.rs rename to kernel/src/mm/heap_allocator.rs diff --git a/os/src/mm/memory_set.rs b/kernel/src/mm/memory_set.rs similarity index 100% rename from os/src/mm/memory_set.rs rename to kernel/src/mm/memory_set.rs diff --git a/os/src/mm/mod.rs b/kernel/src/mm/mod.rs similarity index 100% rename from os/src/mm/mod.rs rename to kernel/src/mm/mod.rs diff --git a/os/src/mm/page_table.rs b/kernel/src/mm/page_table.rs similarity index 100% rename from os/src/mm/page_table.rs rename to kernel/src/mm/page_table.rs diff --git a/os/src/sbi.rs b/kernel/src/sbi.rs similarity index 100% rename from os/src/sbi.rs rename to kernel/src/sbi.rs diff --git a/os/src/sync/mod.rs b/kernel/src/sync/mod.rs similarity index 100% rename from os/src/sync/mod.rs rename to kernel/src/sync/mod.rs diff --git a/os/src/sync/up.rs b/kernel/src/sync/up.rs similarity index 100% rename from os/src/sync/up.rs rename to kernel/src/sync/up.rs diff --git a/os/src/syscall/fs.rs b/kernel/src/syscall/fs.rs similarity index 100% rename from os/src/syscall/fs.rs rename to kernel/src/syscall/fs.rs diff --git a/os/src/syscall/mod.rs b/kernel/src/syscall/mod.rs similarity index 100% rename from os/src/syscall/mod.rs rename to kernel/src/syscall/mod.rs diff --git a/os/src/syscall/process.rs b/kernel/src/syscall/process.rs similarity index 100% rename from os/src/syscall/process.rs rename to kernel/src/syscall/process.rs diff --git a/os/src/task/context.rs b/kernel/src/task/context.rs similarity index 100% rename from os/src/task/context.rs rename to kernel/src/task/context.rs diff --git a/os/src/task/mod.rs b/kernel/src/task/mod.rs similarity index 100% rename from os/src/task/mod.rs rename to kernel/src/task/mod.rs diff --git a/os/src/task/switch.S b/kernel/src/task/switch.S similarity index 100% rename from os/src/task/switch.S rename to kernel/src/task/switch.S diff --git a/os/src/task/switch.rs b/kernel/src/task/switch.rs similarity index 100% rename from os/src/task/switch.rs rename to kernel/src/task/switch.rs diff --git a/os/src/task/task.rs b/kernel/src/task/task.rs similarity index 100% rename from os/src/task/task.rs rename to kernel/src/task/task.rs diff --git a/os/src/timer.rs b/kernel/src/timer.rs similarity index 100% rename from os/src/timer.rs rename to kernel/src/timer.rs diff --git a/os/src/trap/context.rs b/kernel/src/trap/context.rs similarity index 100% rename from os/src/trap/context.rs rename to kernel/src/trap/context.rs diff --git a/os/src/trap/mod.rs b/kernel/src/trap/mod.rs similarity index 100% rename from os/src/trap/mod.rs rename to kernel/src/trap/mod.rs diff --git a/os/src/trap/trap.S b/kernel/src/trap/trap.S similarity index 100% rename from os/src/trap/trap.S rename to kernel/src/trap/trap.S From 3d731dcf2a90c27987c0958c2abfcf2a85a72478 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 11:57:52 +0800 Subject: [PATCH 02/10] add gitignore --- .gitignore | 7 +++++++ framework/Cargo.toml | 6 ++++++ framework/src/main.rs | 3 +++ 3 files changed, 16 insertions(+) create mode 100644 framework/Cargo.toml create mode 100644 framework/src/main.rs diff --git a/.gitignore b/.gitignore index ebc645d..20ff6a6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,10 @@ /.direnv /os/src/linker.ld /kernel/target + + +# Added by cargo +# +# already existing elements were commented out + +#/target diff --git a/framework/Cargo.toml b/framework/Cargo.toml new file mode 100644 index 0000000..efeb12f --- /dev/null +++ b/framework/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "framework" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/framework/src/main.rs b/framework/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/framework/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} From 72df3887adb95427b6cd2c1e7e142422b5a75d55 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 12:05:45 +0800 Subject: [PATCH 03/10] reconstructed! --- .github/workflows/CI.yml | 2 +- Cargo.toml | 7 +++++++ Makefile | 3 ++- flake.nix | 2 +- kernel/build.rs | 2 +- kernel/rust_objcopy.sh | 2 +- run_tcp_off.sh | 4 ++-- run_tcp_on.sh | 4 ++-- tcp_gdb_on.sh | 2 +- 9 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 Cargo.toml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index bd45416..8f48f35 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,5 +16,5 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@v8 - name: kernel test - run: nix develop --command bash -c "cd os && make run" + run: nix develop --command bash -c "make" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..3bf9eff --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +resolver = "2" +members = [ + "kernel", + "user", + "framework", +] diff --git a/Makefile b/Makefile index 3245a05..88dc52b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ all: - cd os ; cargo build; + cd user && cargo build --release + cd kernel && cargo build --release run: ./run_tcp_off.sh diff --git a/flake.nix b/flake.nix index 0898b31..e1aaf14 100644 --- a/flake.nix +++ b/flake.nix @@ -31,7 +31,7 @@ echo " Rust: rust-toolchain.toml (auto-installs on first cargo run)" echo " QEMU: qemu-system-riscv64" echo " GDB: gdb" - echo " Build: cd os && make run" + echo " Build: make" echo "" ''; }; diff --git a/kernel/build.rs b/kernel/build.rs index 12afb5e..5cc26ce 100644 --- a/kernel/build.rs +++ b/kernel/build.rs @@ -7,7 +7,7 @@ fn main() { insert_app_data().unwrap(); } -static TARGET_PATH: &str = "../user/target/riscv64gc-unknown-none-elf/release/"; +static TARGET_PATH: &str = "../target/riscv64gc-unknown-none-elf/release/"; fn insert_app_data() -> Result<()> { let mut f = File::create("src/link_app.S").unwrap(); diff --git a/kernel/rust_objcopy.sh b/kernel/rust_objcopy.sh index 3d96c3e..8060682 100755 --- a/kernel/rust_objcopy.sh +++ b/kernel/rust_objcopy.sh @@ -2,4 +2,4 @@ SYSROOT=$(rustc --print sysroot) HOST=$(rustc -vV | sed -n 's/^host: //p') LLVM_OBJCOPY="$SYSROOT/lib/rustlib/$HOST/bin/llvm-objcopy" -$LLVM_OBJCOPY --strip-all target/riscv64gc-unknown-none-elf/release/os -O binary target/riscv64gc-unknown-none-elf/release/os.bin +$LLVM_OBJCOPY --strip-all target/riscv64gc-unknown-none-elf/release/kernel -O binary target/riscv64gc-unknown-none-elf/release/kernel.bin diff --git a/run_tcp_off.sh b/run_tcp_off.sh index e2f5285..36bb161 100755 --- a/run_tcp_off.sh +++ b/run_tcp_off.sh @@ -1,9 +1,9 @@ #!/bin/bash -cd os +cd kernel ./rust_objcopy.sh cd .. qemu-system-riscv64 \ -machine virt \ -nographic \ -bios ./bootloader/rustsbi-qemu.bin \ - -device loader,file=./os/target/riscv64gc-unknown-none-elf/release/os.bin,addr=0x80200000 + -device loader,file=./kernel/target/riscv64gc-unknown-none-elf/release/kernel.bin,addr=0x80200000 diff --git a/run_tcp_on.sh b/run_tcp_on.sh index 35e4c6a..2ffca3b 100755 --- a/run_tcp_on.sh +++ b/run_tcp_on.sh @@ -1,12 +1,12 @@ #!/bin/bash echo "' x' to exit" -cd os +cd kernel ./rust_objcopy.sh cd .. qemu-system-riscv64 \ -machine virt \ -nographic \ -bios ./bootloader/rustsbi-qemu.bin \ - -device loader,file=./os/target/riscv64gc-unknown-none-elf/release/os.bin,addr=0x80200000 \ + -device loader,file=./kernel/target/riscv64gc-unknown-none-elf/release/kernel.bin,addr=0x80200000 \ -s -S diff --git a/tcp_gdb_on.sh b/tcp_gdb_on.sh index c116db5..76a98ad 100755 --- a/tcp_gdb_on.sh +++ b/tcp_gdb_on.sh @@ -1,5 +1,5 @@ #!/bin/bash gdb \ - -ex 'file os/target/riscv64gc-unknown-none-elf/release/os' \ + -ex 'file kernel/target/riscv64gc-unknown-none-elf/release/kernel' \ -ex 'set arch riscv:rv64' \ -ex 'target remote localhost:1234' From 6bd38b1f6aacb8587d6e07fe1267f70dad0ff024 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 12:28:57 +0800 Subject: [PATCH 04/10] reconstructed --- {kernel/.cargo => .cargo}/config.toml | 3 +- .gitignore | 1 + kernel/Cargo.lock => Cargo.lock | 39 ++++---- Cargo.toml | 25 +++++ Makefile | 16 +++- flake.nix | 4 +- framework/Cargo.toml | 7 +- kernel/Cargo.toml | 22 ++--- kernel/build.rs | 25 +++-- kernel/rust_objcopy.sh | 5 - kernel/src/link_app.S | 8 +- run_tcp_off.sh | 9 -- run_tcp_on.sh | 12 --- tcp_gdb_on.sh | 5 - tools/gdb_client.sh | 5 + tools/run_qemu.sh | 24 +++++ user/.cargo/config.toml | 7 -- user/Cargo.lock | 133 -------------------------- user/Cargo.toml | 16 +--- user/build.rs | 3 + 20 files changed, 142 insertions(+), 227 deletions(-) rename {kernel/.cargo => .cargo}/config.toml (61%) rename kernel/Cargo.lock => Cargo.lock (85%) delete mode 100755 kernel/rust_objcopy.sh delete mode 100755 run_tcp_off.sh delete mode 100755 run_tcp_on.sh delete mode 100755 tcp_gdb_on.sh create mode 100755 tools/gdb_client.sh create mode 100755 tools/run_qemu.sh delete mode 100644 user/.cargo/config.toml delete mode 100644 user/Cargo.lock create mode 100644 user/build.rs diff --git a/kernel/.cargo/config.toml b/.cargo/config.toml similarity index 61% rename from kernel/.cargo/config.toml rename to .cargo/config.toml index 4275fca..b6ffeda 100644 --- a/kernel/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,5 +3,6 @@ target = "riscv64gc-unknown-none-elf" [target.riscv64gc-unknown-none-elf] rustflags = [ - "-Clink-arg=-Tsrc/linker.ld", "-Cforce-frame-pointers=yes" + "-Cforce-frame-pointers=yes" ] +runner = "tools/run_qemu.sh" diff --git a/.gitignore b/.gitignore index 20ff6a6..e42409c 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ # already existing elements were commented out #/target +/kernel/src/link_app.S diff --git a/kernel/Cargo.lock b/Cargo.lock similarity index 85% rename from kernel/Cargo.lock rename to Cargo.lock index 834cbc9..4b10805 100644 --- a/kernel/Cargo.lock +++ b/Cargo.lock @@ -38,7 +38,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4e85e760e105b46ae0bd1236578793c6c147ae7463fe95c8350296b8bfcb830" dependencies = [ - "spin 0.7.1", + "spin 0.7.2", ] [[package]] @@ -60,26 +60,26 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", + "spin 0.9.9", ] [[package]] name = "log" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -100,9 +100,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "riscv" @@ -170,15 +170,15 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "spin" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13287b4da9d1207a4f4929ac390916d64eacfe236a487e9a9f5b3be392be5162" +checksum = "9335ac53859132805f619b68dab9229ec74e45ad9c92d5edca2a80240806eb65" [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" [[package]] name = "static_assertions" @@ -186,6 +186,13 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "user_lib" +version = "0.1.0" +dependencies = [ + "riscv", +] + [[package]] name = "xmas-elf" version = "0.7.0" diff --git a/Cargo.toml b/Cargo.toml index 3bf9eff..7c676c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,5 +3,30 @@ resolver = "2" members = [ "kernel", "user", +] +exclude = [ "framework", ] + +[workspace.package] +version = "0.1.0" +edition = "2024" + +[workspace.dependencies] +riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] } +lazy_static = { version = "1.4.0", features = ["spin_no_std"] } +log = "0.4" +xmas-elf = "0.7.0" +sbi-rt = { version = "0.0.2", features = ["legacy"] } +buddy_system_allocator = "0.6" +bitflags = "1.2.1" + +[workspace.lints.rust] +redundant_imports = "warn" +unused_qualifications = "warn" + +[workspace.lints.clippy] +allow_attributes = "warn" + +[profile.release] +debug = true diff --git a/Makefile b/Makefile index 88dc52b..43e321f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,15 @@ all: - cd user && cargo build --release - cd kernel && cargo build --release + cargo build -p user_lib --release + cargo build -p kernel --release + run: - ./run_tcp_off.sh + cargo run -p kernel --release + +debug: + RACHO_GDB=1 cargo run -p kernel --release + +gdb_client: + ./tools/gdb_client.sh + +clean: + cargo clean diff --git a/flake.nix b/flake.nix index e1aaf14..8b84df3 100644 --- a/flake.nix +++ b/flake.nix @@ -31,7 +31,9 @@ echo " Rust: rust-toolchain.toml (auto-installs on first cargo run)" echo " QEMU: qemu-system-riscv64" echo " GDB: gdb" - echo " Build: make" + echo " Build: cargo build -p user_lib --release && cargo run -p kernel --release" + echo " Debug: RACHO_GDB=1 cargo run -p kernel --release" + echo " GDB: ./tools/gdb_client.sh" echo "" ''; }; diff --git a/framework/Cargo.toml b/framework/Cargo.toml index efeb12f..1162d03 100644 --- a/framework/Cargo.toml +++ b/framework/Cargo.toml @@ -1,6 +1,9 @@ [package] name = "framework" -version = "0.1.0" -edition = "2024" +version.workspace = true +edition.workspace = true [dependencies] + +[lints] +workspace = true diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 86778d7..5fd6390 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "kernel" -version = "0.1.0" -edition = "2024" +version.workspace = true +edition.workspace = true [dependencies] -riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] } -lazy_static = { version = "1.4.0", features = ["spin_no_std"] } -log = "0.4" -xmas-elf = "0.7.0" -sbi-rt = { version = "0.0.2", features = ["legacy"] } -buddy_system_allocator = "0.6" -bitflags = "1.2.1" +riscv.workspace = true +lazy_static.workspace = true +log.workspace = true +xmas-elf.workspace = true +sbi-rt.workspace = true +buddy_system_allocator.workspace = true +bitflags.workspace = true -[profile.release] -debug = true +[lints] +workspace = true diff --git a/kernel/build.rs b/kernel/build.rs index 5cc26ce..3e2be8f 100644 --- a/kernel/build.rs +++ b/kernel/build.rs @@ -1,15 +1,26 @@ use std::fs::{File, read_dir}; use std::io::{Result, Write}; +use std::path::PathBuf; fn main() { + println!("cargo:rustc-link-arg=-Tkernel/src/linker-qemu.ld"); println!("cargo:rerun-if-changed=../user/src/"); - println!("cargo:rerun-if-changed={}", TARGET_PATH); - insert_app_data().unwrap(); -} -static TARGET_PATH: &str = "../target/riscv64gc-unknown-none-elf/release/"; + let manifest_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + let target_dir = manifest_dir + .parent() + .unwrap() + .join("target") + .join("riscv64gc-unknown-none-elf") + .join("release"); + + let target_path = target_dir.to_string_lossy().into_owned(); + println!("cargo:rerun-if-changed={}", target_path); + + insert_app_data(&target_path).unwrap(); +} -fn insert_app_data() -> Result<()> { +fn insert_app_data(target_path: &str) -> Result<()> { let mut f = File::create("src/link_app.S").unwrap(); let mut apps: Vec<_> = read_dir("../user/src/bin") .unwrap() @@ -46,9 +57,9 @@ fn insert_app_data() -> Result<()> { .global app_{0}_start .global app_{0}_end app_{0}_start: - .incbin "{2}{1}" + .incbin "{1}/{2}" app_{0}_end:"#, - idx, app, TARGET_PATH + idx, target_path, app )?; } Ok(()) diff --git a/kernel/rust_objcopy.sh b/kernel/rust_objcopy.sh deleted file mode 100755 index 8060682..0000000 --- a/kernel/rust_objcopy.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -SYSROOT=$(rustc --print sysroot) -HOST=$(rustc -vV | sed -n 's/^host: //p') -LLVM_OBJCOPY="$SYSROOT/lib/rustlib/$HOST/bin/llvm-objcopy" -$LLVM_OBJCOPY --strip-all target/riscv64gc-unknown-none-elf/release/kernel -O binary target/riscv64gc-unknown-none-elf/release/kernel.bin diff --git a/kernel/src/link_app.S b/kernel/src/link_app.S index 34d5e98..6fadbf3 100644 --- a/kernel/src/link_app.S +++ b/kernel/src/link_app.S @@ -14,26 +14,26 @@ .global app_0_start .global app_0_end app_0_start: - .incbin "../user/target/riscv64gc-unknown-none-elf/release/00power_3" + .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/00power_3" app_0_end: .section .data .global app_1_start .global app_1_end app_1_start: - .incbin "../user/target/riscv64gc-unknown-none-elf/release/01power_5" + .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/01power_5" app_1_end: .section .data .global app_2_start .global app_2_end app_2_start: - .incbin "../user/target/riscv64gc-unknown-none-elf/release/02power_7" + .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/02power_7" app_2_end: .section .data .global app_3_start .global app_3_end app_3_start: - .incbin "../user/target/riscv64gc-unknown-none-elf/release/03sleep" + .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/03sleep" app_3_end: diff --git a/run_tcp_off.sh b/run_tcp_off.sh deleted file mode 100755 index 36bb161..0000000 --- a/run_tcp_off.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -cd kernel -./rust_objcopy.sh -cd .. -qemu-system-riscv64 \ - -machine virt \ - -nographic \ - -bios ./bootloader/rustsbi-qemu.bin \ - -device loader,file=./kernel/target/riscv64gc-unknown-none-elf/release/kernel.bin,addr=0x80200000 diff --git a/run_tcp_on.sh b/run_tcp_on.sh deleted file mode 100755 index 2ffca3b..0000000 --- a/run_tcp_on.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -echo "' x' to exit" -cd kernel -./rust_objcopy.sh -cd .. -qemu-system-riscv64 \ - -machine virt \ - -nographic \ - -bios ./bootloader/rustsbi-qemu.bin \ - -device loader,file=./kernel/target/riscv64gc-unknown-none-elf/release/kernel.bin,addr=0x80200000 \ - -s -S - diff --git a/tcp_gdb_on.sh b/tcp_gdb_on.sh deleted file mode 100755 index 76a98ad..0000000 --- a/tcp_gdb_on.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -gdb \ - -ex 'file kernel/target/riscv64gc-unknown-none-elf/release/kernel' \ - -ex 'set arch riscv:rv64' \ - -ex 'target remote localhost:1234' diff --git a/tools/gdb_client.sh b/tools/gdb_client.sh new file mode 100755 index 0000000..277e603 --- /dev/null +++ b/tools/gdb_client.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +gdb \ + -ex 'file kernel/target/riscv64gc-unknown-none-elf/release/kernel' \ + -ex 'set arch riscv:rv64' \ + -ex 'target remote localhost:1234' diff --git a/tools/run_qemu.sh b/tools/run_qemu.sh new file mode 100755 index 0000000..d4aa510 --- /dev/null +++ b/tools/run_qemu.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +BIN="$1" +PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)" + +SYSROOT=$(rustc --print sysroot) +HOST=$(rustc -vV | sed -n 's/^host: //p') +LLVM_OBJCOPY="$SYSROOT/lib/rustlib/$HOST/bin/llvm-objcopy" +$LLVM_OBJCOPY --strip-all "$BIN" -O binary "$BIN.bin" + +if [ "${RACHO_GDB:-0}" = "1" ]; then + echo "' x' to exit" + exec qemu-system-riscv64 \ + -machine virt \ + -nographic \ + -bios "$PROJECT_DIR/bootloader/rustsbi-qemu.bin" \ + -device loader,file="$BIN.bin",addr=0x80200000 \ + -s -S +else + exec qemu-system-riscv64 \ + -machine virt \ + -nographic \ + -bios "$PROJECT_DIR/bootloader/rustsbi-qemu.bin" \ + -device loader,file="$BIN.bin",addr=0x80200000 +fi diff --git a/user/.cargo/config.toml b/user/.cargo/config.toml deleted file mode 100644 index 334d01e..0000000 --- a/user/.cargo/config.toml +++ /dev/null @@ -1,7 +0,0 @@ -[build] -target = "riscv64gc-unknown-none-elf" - -[target.riscv64gc-unknown-none-elf] -rustflags = [ - "-Clink-args=-Tsrc/linker.ld", "-Cforce-frame-pointers=yes" -] diff --git a/user/Cargo.lock b/user/Cargo.lock deleted file mode 100644 index 17e38ab..0000000 --- a/user/Cargo.lock +++ /dev/null @@ -1,133 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "bare-metal" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" -dependencies = [ - "rustc_version", -] - -[[package]] -name = "bit_field" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "log" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" - -[[package]] -name = "memchr" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "riscv" -version = "0.6.0" -source = "git+https://github.com/rcore-os/riscv#11d43cf7cccb3b62a3caaf3e07a1db7449588f9a" -dependencies = [ - "bare-metal", - "bit_field", - "bitflags", - "log", - "riscv-target", -] - -[[package]] -name = "riscv-target" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "user_lib" -version = "0.1.0" -dependencies = [ - "riscv", -] diff --git a/user/Cargo.toml b/user/Cargo.toml index 6f9d69c..f1723dc 100644 --- a/user/Cargo.toml +++ b/user/Cargo.toml @@ -1,16 +1,10 @@ [package] name = "user_lib" -version = "0.1.0" -edition = "2024" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +version.workspace = true +edition.workspace = true [dependencies] -riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] } - -[profile.release] -debug = true +riscv.workspace = true -# [features] -# board_qemu = [] -# board_k210 = [] +[lints] +workspace = true diff --git a/user/build.rs b/user/build.rs new file mode 100644 index 0000000..7c10320 --- /dev/null +++ b/user/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rustc-link-arg=-Tuser/src/linker.ld"); +} From 164613d2602a12070dc28f5260f0016f9f21bc9f Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 12:35:06 +0800 Subject: [PATCH 05/10] ignore --- kernel/src/link_app.S | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 kernel/src/link_app.S diff --git a/kernel/src/link_app.S b/kernel/src/link_app.S deleted file mode 100644 index 6fadbf3..0000000 --- a/kernel/src/link_app.S +++ /dev/null @@ -1,39 +0,0 @@ - - .align 3 - .section .data - .global _num_app - _num_app: - .quad 4 - .quad app_0_start - .quad app_1_start - .quad app_2_start - .quad app_3_start - .quad app_3_end - - .section .data - .global app_0_start - .global app_0_end - app_0_start: - .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/00power_3" - app_0_end: - - .section .data - .global app_1_start - .global app_1_end - app_1_start: - .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/01power_5" - app_1_end: - - .section .data - .global app_2_start - .global app_2_end - app_2_start: - .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/02power_7" - app_2_end: - - .section .data - .global app_3_start - .global app_3_end - app_3_start: - .incbin "/home/shyweeds/Projects/racho/target/riscv64gc-unknown-none-elf/release/03sleep" - app_3_end: From 0cedc87796aef26f9428f3399bea0dd04d9142e8 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 12:53:33 +0800 Subject: [PATCH 06/10] simplify the makefiles --- Makefile | 9 ++++++ kernel/Makefile | 84 ------------------------------------------------- user/Makefile | 13 -------- 3 files changed, 9 insertions(+), 97 deletions(-) delete mode 100644 kernel/Makefile delete mode 100644 user/Makefile diff --git a/Makefile b/Makefile index 43e321f..3ce7523 100644 --- a/Makefile +++ b/Makefile @@ -11,5 +11,14 @@ debug: gdb_client: ./tools/gdb_client.sh +disasm: + cargo build -p kernel --release + llvm-objdump -x target/riscv64gc-unknown-none-elf/release/kernel | less + +disasm-vim: + cargo build -p kernel --release + llvm-objdump -x target/riscv64gc-unknown-none-elf/release/kernel > /tmp/racho.asm + vim /tmp/racho.asm + clean: cargo clean diff --git a/kernel/Makefile b/kernel/Makefile deleted file mode 100644 index a524282..0000000 --- a/kernel/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -# Building -TARGET := riscv64gc-unknown-none-elf -MODE := release -KERNEL_ELF := target/$(TARGET)/$(MODE)/os -KERNEL_BIN := $(KERNEL_ELF).bin -DISASM_TMP := target/$(TARGET)/$(MODE)/asm - -# Building mode argument -ifeq ($(MODE), release) - MODE_ARG := --release -endif - -# BOARD -BOARD := qemu -SBI ?= rustsbi -BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin - -# KERNEL ENTRY -KERNEL_ENTRY_PA := 0x80200000 - -# Binutils (from llvm-tools component, resolved via rustc sysroot) -SYSROOT := $(shell rustc --print sysroot) -HOST_TRIPLE := $(shell rustc -vV | awk '/host:/ {print $$2}') -LLVM_TOOLS := $(SYSROOT)/lib/rustlib/$(HOST_TRIPLE)/bin -OBJDUMP := $(LLVM_TOOLS)/llvm-objdump -OBJCOPY := $(LLVM_TOOLS)/llvm-objcopy - -# Disassembly -DISASM ?= -x - -build: env $(KERNEL_BIN) - -env: - (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - -$(KERNEL_BIN): kernel - @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ - -kernel: - @cd ../user && make build - @echo Platform: $(BOARD) - @cp src/linker-$(BOARD).ld src/linker.ld - @cargo build $(MODE_ARG) - @rm src/linker.ld - - -clean: - @cargo clean - -disasm: kernel - @$(OBJDUMP) $(DISASM) $(KERNEL_ELF) | less - -disasm-vim: kernel - @$(OBJDUMP) $(DISASM) $(KERNEL_ELF) > $(DISASM_TMP) - @vim $(DISASM_TMP) - @rm $(DISASM_TMP) - -run: run-inner - -QEMU_ARGS := -machine virt \ - -nographic \ - -bios $(BOOTLOADER) \ - -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) - -QEMU_NAME := qemu-system-riscv64 -# qemu-version-check: -# @sh scripts/qemu-ver-check.sh $(QEMU_NAME) - -run-inner: qemu-version-check build - @qemu-system-riscv64 $(QEMU_ARGS) - -# debug: qemu-version-check build -# @tmux new-session -d \ -# "qemu-system-riscv64 $(QEMU_ARGS) -s -S" && \ -# tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ -# tmux -2 attach-session -d - -gdbserver: qemu-version-check build - @qemu-system-riscv64 $(QEMU_ARGS) -s -S - -gdbclient: - @riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234' - -.PHONY: build env kernel clean disasm disasm-vim run-inner gdbserver gdbclient qemu-version-check diff --git a/user/Makefile b/user/Makefile deleted file mode 100644 index f316ef5..0000000 --- a/user/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -TARGET := riscv64gc-unknown-none-elf -MODE := release -APP_DIR := src/bin -TARGET_DIR := target/$(TARGET)/$(MODE) -APPS := $(wildcard $(APP_DIR)/*.rs) - -build: $(APPS) - @cargo build --release - -clean: - @cargo clean - -.PHONY: build clean From 7cd4da76d56eea0b4bf78a2f0ed4b9789751ec11 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 13:10:16 +0800 Subject: [PATCH 07/10] add comment --- .cargo/config.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index b6ffeda..d5f3114 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -5,4 +5,5 @@ target = "riscv64gc-unknown-none-elf" rustflags = [ "-Cforce-frame-pointers=yes" ] -runner = "tools/run_qemu.sh" +# cargo automatically use ELF's path as the first argument +runner = "tools/run_qemu.sh" From 01f98fb2eccf534988c6dc7665dcec9b59b7e3c0 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 13:24:51 +0800 Subject: [PATCH 08/10] reconstructed my code ok! --- Cargo.toml | 2 +- Makefile | 2 ++ kernel/build.rs | 4 ++-- user/build.rs | 3 --- {user => user_lib}/Cargo.toml | 0 user_lib/build.rs | 3 +++ {user => user_lib}/rust-analyzer.toml | 0 {user => user_lib}/src/bin/00power_3.rs | 0 {user => user_lib}/src/bin/01power_5.rs | 0 {user => user_lib}/src/bin/02power_7.rs | 0 {user => user_lib}/src/bin/03sleep.rs | 0 {user => user_lib}/src/console.rs | 0 {user => user_lib}/src/lang_items.rs | 0 {user => user_lib}/src/lib.rs | 0 {user => user_lib}/src/linker.ld | 0 {user => user_lib}/src/syscall.rs | 0 16 files changed, 8 insertions(+), 6 deletions(-) delete mode 100644 user/build.rs rename {user => user_lib}/Cargo.toml (100%) create mode 100644 user_lib/build.rs rename {user => user_lib}/rust-analyzer.toml (100%) rename {user => user_lib}/src/bin/00power_3.rs (100%) rename {user => user_lib}/src/bin/01power_5.rs (100%) rename {user => user_lib}/src/bin/02power_7.rs (100%) rename {user => user_lib}/src/bin/03sleep.rs (100%) rename {user => user_lib}/src/console.rs (100%) rename {user => user_lib}/src/lang_items.rs (100%) rename {user => user_lib}/src/lib.rs (100%) rename {user => user_lib}/src/linker.ld (100%) rename {user => user_lib}/src/syscall.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 7c676c8..2bbc8ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ resolver = "2" members = [ "kernel", - "user", + "user_lib", ] exclude = [ "framework", diff --git a/Makefile b/Makefile index 3ce7523..9989a47 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,11 @@ all: cargo build -p kernel --release run: + cargo build -p user_lib --release cargo run -p kernel --release debug: + cargo build -p user_lib --release RACHO_GDB=1 cargo run -p kernel --release gdb_client: diff --git a/kernel/build.rs b/kernel/build.rs index 3e2be8f..3bb255b 100644 --- a/kernel/build.rs +++ b/kernel/build.rs @@ -4,7 +4,7 @@ use std::path::PathBuf; fn main() { println!("cargo:rustc-link-arg=-Tkernel/src/linker-qemu.ld"); - println!("cargo:rerun-if-changed=../user/src/"); + println!("cargo:rerun-if-changed=../user_lib/src/"); let manifest_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); let target_dir = manifest_dir @@ -22,7 +22,7 @@ fn main() { fn insert_app_data(target_path: &str) -> Result<()> { let mut f = File::create("src/link_app.S").unwrap(); - let mut apps: Vec<_> = read_dir("../user/src/bin") + let mut apps: Vec<_> = read_dir("../user_lib/src/bin") .unwrap() .map(|dir_entry| { let mut name_with_ext = dir_entry.unwrap().file_name().into_string().unwrap(); diff --git a/user/build.rs b/user/build.rs deleted file mode 100644 index 7c10320..0000000 --- a/user/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("cargo:rustc-link-arg=-Tuser/src/linker.ld"); -} diff --git a/user/Cargo.toml b/user_lib/Cargo.toml similarity index 100% rename from user/Cargo.toml rename to user_lib/Cargo.toml diff --git a/user_lib/build.rs b/user_lib/build.rs new file mode 100644 index 0000000..3be5533 --- /dev/null +++ b/user_lib/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rustc-link-arg=-Tuser_lib/src/linker.ld"); +} diff --git a/user/rust-analyzer.toml b/user_lib/rust-analyzer.toml similarity index 100% rename from user/rust-analyzer.toml rename to user_lib/rust-analyzer.toml diff --git a/user/src/bin/00power_3.rs b/user_lib/src/bin/00power_3.rs similarity index 100% rename from user/src/bin/00power_3.rs rename to user_lib/src/bin/00power_3.rs diff --git a/user/src/bin/01power_5.rs b/user_lib/src/bin/01power_5.rs similarity index 100% rename from user/src/bin/01power_5.rs rename to user_lib/src/bin/01power_5.rs diff --git a/user/src/bin/02power_7.rs b/user_lib/src/bin/02power_7.rs similarity index 100% rename from user/src/bin/02power_7.rs rename to user_lib/src/bin/02power_7.rs diff --git a/user/src/bin/03sleep.rs b/user_lib/src/bin/03sleep.rs similarity index 100% rename from user/src/bin/03sleep.rs rename to user_lib/src/bin/03sleep.rs diff --git a/user/src/console.rs b/user_lib/src/console.rs similarity index 100% rename from user/src/console.rs rename to user_lib/src/console.rs diff --git a/user/src/lang_items.rs b/user_lib/src/lang_items.rs similarity index 100% rename from user/src/lang_items.rs rename to user_lib/src/lang_items.rs diff --git a/user/src/lib.rs b/user_lib/src/lib.rs similarity index 100% rename from user/src/lib.rs rename to user_lib/src/lib.rs diff --git a/user/src/linker.ld b/user_lib/src/linker.ld similarity index 100% rename from user/src/linker.ld rename to user_lib/src/linker.ld diff --git a/user/src/syscall.rs b/user_lib/src/syscall.rs similarity index 100% rename from user/src/syscall.rs rename to user_lib/src/syscall.rs From 03c07a26933f253763438d9387b6ae7bdf0ebd76 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 13:29:05 +0800 Subject: [PATCH 09/10] fix github CI --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8f48f35..5564d85 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,5 +16,5 @@ jobs: - uses: DeterminateSystems/magic-nix-cache-action@v8 - name: kernel test - run: nix develop --command bash -c "make" + run: nix develop --command bash -c "make run" From be96aa1c15a637758a77746b6f0c133eb0f4af26 Mon Sep 17 00:00:00 2001 From: tinyblinker <2149934895@qq.com> Date: Mon, 20 Jul 2026 13:34:15 +0800 Subject: [PATCH 10/10] update flake.nix's welcome infos --- flake.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/flake.nix b/flake.nix index 8b84df3..61a929b 100644 --- a/flake.nix +++ b/flake.nix @@ -28,12 +28,11 @@ ]; shellHook = '' echo "==> racho dev shell" - echo " Rust: rust-toolchain.toml (auto-installs on first cargo run)" - echo " QEMU: qemu-system-riscv64" - echo " GDB: gdb" - echo " Build: cargo build -p user_lib --release && cargo run -p kernel --release" - echo " Debug: RACHO_GDB=1 cargo run -p kernel --release" - echo " GDB: ./tools/gdb_client.sh" + echo " Rust: rust-toolchain.toml (auto-installs on first cargo run)" + echo " Rust: Cargo.toml (for Build system + Package manager)" + echo " QEMU: make run" + echo " GDB: make debug / make gdb_client" + echo " Build: make all" echo "" ''; };