Onboarding Resources
Various links to useful resources for learning about virtual machines and the technology behind crosvm.
Talks
Chrome University by zachr (2018, 30m)
Life of a Crostini VM (user click -> terminal opens)
All those French daemons (Concierge, Maitred, Garcon, Sommelier)
NYULG: Crostini by zachr / reveman (2018, 50m)
Overlaps Chrome University talk
More details on wayland / sommelier from reveman
More details on crostini integration of app icons, files, clipboard
Lots of demos
Introductory Resources
OS Basics
OSDev Wiki (A lot of articles on OS development)
PCI Enumeration (Most of our devices are on PCI, this is how they are found)
Rust
Rust Cheat Sheet Beautiful website with idiomatic rust examples, overview of pointer- and container types
Rust Programming Tipz (with a z, that’s how you know it’s cool!)
Rust design patterns repo
Organized collection of blog posts on various Rust topics
KVM Virtualization
Low-level tutorial on how to run code via KVM
KVM Hello World sample program (host + guest)
Awesome Virtualization (Definitely check out the Hypervisor Development section)
Virtio (device emulation)
Good overview of virtio architecture from IBM
Virtio drivers overview by RedHat
Virtio specs (so exciting, I can’t stop reading)
VFIO (Device passthrough)
Virtualization History and Basics
By the end of this section you should be able to answer the following questions
What problems do VMs solve?
What is trap-and-emulate?
Why was the x86 instruction set not “virtualizable” with just trap-and-emulate?
What is binary translation? Why is it required?
What is a hypervisor? What is a VMM? What is the difference? (If any)
What problem does paravirtualization solve?
What is the virtualization model we use with Crostini?
What is our hypervisor?
What is our VMM?
CMU slides go over motivation, why x86 instruction set wasn’t “virtualizable” and the good old trap-and-emulate
Why Intel VMX was needed; what does it do (Link)
What is a VMM and what does it do (Link)
Building a super simple VMM blog article (Link)