-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
aarch64 Support #198
Comments
Cool, perhaps @MrXinWang or @michael2012z could help. Maybe we could add GICv2 support to CH, not sure how intrusive that would be. |
Awesome! I will reach in Slack for the test environment. The problem of GICv2 is that it does not support MSI. But in CH the virtio-PCI requires MSI. So enabling GICv2 is not very meaningful, too little devices can be supported. |
Here is some updates:
However, Linux boot process is aborted by unhandled kernel paging request:
It looks like the virtual address is in the EFI runtime services region, which is still not handled correctly. Here is the working branch: https://github.com/retrage/rust-hypervisor-firmware/tree/aarch64-ch-support Anyway, it's not so far from booting properly. Update: It works with a custom Ubuntu bionic cloud image. |
I noticed that Linux boot on CH/aarch64 has been broken since |
@retrage Are you only testing with CH or do you also have some QEMU support for aarch64? |
This is the output I get when running with
The PCI bus output looks very strange...if I go back to 411ca73 it still looks peculiar and I have the same issue with booting
|
I test it with CH only. |
Here is output:
|
The PCI device enumeration looks really wrong: This is what I get for RV64 on QEMU (which will be using the same MMIO ECAM code.)
|
#233 fixes the erroneous bus reporting:
|
This issue tracks aarch64 support.
I am working on an experimental implementation of aarch64 support for Rust Hypervisor Firmware.
The code is available at:
Current Status
The changes in this branch have been tested to work using QEMU aarch64 virt.
Similar to x86_64, you can boot the Linux image by specifying the firmware with
-kernel
. The major changes are as follows:BootInfo
for FDT.I will propose these changes in multiple PRs.
To-Do
[ ] Implement remapping of EFI runtime servicesKnown Issues
This aarch64 support has the following issues.
Cloud Hypervisor is not yet supported.This aarch64 support does not yet support Cloud Hypervisor. This is because I do not have an aarch64 machine that supports GICv3 or later and cannot test it. Please let me know if there is a good test environment available.Update: It works with a custom Ubuntu bionic cloud image.
objcopy is required as post-processing after build.QEMU aarch64 virt has an emulator loader that behaves differently depending on the type of binary passed with
-kernel
. When the binary is not ELF, QEMU executes the binary with the first address of the FDT passed in the x0 register.You need to run objcopy as a post-processing step to convert it to raw binary, as follows:This post process is not needed by generating as a raw binary at link time. See eaed071.
Run QEMU with the binary as follows:
qemu-system-aarch64 \ -machine virt \ -cpu cortex-a53 \ -m 8G \ -nographic \ -serial mon:stdio \ -drive id=disk,file=$(AARCH64_IMG),if=none \ -device virtio-blk-pci,drive=disk,disable-legacy=on \ -kernel target/aarch64-unknown-none/debug/hypervisor-fw
The text was updated successfully, but these errors were encountered: