xref: /aosp_15_r20/external/crosvm/docs/book/src/onboarding.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1# Onboarding Resources
2
3Various links to useful resources for learning about virtual machines and the technology behind
4crosvm.
5
6## Talks
7
8### [Chrome University](https://www.youtube.com/watch?v=2Pc71zYWFDM) by zachr (2018, 30m)
9
10- Life of a Crostini VM (user click -> terminal opens)
11- All those French daemons (Concierge, Maitred, Garcon, Sommelier)
12
13### [NYULG: Crostini](https://www.youtube.com/watch?v=WwrXqDERFm8) by zachr / reveman (2018, 50m)
14
15- Overlaps Chrome University talk
16- More details on wayland / sommelier from reveman
17- More details on crostini integration of app icons, files, clipboard
18- Lots of demos
19
20## Introductory Resources
21
22### OS Basics
23
24- [OSDev Wiki](https://wiki.osdev.org/Main_Page) (A lot of articles on OS development)
25- [PCI Enumeration](https://www.khoury.northeastern.edu/~pjd/cs7680/homework/pci-enumeration.html)
26  (Most of our devices are on PCI, this is how they are found)
27- [ACPI Source Language Tutorial](https://acpica.org/sites/acpica/files/asl_tutorial_v20190625.pdf)
28
29### Rust
30
31- [Rust Cheat Sheet](https://cheats.rs/) Beautiful website with idiomatic rust examples, overview of
32  pointer- and container types
33- [Rust Programming Tipz](https://github.com/ferrous-systems/elements-of-rust) (with a z, that’s how
34  you know it’s cool!)
35- Rust [design patterns](https://github.com/rust-unofficial/patterns) repo
36- Organized [collection](https://github.com/brson/rust-anthology/blob/master/master-list.md) of blog
37  posts on various Rust topics
38
39### KVM Virtualization
40
41- [Low-level tutorial](https://lwn.net/Articles/658511/) on how to run code via KVM
42- [KVM Hello World](https://github.com/dpw/kvm-hello-world) sample program (host + guest)
43- [KVM API docs](https://www.kernel.org/doc/html/latest/virt/kvm/api.html)
44- [Awesome Virtualization](https://github.com/Wenzel/awesome-virtualization) (Definitely check out
45  the Hypervisor Development section)
46
47### Virtio (device emulation)
48
49- [Good overview](https://developer.ibm.com/articles/l-virtio/) of virtio architecture from IBM
50- [Virtio drivers](https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone)
51  overview by RedHat
52- [Virtio specs](https://docs.oasis-open.org/virtio/virtio/v1.1/csprd01/virtio-v1.1-csprd01.html)
53  (so exciting, I can’t stop reading)
54- [Basics of devices in QEMU ](https://www.qemu.org/2018/02/09/understanding-qemu-devices/)
55
56### VFIO (Device passthrough)
57
58- [Introduction to PCI Device Assignment with VFIO](https://www.youtube.com/watch?v=WFkdTFTOTpA)
59
60### Virtualization History and Basics
61
62- By the end of this section you should be able to answer the following questions
63  - What problems do VMs solve?
64  - What is trap-and-emulate?
65  - Why was the x86 instruction set not “virtualizable” with just trap-and-emulate?
66  - What is binary translation? Why is it required?
67  - What is a hypervisor? What is a VMM? What is the difference? (If any)
68  - What problem does paravirtualization solve?
69  - What is the virtualization model we use with Crostini?
70  - What is our hypervisor?
71  - What is our VMM?
72- [CMU slides](http://www.cs.cmu.edu/~410-f06/lectures/L31_Virtualization.pdf) go over motivation,
73  why x86 instruction set wasn’t “virtualizable” and the good old trap-and-emulate
74- Why Intel VMX was needed; what does it do
75  ([Link](https://lettieri.iet.unipi.it/virtualization/2018/hardware-assisted-intel-vmx.pdf))
76- What is a VMM and what does it do ([Link](http://pages.cs.wisc.edu/~remzi/OSTEP/vmm-intro.pdf))
77- Building a super simple VMM blog article
78  ([Link](https://unixism.net/2019/10/sparkler-kvm-based-virtual-machine-manager/))
79
80## Relevant Specs
81
82- [ACPI Specs](https://uefi.org/acpi/specs)
83- [DeviceTree Specs](https://www.devicetree.org/specifications/)
84- [Vhost-user protocol](https://qemu-project.gitlab.io/qemu/interop/vhost-user.html)
85