# Onboarding Resources Various links to useful resources for learning about virtual machines and the technology behind crosvm. ## Talks ### [Chrome University](https://www.youtube.com/watch?v=2Pc71zYWFDM) by zachr (2018, 30m) - Life of a Crostini VM (user click -> terminal opens) - All those French daemons (Concierge, Maitred, Garcon, Sommelier) ### [NYULG: Crostini](https://www.youtube.com/watch?v=WwrXqDERFm8) 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](https://wiki.osdev.org/Main_Page) (A lot of articles on OS development) - [PCI Enumeration](https://www.khoury.northeastern.edu/~pjd/cs7680/homework/pci-enumeration.html) (Most of our devices are on PCI, this is how they are found) - [ACPI Source Language Tutorial](https://acpica.org/sites/acpica/files/asl_tutorial_v20190625.pdf) ### Rust - [Rust Cheat Sheet](https://cheats.rs/) Beautiful website with idiomatic rust examples, overview of pointer- and container types - [Rust Programming Tipz](https://github.com/ferrous-systems/elements-of-rust) (with a z, that’s how you know it’s cool!) - Rust [design patterns](https://github.com/rust-unofficial/patterns) repo - Organized [collection](https://github.com/brson/rust-anthology/blob/master/master-list.md) of blog posts on various Rust topics ### KVM Virtualization - [Low-level tutorial](https://lwn.net/Articles/658511/) on how to run code via KVM - [KVM Hello World](https://github.com/dpw/kvm-hello-world) sample program (host + guest) - [KVM API docs](https://www.kernel.org/doc/html/latest/virt/kvm/api.html) - [Awesome Virtualization](https://github.com/Wenzel/awesome-virtualization) (Definitely check out the Hypervisor Development section) ### Virtio (device emulation) - [Good overview](https://developer.ibm.com/technologies/linux/articles/l-virtio/) of virtio architecture from IBM - [Virtio drivers](https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone) overview by RedHat - [Virtio specs](https://docs.oasis-open.org/virtio/virtio/v1.1/csprd01/virtio-v1.1-csprd01.html) (so exciting, I can’t stop reading) - [Basics of devices in QEMU ](https://www.qemu.org/2018/02/09/understanding-qemu-devices/) ### VFIO (Device passthrough) - [Introduction to PCI Device Assignment with VFIO](https://www.youtube.com/watch?v=WFkdTFTOTpA) ### 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](http://www.cs.cmu.edu/~410-f06/lectures/L31_Virtualization.pdf) 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](https://lettieri.iet.unipi.it/virtualization/2018/hardware-assisted-intel-vmx.pdf)) - What is a VMM and what does it do ([Link](http://pages.cs.wisc.edu/~remzi/OSTEP/vmm-intro.pdf)) - Building a super simple VMM blog article ([Link](https://unixism.net/2019/10/sparkler-kvm-based-virtual-machine-manager/)) ## Relevant Specs - [ACPI Specs](https://uefi.org/acpi/specs) - [DeviceTree Specs](https://www.devicetree.org/specifications/) - [Vhost-user protocol](https://qemu-project.gitlab.io/qemu/interop/vhost-user.html)