linuxkit/contrib/crosvm/README.md
Rolf Neugebauer f1667aac67 contrib: Update crosvm README
Signed-off-by: Rolf Neugebauer <rn@rneugeba.io>
2018-11-22 23:03:26 +00:00

60 lines
1.9 KiB
Markdown

The Chrome OS Virtual Machine Monitor
[`crosvm`](https://chromium.googlesource.com/chromiumos/platform/crosvm/)
is a lightweight VMM written in Rust. It runs on top of KVM and
optionally runs the device models in separate processes isolated with
seccomp profiles.
## Build/Install
The `Makefile` and `Dockerfile` compile `crosvm` and a suitable
version of `libminijail`. To build:
```sh
make
```
You should end up with a `crosvm` and `libminijail.so` binaries as
well as the seccomp profiles in `./build`. Copy `libminijail.so` to
`/usr/lib` or wherever `ldd` picks it up. You may also need `libcap`
(on Ubuntu or Debian `apt-get install -y libcap-dev`).
You may also have to create an empty directory `/var/empty`.
## Use with LinuxKit images
You can build a LinuxKit image suitable for `crosvm` with the
`kernel+squashfs` build format. For example, using `minimal.yml` from
the `./examples` directory, run (but also see the known issues):
```sh
linuxkit build -format kernel+squashfs -decompress-kernel minimal.yml
```
The `-vmlinux` switch is needed since `crosvm` does not grok
compressed linux kernel images.
Then you can run `crosvm`:
```sh
crosvm run --disable-sandbox \
--root ./minimal-squashfs.img \
--mem 2048 \
--socket ./linuxkit-socket \
minimal-kernel
```
## Known issues
- With 4.14.x, a `BUG_ON()` is hit in `drivers/base/driver.c`. 4.9.x
kernels seem to work.
- With the latest version, I don't seem to get a interactive console.
- Networking does not yet work, so don't include a `onboot` `dhcpd` service.
- `poweroff` from the command line does not work (crosvm does not seem
to support ACPI). So to stop a VM you can use the control socket
and: `./crosvm stop ./linuxkit-socket`
- `crosvm` and its dependencies compile on `arm64` but `crosvm` seems
to lack support for setting op the IRQ chip on the system I
tested. I got: `failed to create in-kernel IRQ chip:
CreateGICFailure(Error(19))`.