Last month or so I have stayed mainly focused on trying to improve the AArch64 port of OSv. And even though I have made quite many strides in that direction, there is still quite a lot of work left to do. Relatedly I have updated the AArch64 wiki page with more details -
https://github.com/cloudius-systems/osv/wiki/AArch64 - feel free to make any corrections you see fit.
First of I wanted to say that OSv runs on newest Raspberry PI 4 on both QEMU and Firecracker with KVM on. If you want to replicate my setup please see this portion of the wiki page -
https://github.com/cloudius-systems/osv/wiki/AArch64#setup-raspberry-pi-4-for-osv. The one I am using has 4GB of memory (these days you can get the 8GB one for around 50$ I think) and boots from SSD which makes it much faster.
So here is what works:
- OSv can boot in both emulated AArch64 mode on QEMU as well as on QEMU and Firecracker with KVM acceleration on real AArch64 hardware (this has only been tested on Raspberry PI 4, though original part of the Wiki mentions Foundation model)
- Both PCI and MMIO devices seem to function well (no MSI/X though)
- Networking seems to function on both QEMU and Firecracker at least based on some simple ping experiments
- OSv Aarch64 kernel and other binaries can be cross-compiled on Fedora (it should not be difficult to make it build natively on RP4 and it might not be that slow but main OSv makefile would need to be adapted)
- Both RAMFS and ROFS images can be built and run
- All unit tests except for Java can be built for Aarch64 and many of them (have not done inventory yet) seem to be passing
- It is possible to debug OSv with the support of the updated loader.py
- the best debugging experience for debugging OSv running on RPI4 is to remote debug it from the Fedora machine where it was cross-compiled)
Here is what is left (the details are in the Wiki page and in newly opened issues):
If anyone has ideas on how to solve those newly open issues (especially the arm clock and SMP one) or fill other gaps (for example the floating point support and multiple stacks), please share your knowledge. Even the high-level pointers to what needs to be done especially in regards to adding the floating-point support would be helpful.
Waldek