From 1e7c9e4e3138979f181b958eda9fd2a545823931 Mon Sep 17 00:00:00 2001 From: moce0627 <491745115@qq.com> Date: Fri, 28 Jul 2023 11:24:10 +0800 Subject: [PATCH 1/3] feat: add pi4 dtb --- .cargo/config | 2 +- .gitignore | 2 +- image/pi4_fin.dtb | Bin 0 -> 32322 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 image/pi4_fin.dtb diff --git a/.cargo/config b/.cargo/config index 8255437..d7f3420 100644 --- a/.cargo/config +++ b/.cargo/config @@ -1,3 +1,3 @@ [build] -target = "aarch64-tx2.json" +target = "aarch64.json" rustflags = ["-C", "llvm-args=-global-isel=false"] diff --git a/.gitignore b/.gitignore index ebb81a7..465bf76 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,4 @@ build/ pi4_upload_release *.img *.dts -*.dtb +/*.dtb diff --git a/image/pi4_fin.dtb b/image/pi4_fin.dtb new file mode 100644 index 0000000000000000000000000000000000000000..d855798972284675732077a5ff19d80a5acbdbc9 GIT binary patch literal 32322 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 Date: Tue, 8 Aug 2023 13:42:03 +0800 Subject: [PATCH 2/3] doc: update readme for mediated config --- README.ch.md | 12 ++++++++++++ README.md | 12 ++++++++++++ gdb/aarch64.gdb | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.ch.md b/README.ch.md index 7f17aa4..3d47ddf 100644 --- a/README.ch.md +++ b/README.ch.md @@ -67,6 +67,18 @@ insmod tools/shyper.ko sudo tools/shyper system daemon [mediated-cfg.json] & ``` +mediated-cfg.json用于配置其他guest VM的virtio中介磁盘,示例如下: + +``` +{ + "mediated": [ + "/dev/sda2", + "/dev/nvme0n1p2", + "~/vm0.img" + ] +} +``` + **Step 3**: 通过配置文件来配置一个客户虚拟机 ```bash diff --git a/README.md b/README.md index 94d1f8d..92a3491 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,18 @@ insmod tools/shyper.ko sudo tools/shyper system daemon [mediated-cfg.json] & ``` +mediated-cfg.json is used for guest VM as virtio block. For example: + +``` +{ + "mediated": [ + "/dev/sda2", + "/dev/nvme0n1p2", + "~/vm0.img" + ] +} +``` + **Step 3**: Configure a VM through profile ```bash diff --git a/gdb/aarch64.gdb b/gdb/aarch64.gdb index c0df4c0..35130f1 100644 --- a/gdb/aarch64.gdb +++ b/gdb/aarch64.gdb @@ -1,5 +1,5 @@ target remote 127.0.0.1:1234 -file target/aarch64-qemu/debug/rust_shyper +file target/aarch64/debug/rust_shyper break *0x40080000 display/i $pc set confirm off -- Gitee From cb9e143462167817bcc315091c3fadd456fa488b Mon Sep 17 00:00:00 2001 From: moce0627 <491745115@qq.com> Date: Tue, 8 Aug 2023 21:40:24 +0800 Subject: [PATCH 3/3] tools: add shyper kernel module for rpi4b --- tools/shyper_pi4.ko | Bin 0 -> 92016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/shyper_pi4.ko diff --git a/tools/shyper_pi4.ko b/tools/shyper_pi4.ko new file mode 100644 index 0000000000000000000000000000000000000000..8f3657dc760bb5c80b3ade5ba3c14afa3ba5c16f GIT binary patch literal 92016 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 Ij^M)NH|x<_c>n+a literal 0 HcmV?d00001 -- Gitee