From 2d7375b99f88c03dca559aaabb208baa43a1ca2e Mon Sep 17 00:00:00 2001 From: moce0627 <491745115@qq.com> Date: Wed, 17 May 2023 16:49:21 +0800 Subject: [PATCH] doc: update readme and Makefile --- Cargo.toml | 2 +- Makefile | 11 ++++++----- README.ch.md | 9 +++++++-- README.md | 9 +++++++-- build.rs | 23 +++++++++++++++-------- libfdt-binding/CMakeLists.txt | 31 ------------------------------- src/arch/aarch64/vgic.rs | 2 +- src/kernel/vm.rs | 5 +---- 8 files changed, 38 insertions(+), 54 deletions(-) delete mode 100644 libfdt-binding/CMakeLists.txt diff --git a/Cargo.toml b/Cargo.toml index 62b9fc8..8249c65 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ panic = "abort" debug = true [build-dependencies] -cmake = "0.1" +cc = "1.0" [dependencies] vm-fdt = { git = "https://github.com/OhmR/vm-fdt" } diff --git a/Makefile b/Makefile index 46f8ab2..6d2401d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ # Path +# please make a rootfs image by yourself DISK = vm0.img # Compile @@ -25,27 +26,27 @@ qemu_release: tx2: cargo build -Z build-std=${BUILD_STD} --target aarch64-tx2.json --features tx2 - bash upload + # bash upload ${OBJDUMP} --demangle -d target/aarch64-tx2/debug/${IMAGE} > target/aarch64-tx2/debug/t.txt tx2_release: cargo build -Z build-std=${BUILD_STD} --target aarch64-tx2.json --features tx2 --release - bash upload_release + # bash upload_release ${OBJDUMP} --demangle -d target/aarch64-tx2/release/${IMAGE} > target/aarch64-tx2/release/t.txt tx2_ramdisk: cargo build -Z build-std=${BUILD_STD} --target aarch64-tx2.json --features "tx2 ramdisk" --release - bash upload_release + # bash upload_release ${OBJDUMP} --demangle -d target/aarch64-tx2/release/${IMAGE} > target/aarch64-tx2/release/t.txt tx2_update: cargo build -Z build-std=${BUILD_STD} --target aarch64-tx2-update.json --features "tx2 update" --release - bash upload_update + # bash upload_update ${OBJDUMP} --demangle -d target/aarch64-tx2-update/release/${IMAGE} > target/aarch64-tx2-update/release/update.txt pi4_release: cargo build -Z build-std=${BUILD_STD} --target aarch64-pi4.json --features pi4 --release - bash pi4_upload_release + # bash pi4_upload_release ${OBJDUMP} --demangle -d target/aarch64-pi4/release/${IMAGE} > target/aarch64-pi4/release/t.txt diff --git a/README.ch.md b/README.ch.md index 4722db7..a09039b 100644 --- a/README.ch.md +++ b/README.ch.md @@ -21,7 +21,12 @@ Rust-Shyper是由北航计算机学院操作系统研究团队,在华为技术 ## 如何编译 -需要的额外工具:[aarch64-none-elf的编译工具链](https://developer.arm.com/downloads/-/gnu-a)以及[cargo-binutils](https://crates.io/crates/cargo-binutils/0.3.6) +编译需要的工具: +- [Rust](https://www.rust-lang.org/tools/install) +- [aarch64-none-elf的编译工具链](https://developer.arm.com/downloads/-/gnu-a) +- [cargo-binutils](https://crates.io/crates/cargo-binutils/0.3.6) (可选的) +- QEMU, or qemu-system-aarch64 (可选的) +- u-boot-tools (可选的) 只需要使用`make`工具即可 @@ -39,7 +44,7 @@ MVM 是一个可以通过Hypervisor提供的私有特权接口来监控其他虚 通常情况下,MVM仅允许存在一个,且MVM会独占0号核心。 -该内核模块在如下系统作为MVM时,经测试可以正常运行:Rpi Linux5.4.Y (for Raspberry Pi 4 Model B) 和 NVIDIA L4T 32.6.1 (for Jestion TX2). +该内核模块在如下系统作为MVM时,经测试可以正常运行:NVIDIA L4T 32.6.1 (for Jestion TX2). ## 如何启动客户虚拟机(Guest VM) diff --git a/README.md b/README.md index 4e0bc46..c505f90 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,12 @@ The list of supported (and work in progress) platforms is presented below: ## How to Build -Tools for compiling: please install [aarch64-none-elf toolchain](https://developer.arm.com/downloads/-/gnu-a) and [cargo-binutils](https://crates.io/crates/cargo-binutils/0.3.6) +Tools for compiling: please install: +- [Rust](https://www.rust-lang.org/tools/install) +- [aarch64-none-elf toolchain](https://developer.arm.com/downloads/-/gnu-a) +- [cargo-binutils](https://crates.io/crates/cargo-binutils/0.3.6) (optional) +- QEMU, or qemu-system-aarch64 (optional) +- u-boot-tools (optional) Simply run `make` @@ -37,7 +42,7 @@ Note that please edit the MVM profile in src/config/\_def.rs according to MVM is a privileged VM that can monitor the status of other VMs through privileged interfaces provided by the hypervisor. We implement a dedicated Linux kernel module for MVM. Through this module, MVM can make a hypercall to realize specific functions, such as VM configuration, VM migration and hypervisor live-update. Generally, there is only one MVM, and it will monopolize core 0. -The kernel module on Rpi Linux5.4.Y (for Raspberry Pi 4 Model B) and NVIDIA L4T 32.6.1 (for Jestion TX2) as MVM has been tested. +The kernel module on NVIDIA L4T 32.6.1 (for Jestion TX2) as MVM has been tested. ## How to Run Guest VM diff --git a/build.rs b/build.rs index 4b5d03f..351d51e 100644 --- a/build.rs +++ b/build.rs @@ -9,16 +9,23 @@ // See the Mulan PSL v2 for more details. use std::process::Command; -use cmake::Config; +use std::fs; fn main() { - let dst = Config::new("libfdt-binding") - .profile("release") - .build_target("all") - .build() - .join("build"); - println!("cargo:rustc-link-search=native={}", dst.display()); - println!("cargo:rustc-link-lib=static=fdt-binding"); + let files = fs::read_dir("libfdt-binding").unwrap().into_iter().filter_map(|f| { + let f = f.as_ref().unwrap(); + if f.file_type().unwrap().is_file() && matches!(f.path().extension(), Some(ext) if ext == "c") { + Some(f.path()) + } else { + None + } + }); + cc::Build::new() + .compiler("aarch64-none-elf-gcc") + .include("libfdt-binding") + .files(files) + .flag("-w") + .compile("fdt-binding"); // note: add error checking yourself. let output = Command::new("date").arg("+\"%Y-%m-%d %H:%M:%S %Z\"").output().unwrap(); let build_time = String::from_utf8(output.stdout).unwrap(); diff --git a/libfdt-binding/CMakeLists.txt b/libfdt-binding/CMakeLists.txt deleted file mode 100644 index a3a2458..0000000 --- a/libfdt-binding/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -cmake_minimum_required(VERSION 3.9) -project(libfdt-binding) - -set(CMAKE_BUILD_TYPE "Release") - -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_COMPILER aarch64-none-elf-gcc) -set(CMAKE_ASM_COMPILER aarch64-none-elf-gcc) -# set(CMAKE_C_FLAGS_RELEASE "-O3") - -include_directories(.) - -add_library(fdt-binding STATIC - "fdt.c" - "fdt.h" - "fdt_addresses.c" - "fdt_check.c" - "fdt_empty_tree.c" - "fdt_overlay.c" - "fdt_ro.c" - "fdt_rw.c" - "fdt_strerror.c" - "fdt_sw.c" - "fdt_wip.c" - "libfdt.h" - "libfdt_env.h" - "libfdt_internal.h" - "wrapper.c" - "wrapper.h" - "mystr.c" -) diff --git a/src/arch/aarch64/vgic.rs b/src/arch/aarch64/vgic.rs index 086851a..6dc2341 100644 --- a/src/arch/aarch64/vgic.rs +++ b/src/arch/aarch64/vgic.rs @@ -1820,7 +1820,7 @@ impl Vgic { } } else { // TODO: CPENDSGIR and SPENDSGIR access - unimplemented!(); + warn!("unimplemented: CPENDSGIR and SPENDSGIR access"); } } diff --git a/src/kernel/vm.rs b/src/kernel/vm.rs index 0397586..f9037c9 100644 --- a/src/kernel/vm.rs +++ b/src/kernel/vm.rs @@ -440,10 +440,7 @@ impl Vm { panic!("set_emu_devs: set an exsit emu dev"); } } - while idx > vm_inner.emu_devs.len() { - println!("set_emu_devs: push a None emu dev"); - vm_inner.emu_devs.push(EmuDevs::None); - } + vm_inner.emu_devs.resize(idx, EmuDevs::None); vm_inner.emu_devs.push(emu); } -- Gitee