{"id":20288254,"url":"https://github.com/equation314/rvm-tutorial","last_synced_at":"2025-10-12T07:39:35.638Z","repository":{"id":64868647,"uuid":"569558598","full_name":"equation314/RVM-Tutorial","owner":"equation314","description":"Let's write an x86 hypervisor in Rust from scratch!","archived":false,"fork":false,"pushed_at":"2023-09-10T13:56:11.000Z","size":50,"stargazers_count":148,"open_issues_count":6,"forks_count":29,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-12-08T17:36:11.126Z","etag":null,"topics":["hypervisor","rust","virtual-machine","vmx"],"latest_commit_sha":null,"homepage":"https://www.bilibili.com/video/BV1n84y1V7a4/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/equation314.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-23T05:09:41.000Z","updated_at":"2024-11-29T12:15:24.000Z","dependencies_parsed_at":"2023-01-29T17:01:24.146Z","dependency_job_id":null,"html_url":"https://github.com/equation314/RVM-Tutorial","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equation314%2FRVM-Tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equation314%2FRVM-Tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equation314%2FRVM-Tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/equation314%2FRVM-Tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/equation314","download_url":"https://codeload.github.com/equation314/RVM-Tutorial/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230516183,"owners_count":18238352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hypervisor","rust","virtual-machine","vmx"],"created_at":"2024-11-14T14:46:52.958Z","updated_at":"2025-10-12T07:39:30.603Z","avatar_url":"https://github.com/equation314.png","language":"Rust","readme":"# RVM-Tutorial\n\nLet's write an x86 hypervisor in Rust from scratch!\n\n## Features\n\n* Lightweight enough, only 3K+ LoC\n* Supported guest OS: [NimbOS](https://github.com/equation314/nimbos)\n* Guest/host memory isolation with nested paging\n* Device emulation:\n    + serial port I/O\n    + APIC timer\n* Currently, only supports single core single vCPU and single guest\n\n## Install Build Dependencies\n\nInstall [cargo-binutils](https://github.com/rust-embedded/cargo-binutils) to use `rust-objcopy` and `rust-objdump` tools:\n\n```console\n$ cargo install cargo-binutils\n```\n\nYour also need to install [musl-gcc](http://musl.cc/x86_64-linux-musl-cross.tgz) to build guest user applications.\n\n## Build Guest OS\n\n```console\n$ git submodule init \u0026\u0026 git submodule update\n$ cd guest/nimbos/kernel\n$ make user\n$ make GUEST=on\n```\n\n## Build Guest BIOS\n\n```console\n$ cd guest/bios\n$ make\n```\n\n## Build \u0026 Run Hypervisor\n\n```console\n$ cd hypervisor\n$ make run [LOG=warn|info|debug|trace]\n......\nBooting from ROM..\n\n    RRRRRR  VV     VV MM    MM\n    RR   RR VV     VV MMM  MMM\n    RRRRRR   VV   VV  MM MM MM\n    RR  RR    VV VV   MM    MM\n    RR   RR    VVV    MM    MM\n     ___    ____    ___    ___\n    |__ \\  / __ \\  |__ \\  |__ \\\n    __/ / / / / /  __/ /  __/ /\n   / __/ / /_/ /  / __/  / __/\n  /____/ \\____/  /____/ /____/\n\narch = x86_64\nbuild_mode = release\nlog_level = info\n......\nRunning guest...\n\nNN   NN  iii               bb        OOOOO    SSSSS\nNNN  NN       mm mm mmmm   bb       OO   OO  SS\nNN N NN  iii  mmm  mm  mm  bbbbbb   OO   OO   SSSSS\nNN  NNN  iii  mmm  mm  mm  bb   bb  OO   OO       SS\nNN   NN  iii  mmm  mm  mm  bbbbbb    OOOO0    SSSSS\n              ___    ____    ___    ___\n             |__ \\  / __ \\  |__ \\  |__ \\\n             __/ / / / / /  __/ /  __/ /\n            / __/ / /_/ /  / __/  / __/\n           /____/ \\____/  /____/ /____/\n\narch = x86_64\nplatform = rvm-guest-x86_64\nbuild_mode = release\nlog_level = warn\n......\n```\n\n## Documents\n\n* [in Chinese](https://github.com/equation314/RVM-Tutorial/wiki)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequation314%2Frvm-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fequation314%2Frvm-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fequation314%2Frvm-tutorial/lists"}