e558ab1c45
When a kernel panic occurs in a pVM and the ramdump is enabled there, a ramdump file is generated. This file should eventually be consumed by the client (the owner of the VM) for further analysis. VirtualizationService let its client know that a ramdump has been created and provide access to it. Specifically, the end-to-end flow is as follows: 1) When starting a VM, an empty file is created under the VM-specific directory (`/data/misc/virtualizationservice/<cid>/ramdump`). 2) The file becomes a backing store for a virtio-console device (/dev/hvc3). 3) When a kernel panic occurs, the `crashdump` binary is executed and the `/proc/vmcore` is written to `/dev/hvc3`. After the dump is done, the VM triggers a reboot which is kills crosvm. 4) Virtualizationservice is notified with the exit of crosvm. It then checks the size of the ramdump file. If that is not empty, it can assume that a ramdump was occurred in the pVM. 5) Then virtualizationservice notifies the event via `IVirtualMachineCallback.onRamdump(ParcelFileDescriptor)`, where the parcel file descriptor is the handle to the ramdump file. 6) Client reads the ramdump file. This change also adds `--ramdump` option to the `vm` tool to designate the path where ramdump is saved to. Bug: 238278104 Test: follow the steps. Automated tests will be added in a followup CL 1) Run a pVM: adb shell /apex/com.android.virt/bin/vm run-app --debug full --mem 300 \ --ramdump /data/local/tmp/virt/myramdump \ /data/local/tmp/virt/MicrodroidDemoApp.apk \ /data/local/tmp/virt/apk.idsig /data/local/tmp/virt/instance.img \ assets/vm_config.json 2) Adb shell into the VM adb forward tcp:8000 vsock:10:5555 adb connect localhost:8000 adb -s localhost:8000 root adb -s localhost:8000 shell 3) Load the crashdump kernel /system/bin/kexec \ /system/etc/microdroid_crashdump_kernel \ /system/etc/microdroid_crashdump_initrd.img \ "1 rdinit=/bin/crashdump nr_cpus=1 reset_devices console=hvc0 earlycon=uart8250,mmio,0x3f8" 4) Trigger a crash echo c > /proc/sysrq-trigger 5) Check the ramdump at /data/local/tmp/virt/myramdump Change-Id: I1f90537961632708ca5a889cdd53390030518bb8 |
||
---|---|---|
.. | ||
assets | ||
java/com/android/microdroid/demo | ||
res | ||
Android.bp | ||
AndroidManifest.xml | ||
README.md |
README.md
Microdroid demo app
Building
UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true TARGET_BUILD_APPS=MicrodroidDemoApp m apps_only dist
Installing
adb install -t out/dist/MicrodroidDemoApp.apk
adb shell pm grant com.android.microdroid.demo android.permission.MANAGE_VIRTUAL_MACHINE
Don't run the app before granting the permission. Or you will have to uninstall the app, and then re-install it.
Running
Run the app by touching the icon on the launcher. Press the run
button to
start a VM. You can see console output from the VM on the screen. You can stop
the VM by pressing the stop
button.