QEMU platform SBI support implementation, using RustSBI

Overview

QEMU support using RustSBI

Compile and run with:

cargo qemu

When running cargo qemu, the test kernel will build and run. Expected output should be:

xtask: mode: Debug
   Compiling rustsbi-qemu v0.1.0 (D:\RustProjects\rustsbi-qemu\rustsbi-qemu)
    Finished dev [unoptimized + debuginfo] target(s) in 1.09s
    Finished dev [unoptimized + debuginfo] target(s) in 0.23s
[rustsbi] RustSBI version 0.2.0-alpha.3
.______       __    __      _______.___________.  _______..______   __
|   _  \     |  |  |  |    /       |           | /       ||   _  \ |  |
|  |_)  |    |  |  |  |   |   (----`---|  |----`|   (----`|  |_)  ||  |
|      /     |  |  |  |    \   \       |  |      \   \    |   _  < |  |
|  |\  \----.|  `--'  |.----)   |      |  |  .----)   |   |  |_)  ||  |
| _| `._____| \______/ |_______/       |__|  |_______/    |______/ |__|

[rustsbi] Implementation: RustSBI-QEMU Version 0.0.1
[rustsbi-dtb] Hart count: cluster0 with 1 cores
[rustsbi] misa: RV64ACDFIMSU
[rustsbi] mideleg: ssoft, stimer, sext (0x222)
[rustsbi] medeleg: ima, ia, bkpt, la, sa, uecall, ipage, lpage, spage (0xb1ab)
[rustsbi] pmp0: 0x80000000 ..= 0x800fffff (rwx)
[rustsbi] pmp1: 0x80200000 ..= 0x802fffff (rwx)
[rustsbi] pmp2: 0x0 ..= 0xfffffffffffffffc (---)
[rustsbi] enter supervisor 0x80200000
<< Test-kernel: Hart id = 0, DTB physical address = 0x87e00000
>> Test-kernel: Testing base extension
<< Test-kernel: Base extension version: 1
<< Test-kernel: SBI specification version: 2
<< Test-kernel: SBI implementation Id: 4
<< Test-kernel: SBI implementation version: 200
<< Test-kernel: Device mvendorid: 0
<< Test-kernel: Device marchid: 0
<< Test-kernel: Device mimpid: 0
>> Test-kernel: Testing SBI instruction emulation
<< Test-kernel: Current time: 31918a
>> Test-kernel: Trigger illegal exception
<< Test-kernel: Value of scause: Exception(IllegalInstruction)
<< Test-kernel: Illegal exception delegate success
<< Test-kernel: SBI test SUCCESS, shutdown

Run test kernel

Run with:

cargo test

It will run RustSBI-QEMU with a test kernel. The test kernel will test all SBI functions, its command emulation and other features. If it succeeds, there would be output like:

running 1 test
    Finished dev [unoptimized + debuginfo] target(s) in 0.14s
   Compiling test-kernel v0.1.0 (D:\RustProjects\rustsbi-qemu\test-kernel)
    Finished dev [unoptimized + debuginfo] target(s) in 0.61s
test run_test_kernel ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.31s

License

This project is licensed under Mulan PSL v2.

Copyright (c) 2021 Wuxiang Zhi Feng Team
RustSBI-QEMU is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
         http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
Comments
  • 重构

    重构

    • sbi 实现

      • 根据标准重新审查函数实现,依赖新版 rustsbi
      • 移除堆分配
      • 重写上下文切换
      • 使用新的设备树解析方案,尽量从设备树解析各模块地址和长度
      • 配置更精细的 pmp
      • 模块
        • srst
          • [x] shutdown
          • [ ] reboot
        • hsm
          • [x] hart_start
          • [x] hart_stop
          • [x] hart_get_status
          • [x] hart_suspend
    • 测试内核

      • 分离 sbi-rt 子项目,特权软件可基于此项目调用 sbi ecall(不限于 rustsbi)
      • 测试项目
        • [x] 引导特权软件
        • [x] base
        • [ ] legacy (deperacated)
        • [x] time csr
        • [x] exception delegate
        • [x] hsm
        • [x] srst
    • 测试通过情况

      • [x] 测试内核单核
      • [x] 测试内核多核
      • [x] rCore-Tutorial-v3
      • [x] zCore 单核
      • [x] zCore 多核
    opened by YdrMaster 14
  • 在Ubuntu物理机和WSL 上行为不一致

    在Ubuntu物理机和WSL 上行为不一致

    您好! 我正在尝试跑通rcore。 按照 http://rcore-os.cn/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html 里的描述,可以正常在WSL和物理机上跑通rcore。 然而,我注意到有一个rcore的实验指导,专门为了做实验的同学设计的,这里面的代码和tutorial稍有不同,我尝试跑通实验指导三:虚拟内存的时候的时候,出现了以下奇怪的情况:

    物理机+opensbi(qemu参数改为default): 正常运行! 物理机+rustsbi2.2.0: 运行失败! 具体来说,在虚拟内存开启之后(mm::init()之后),println宏无法打印变量的值,此时PC不知道跑哪去了,再也没有输出了! WSL+opensbi: 所有章节的rcore都运行失败!(rcore指的是实验指导的rcore,不是tutorial的rcore) WSL+rustsbi: 没有虚拟内存的章节的rcore可以正常运行,但是开启了虚拟内存章节的rcore运行失败!

    opened by 2catycm 8
  • It can't start test in Linux environment

    It can't start test in Linux environment

    It looks good in windows :

    PS C:\Rust\rustsbi-qemu> cargo qemu
        Finished release [optimized] target(s) in 0.06s
         Running `target\release\xtask.exe qemu`
        Finished release [optimized] target(s) in 0.06s
        Finished release [optimized] target(s) in 0.06s
    [rustsbi] RustSBI version 0.3.0-alpha.4, adapting to RISC-V SBI v1.0.0
    .______       __    __      _______.___________.  _______..______   __
    |   _  \     |  |  |  |    /       |           | /       ||   _  \ |  |
    |  |_)  |    |  |  |  |   |   (----`---|  |----`|   (----`|  |_)  ||  |
    |      /     |  |  |  |    \   \       |  |      \   \    |   _  < |  |
    |  |\  \----.|  `--'  |.----)   |      |  |  .----)   |   |  |_)  ||  |
    | _| `._____| \______/ |_______/       |__|  |_______/    |______/ |__|
    [rustsbi] Implementation     : RustSBI-QEMU Version 0.2.0-alpha.2
    [rustsbi] Platform Name      : riscv-virtio,qemu
    [rustsbi] Platform SMP       : 8
    [rustsbi] Platform Memory    : 0x80000000..0x88000000
    [rustsbi] Boot HART          : 6
    [rustsbi] Device Tree Region : 0x87e00000..0x87e01925
    [rustsbi] Firmware Address   : 0x80000000
    [rustsbi] Supervisor Address : 0x80200000
    [rustsbi] pmp01: 0x00000000..0x80000000 (-wr)
    [rustsbi] pmp02: 0x80000000..0x80200000 (---)
    [rustsbi] pmp03: 0x80200000..0x88000000 (xwr)
    [rustsbi] pmp04: 0x88000000..0x00000000 (-wr)
    .....................
    

    But when I try to run it in ubuntu22.04, an error was thrown out in the beginnig like this:

    $:~/workspace/debug/rustsbi-qemu$ cargo qemu
        Finished release [optimized] target(s) in 0.01s
         Running `target/release/xtask qemu`
        Finished release [optimized] target(s) in 0.01s
        Finished release [optimized] target(s) in 0.01s
    xtask: QEMU command not found. Does your system have QEMU installed and environment variable configured?
    xtask: error: No such file or directory (os error 2)
    $: ~
    
    opened by ChaiEvan 6
  • Wrong PMP output and compatibility with rCore-Tutorial-v3 of rustsbi-qemu version 0.1.1

    Wrong PMP output and compatibility with rCore-Tutorial-v3 of rustsbi-qemu version 0.1.1

    The Rustsbi binary was downloaded from https://github.com/rustsbi/rustsbi-qemu/releases/download/v0.1.1/rustsbi-qemu-release.zip.

    $ qemu-system-riscv64 --version
    QEMU emulator version 6.2.0
    Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers
    $ qemu-system-riscv64 -machine virt -nographic -bios ../bootloader/rustsbi-qemu.bin -smp 1
    [rustsbi] RustSBI version 0.2.2, adapting to RISC-V SBI v1.0.0
    [logo]
    [rustsbi] Implementation: RustSBI-QEMU Version 0.1.1
    [rustsbi-dtb] Hart count: cluster0 with 1 cores
    [rustsbi] misa: RV64ACDFIMSU
    [rustsbi] mideleg: ssoft, stimer, sext (0x222)
    [rustsbi] medeleg: ima, ia, bkpt, la, sa, uecall, ipage, lpage, spage (0xb1ab)
    [rustsbi] pmp0: 0x10000000 ..= 0x10001fff (rw-)
    [rustsbi] pmp6: 0x2000000 ..= 0x200ffff (rw-)
    [rustsbi] pmp12: 0xc000000 ..= 0xc3fffff (rw-)
    [rustsbi] enter supervisor 0x80200000
    $ qemu-system-riscv64 -machine virt -nographic -bios ../bootloader/rustsbi-qemu.bin -smp 8
    [rustsbi] RustSBI version 0.2.2, adapting to RISC-V SBI v1.0.0
    [logo]
    [rustsbi] Implementation: RustSBI-QEMU Version 0.1.1
    [rustsbi-dtb] Hart count: cluster0 with 8 cores
    [rustsbi] misa: RV64ACDFIMSU
    [rustsbi] mideleg: ssoft, stimer, sext (0x222)
    [rustsbi] medeleg: ima, ia, bkpt, la, sa, uecall, ipage, lpage, spage (0xb1ab)
    [rustsbi] pmp0: 0x10000000 ..= 0x10001fff (rw-)
    [rustsbi] pmp6: 0x2000000 ..= 0x200ffff (rw-)
    [rustsbi] pmp12: 0xc000000 ..= 0xc3fffff (rw-)
    [rustsbi] enter supervisor 0x80200000
    

    The PMP output was not correct. Actually, the expected output is:

    [rustsbi] pmp0: 0x10000000 ..= 0x10001fff (rw-)
    [rustsbi] pmp1: 0x2000000 ..= 0x200ffff (rw-)
    [rustsbi] pmp2: 0xc000000 ..= 0xc3fffff (rw-)
    [rustsbi] pmp3: 0x80000000 ..= 0x8fffffff (rwx)
    

    It was very weird that when I tested using cargo qemu under the rustsbi-qemu root directory, the output was correct. I did not know what happened.


    Another question is that rCore-Tutorial-v3 cannot work normally using rustsbi-qemu version 0.1.1 if the tutorial is built in debug mode. However, it works under release mode. Therefore, I decide not to upgrade rustsbi for a while...

    opened by wyfcyx 6
  • Legacy sbi_set_timer() behaves differently than new sbi_set_timer() on QEMU ?

    Legacy sbi_set_timer() behaves differently than new sbi_set_timer() on QEMU ?

    Rustsbi version: at commit 269d1d32b4c0fd4900e6db1f070e7a2ce983dd14 QEMU version: 5.2.0

    Minimalist test case:

    int main() {
      w_stvec((uint64_t)kvec_asm); // i put some printf in interrupt handler
      s_sstatus(SSTATUS_SIE);
      s_sie(SIE_SSIE | SIE_STIE | SIE_SEIE);
      sbi_legacy_set_timer(r_time() + 30000000);
      // struct sbiret r = sbi_set_timer(r_time() + 30000000);
      // printf("%l, %l\n", r.error, r.value);
      while(1);
      return 0;
     }
    

    When i use the legacy sbi_legacy_set_timer(), the code works as expected, outputs a lot.

    When i use the new sbi_set_time(), it seems that timer interrupt was never triggered..

    I have traced the code, the params were properly passed.

    image image

    Is the difference an expected behavior?

    Thanks ~~~

    bug 
    opened by D0ot 5
  • A proper way to set pmp registers

    A proper way to set pmp registers

    Now rustsbi-qemu doesn't allow S mode software use devices provided by qemu because we havn't set pmp registers for them.

    Noticed that qemu provides more than one board, and they have different MMIO. We need to discuss how to set pmp registers properly.

    现在 rustsbi-qemu 不允许 S 态软件使用 qemu 提供的设备,因为我们没有为它们设置 pmp 寄存器。

    注意到 qemu 提供了不止一种板子,而且它们有不同的 MMIO。我们需要讨论如何正确设置 pmp 寄存器。


    If anyone who wonder how to use devices in qemu, here is an example of using uart0 (uart0_mmio base 0x10000000 lenth 0x100) in virt machine:

    如果任何人想知道如何使用 qemu 的外设,下面是使用 virt 的 uart0 (uart0_mmio 基址 0x10000000 长度 0x100) 的一个例子:

    fn set_pmp() {
        unsafe {
            asm!(
    -            "li     {tmp}, ((0x08 << 16) | (0x1F << 8) | (0x1F << 0))", // 0 = NAPOT,ARWX; 1 = NAPOT,ARWX; 2 = TOR,A;
    +            "li     {tmp}, ((0x08 << 24) | (0x1F << 16) | (0x1F << 8) | (0x1F << 0))", // 0 = NAPOT,ARWX; 1 = NAPOT,ARWX; 2 = TOR,A;
                "csrw   0x3A0, {tmp}",
                "li     {tmp}, ((0x0000000080000000 >> 2) | 0x3ffff)", // 0 = 0x0000000080000000-0x000000008001ffff
                "csrw   0x3B0, {tmp}",
                "li     {tmp}, ((0x0000000080200000 >> 2) | 0x1fffff)", // 1 = 0x0000000080200000-0x000000008021ffff
                "csrw   0x3B1, {tmp}",
    +            "li     {tmp}, ((0x0000000010000000 >> 2) | 0x3f)",
    +            "csrw   0x3B2, {tmp}",
                "sfence.vma",
                tmp = out(reg) _
            )
        };
    }
    
    help wanted 
    opened by duskmoon314 3
  • feat: 使用 sbi-testing 测试 sbi 实现

    feat: 使用 sbi-testing 测试 sbi 实现

    • fix: 改正中断转发的实现,现在 ssoft 和 stimer 都正常响应
    • refactor: 用 sbi-testing 测试
    • refactor: 实现一些访问 clint 的裸函数,现在 m 态代理 s 中断不需要切换上下文

    Signed-off-by: YdrMaster [email protected]

    bug enhancement 
    opened by YdrMaster 2
  • 关于非法指令的转发行为

    关于非法指令的转发行为

    在现有的处理中: https://github.com/rustsbi/rustsbi-qemu/blob/96704cf4373b9eb804145268862ba92700e46b27/rustsbi-qemu/src/feature/transfer_trap.rs#L23 仅仅设置SPP为S态似乎有些草率。比如在xv6中,若是在用户态触发了非法指令异常,那么在异常处理函数中会判断该异常是否来自于用户态:

    if((r_sstatus() & SSTATUS_SPP) != 0){
      panic("usertrap: not from user mode");
    }
    

    若按上述设置,那么将会触发panic,这对于debug来说颇具误导性...

    比较合适的设置方法应该是根据现有的MPP来设置SPP:

    // 设置中断位
    if ctx.mstatus.mpp() == MPP::User {
        mstatus::set_spp(SPP::User);
    } else {
        mstatus::set_spp(SPP::Supervisor);
    }
        
    mstatus::set_mpp(MPP::Supervisor);
    
    opened by yztz 2
  • 是否期望和qemu自带的sbi行为一致?

    是否期望和qemu自带的sbi行为一致?

    我这边观察到的rustsbi的行为是,每一个hart都会启动进入系统内核,并且hartid不为0的hart才能接受到a1 (device tree)参数。相同的代码用qemu自带的sbi跑,只有hartid为0的hart启动进入内核,能接受到device tree,其他hart为Stopped状态。 是否应该期望两者行为一致,还是说这是一种feature?

    opened by leoleoasd 2
  • 使用cargo qemu进行build时报错

    使用cargo qemu进行build时报错

    我在使用cargo qemu进行编译,显示了如下错误。 image 因此,我认为是rustsbi v0.2.0-alpha.8导致的编译错误。 这是我使用的toolchain 的情况: image 奇怪的是,我在rustsbi的仓库下(https://github.com/rustsbi/rustsbi/) 对rustsbi的最新版本0.2.0-alpha.9进行编译不会报错。 image 并且编译rustsbi使用的toolchain和编译rustsbi-qemu时使用的toolchain相同: image

    看上去问题 的根源应该是最新版本的toolchain不太适配rustsbi v0.2.0-alpha.8导致的编译错误。

    opened by leo-frank 2
  • Support more divices in PMP config

    Support more divices in PMP config

    Now we support PLIC/CLINT/VIRTIO0/UART/DRAM. We also add a handy function which helps you calculate pmpaddr and write some comments about how PMP works.

    opened by wyfcyx 1
  • The newer version of dtc stops qemu-system-riscv64 properly executing RustSBI

    The newer version of dtc stops qemu-system-riscv64 properly executing RustSBI

    I'm currently using qemu 7.0.0 for risc-v system emulation. However, the current version of device tree compiler might caught problem. If we use git clone to get the qemu source and compile it, the qemu does not work properly as it gets stuck in a loop before jumping to the kernel. The execution trace of this loop shows below. It causes RustABI in an infinite loop around address 0x80001b00:

    (gdb) si
    0x0000000080001b00 in ?? ()
    (gdb) si
    0x0000000080001b04 in ?? ()
    (gdb) si
    0x0000000080001b08 in ?? ()
    (gdb) si
    0x0000000080001b0c in ?? ()
    (gdb) si
    0x0000000080001b10 in ?? ()
    (gdb) si
    0x0000000080004394 in ?? ()
    (gdb) si
    0x0000000080001b14 in ?? ()
    (gdb) si
    0x0000000080001b18 in ?? ()
    (gdb) si
    0x0000000080001b00 in ?? ()
    (gdb) x/10i $pc
    => 0x80001b00:	fence	w,unknown
       0x80001b04:	lb	a0,8(s1)
       0x80001b08:	fence	r,rw
       0x80001b0c:	auipc	ra,0x3
       0x80001b10:	jalr	-1912(ra)
       0x80001b14:	zext.b	a0,a0
       0x80001b18:	blez	a0,0x80001b00
       0x80001b1c:	bne	a0,s0,0x80001b26
       0x80001b20:	fence	w,unknown
       0x80001b24:	j	0x80001b04
    (gdb)
    

    I infer this problem is caused by dtc submodule is because if we download source code tar file of qemu 7.0.0 on official website, which include all of the component at that time including the full copy of old version dtc, qemu will work as expected. The only difference between the git clone version and .tar file of qemu 7.0.0 is the submodules (including dtc and a building system). I have tried many kinds of platform and it yields the same result.

    opened by I-Rinka 1
  • does it support a parameter with generated binary?

    does it support a parameter with generated binary?

    Is possible that the test suite can support binary input, and go through the know cases under qemu? e.g. The sbi binary like 'fw_jump.bin' and 'fw_jump.elf' can be generated in opensbi/build/platform/generic/firmware/.. https://github.com/riscv-software-src/opensbi.git

    enhancement 
    opened by ChaiEvan 1
  • HSM和IPI、RFENCE扩展共存的问题

    HSM和IPI、RFENCE扩展共存的问题

    目前rustsbi-qemu在收到M态软件中断时,只会判断上一个HSM命令,如果不存在就直接 panic ,导致S态软件无论是通过SBI s-IPI扩展还是直接访问Clint都无法使用IPI功能(除非是ACLINT)。

    一个最直接的hack就是发现没有HSM命令时,把软件中断直接转发给S态;不过这样可能处理不了rfence扩展,应该得再加一套或者两套命令接口。

    enhancement 
    opened by Gallium70 5
Releases(Unreleased)
  • Unreleased(Nov 3, 2022)

    Added

    • Hint spin loop in hart state monitor module
    • Add bench-kernel crate to workspace for sbi call bench

    Modified

    • Use instance based RustSBI interface, with separate functions for legacy stdio
    • Update sbi-testing to version 0.0.1
    • Use crate rcore-console version 0.0.0 in rustsbi-qemu and test-kernel for print! and println!
    • Use crate aclint version 0.0.0 in rustsbi-qemu for aclint structs
    • Use crate os-xtask-utils version 0.0.0 in xtask builder

    Fixed

    • Xtask will now print error when system does not have qemu installed
    Source code(tar.gz)
    Source code(zip)
    rustsbi-qemu-debug.gz(40.30 KB)
    rustsbi-qemu-debug.zip(40.52 KB)
    rustsbi-qemu-release.gz(18.02 KB)
    rustsbi-qemu-release.zip(18.25 KB)
  • v0.2.0-alpha.2(Oct 6, 2022)

  • v0.1.1(Mar 29, 2022)

  • v0.1.0(Feb 13, 2022)

    This update contains:

    • Adapts to RustSBI version 0.2.0
    • Implement SBI non-retentive resume procedure
    • PMP updates, use stabilized core::arch::asm! macro, thanks to @wyfcyx
    • Fixes on usage of CLINT peripheral, thanks to @duskmoon314
    • Numerous fixes to HSM module implementation, more documents

    Each zip archive contains an ELF file and a binary file. Install the binary into target, and use the ELF to help debugging if needed.

    Source code(tar.gz)
    Source code(zip)
    rustsbi-qemu-debug.zip(879.42 KB)
    rustsbi-qemu-release.zip(268.13 KB)
  • v0.0.2(Nov 26, 2021)

    This update contains:

    • Supports RISC-V Privileged Specification v1.12, adapts to SBI specification version 0.3
    • Retentive and non-retentive hart suspend function, providing convenience for multi-core kernel system boot
    • SBI HSM standard hart start and stop function
    • Migrate to RustSBI v0.2.0-alpha.7
    • Prevent cargo check error in Visual Studio Code IDE
    • PMP module settings, support virtio0 in pmp config (@wyfcyx)
    • Delegate U interrupt to S, delegate MTI to S via set_stip (@duskmoon314)
    • Add toolchain check for xtask (@SKTT1Ryze)
    • Set rust build toolchain to nightly (@duskmoon314)
    • Small fixes

    Each zip archive contains an ELF file and a binary file. Install the binary into target, and use the ELF to help debugging if needed.

    Source code(tar.gz)
    Source code(zip)
    rustsbi-qemu-debug.zip(848.66 KB)
    rustsbi-qemu-release.zip(249.11 KB)
  • v0.0.1(May 23, 2021)

    This is the first release of rearranged RustSBI-QEMU project. It fully supports RISC-V Privileged Specification v1.11, and adapts to RISC-V SBI specification v0.2.

    This project targets to provide an SBI environment and a test suite on QEMU, hereby provided as an example for further RustSBI implementations.

    Each release contains an ELF file and a binary file. Install the binary into target, and use the ELF to help debugging if needed.

    Source code(tar.gz)
    Source code(zip)
    rustsbi-qemu(2.32 MB)
    rustsbi-qemu.bin(107.94 KB)
Owner
RustSBI
Extensible, 100% Rust RISC-V bootloader environment
RustSBI
Cross-platform Rust wrappers for the PCI ID Repository

pci-ids This project is modified from wooduffw's usb-ids.rs (https://github.com/woodruffw/usb-ids.rs) Cross-platform Rust wrappers for the PCI ID Repo

Charles Lien 9 Dec 9, 2022
Basic Rust kernel using Limine

Rust Limine Barebones This is a small kernel that boots using Limine. Build First of all, download Rust ! (I guess you already did it if you are here

Quentincestino 16 Dec 23, 2022
RustSBI support on SiFive FU740 board; FU740 is a five-core heterogeneous processor with four SiFive U74 cores, and one SiFive S7 core

RustSBI 在 HiFive Unmatched 主板的支持软件 这个项目的目的是在SiFive HiFive Unmatched主板上支持RustSBI。 RustSBI是一个引导程序环境;主板上电时,RustSBI将会先行启动,而后,它将会找到一个可引导的操作系统,引导启动这个操作系统。 在

RustSBI 15 Dec 1, 2022
Rust, cargo and QEMU setup for multi-architecture OS development.

rust-osdev-jumpstart Rust, cargo and QEMU setup for multi-architecture OS development. Goal This repo should give you a boost in starting a bare-metal

Alister Lee 27 Nov 20, 2022
Tested on Raspberry pi 3 on QEMU

Tested on Raspberry pi 3 on QEMU

Wazzaps 9 Mar 10, 2022
High-performance QEMU memory and instruction tracing

Cannoli Cannoli is a high-performance tracing engine for qemu-user. It can record a trace of both PCs executed, as well as memory operations. It consi

Margin Research 412 Oct 18, 2023
Cross-platform pseudoterminal (PTY/ConPTY) implementation with async support

pseudoterminal The pseudoterminal crate is a versatile pseudoterminal (PTY) implementation designed for Rust, offering asynchronous capabilities. This

Michael 3 Sep 15, 2023
Error context library with support for type-erased sources and backtraces, targeting full support of all features on stable Rust

Error context library with support for type-erased sources and backtraces, targeting full support of all features on stable Rust, and with an eye towards serializing runtime errors using serde.

Findora Foundation 1 Feb 12, 2022
A rewrite of Phonelink for Windows Forms written in Rust, with cross-platform support.

phonelink-rs A rewrite of Phonelink for Windows Forms written in Rust, with cross-platform support. Usage Clone the repository and build, or download

ahsan-a 4 Aug 6, 2022
Rust no_std, embedded_hal board support package for the Electro-Smith Daisy platform.

Daisy Rust no_std, embedded_hal board support package for the Electro-Smith Daisy platform. This project was forked from antoinevg/daisy_bsp. Supporte

zlosynth 5 Dec 4, 2022
Cross-platform casting SDK, support Android, Windows, Linux

mirror Cross-platform casting SDK, support Android, Windows, Linux Low-latency transport protocols use [SRT](https://github.com/Haivision/srt) Video:

Lazy Panda 10 Feb 29, 2024
Fusion is a cross-platform App Dev ToolKit build on Rust . Fusion lets you create Beautiful and Fast apps for mobile and desktop platform.

Fusion is a cross-platform App Dev ToolKit build on Rust . Fusion lets you create Beautiful and Fast apps for mobile and desktop platform.

Fusion 1 Oct 19, 2021
An opinionated, monolithic template for Bevy with cross-platform CI/CD, native + WASM launchers, and managed cross-platform deployment.

??️ Bevy Shell - Template An opinionated, monolithic template for Bevy with cross-platform CI/CD, native + WASM launchers, and managed cross-platform

Kurbos 218 Dec 30, 2022
Proof-of-concept of getting OpenXR rendering support for Bevy game engine using gfx-rs abstractions

Introduction Proof-of-concept of getting OpenXR rendering support for Bevy game engine using gfx-rs abstractions. (hand interaction with boxes missing

Mika 52 Nov 14, 2022
shavee is a Program to automatically decrypt and mount ZFS datasets using Yubikey HMAC as 2FA or any USB drive with support for PAM to auto mount home directories.

shavee is a simple program to decrypt and mount encrypted ZFS user home directories at login using Yubikey HMAC or a Simple USB drive as 2FA written in rust.

Ashutosh Verma 38 Dec 24, 2022
Universal changelog generator using conventional commit+ with monorepo support. Written in Rust.

chlog Universal changelog generator using conventional commit+ with monorepo support. chlog can generate the changelog from the conventional commits w

Jeff Yang 3 Nov 27, 2022
Rust implementation of CRC(16, 32, 64) with support of various standards

crc Rust implementation of CRC(16, 32, 64). MSRV is 1.46. Usage Add crc to Cargo.toml [dependencies] crc = "2.0" Compute CRC use crc::{Crc, Algorithm,

Rui Hu 120 Dec 23, 2022
This is a Rust implementation for popular caches (support no_std).

Caches This is a Rust implementation for popular caches (support no_std). See Introduction, Installation and Usages for more details. English | 简体中文 I

Al Liu 83 Dec 11, 2022
A high performence Socks5 proxy server with bind/reverse support implementation by Rust.

rsocx A high performence Socks5 proxy server with bind/reverse support implementation by Rust Features Async-std No unsafe code Single executable Linu

b23r0 259 Jan 6, 2023
An implementation of request routing via a singular grouped regex (with support for path parameter extraction).

rs-regex-router An implementation of request routing via a singular grouped regex (with support for path parameter extraction). Features Design approa

Harry 1 Nov 25, 2021