Written by Aaron Williams, LF Edge Developer Advocate
Ever since Project EVE came under the Linux Foundation’s LF Edge umbrella, we have been asked about porting (and we wanted to port) EVE to the Raspberry Pi, so that developers and hobbyists could test out EVE’s virtualization of hardware. Both were looking for an easy way to evaluate EVE by creating simple PoC projects, without having to buy a commercial grade IoT gateway or another device. They wanted to just get started with something they already had on their desk. And we are excited to announce that we have completed the first part of the work needed to run Windows on a Raspberry Pi 4! We have posted the tutorial on our community wiki and it takes less than an hour to get it up and running.
The RPi
The Raspberry Pi was first released in 2012 with the goal of having a cheap and easy way to teach high school students how to code. It had USB ports to attach a keyboard and mouse, HDMI to hook up to your TV, GPIO (General Purpose Input/Output) pins for IoT, and a networking cable for internet access. Thus for $35 you had a great, cheap computer that ran Linux. The Raspberry Pi Foundation sold a lot of these devices to schools, but the RPi really took off as developers and home hobbyists discovered them, thinking “Wow a $35 Linux computer, I wonder if I could do that home IoT project I have been planning?” Plus, in many companies, the RPi became a great way to create “real” demos and PoCs cheaply.
Fast forward 7 years and we knew that we wanted to port EVE to the RPi, because it was such a large part of the IoT world, especially demos explaining IoT concepts. (It is much easier to go to your manager or spouse and ask for $50 RPi vs. $500+ for some hardware.) But, according to Erik Nordmark, TSC Chair of Project EVE, “the GIC (Global Interrupt Controller) and the proprietary RPI boot code on the RPi3 (and earlier models) prevented it from booting into a Type 1 Hypervisor like Xen without a hacking up strange emulation code.” Thus, while it was possible, it would take a lot work and might not work well.
This changed with the release of the RP4. Roman Shaposhnik, also of Project EVE, and Stefano Stabellini, of the Xen Project, saw that the RPi 4 had a regular GIC-400 interrupt controller that Xen supports right of out the box. Thus, getting Xen to work on the RPi should be pretty easy, right? And as they documented in their article from Linux.com, it wasn’t. “We were utterly oblivious that we were about to embark on an adventure deep in the belly of the Xen memory allocator and Linux address translation layers.” But soon their hard work paid off and they were able to get Xen working and submitted a number of patches that will be part of the Linux 5.9 release. (To learn about Roman and Stefano’s adventure, see their article Xen on Raspberry Pi 4 Adventures at Linux.com). With that done, the EVE team turned their attention to see what work would be needed to complete the virtualization of the RPi, which went pretty smoothly.
Why Windows?
We have been saying since the start of Project EVE, that EVE is to IoT as Android is to phones. Android allows you to write your code and push it to the device without having to worry about the hardware underneath. EVE works much the same way. It virtualizes the hardware, allowing you to push your code across devices. And since EVE is open source, everyone benefits from the “plumbing” being handled by the community. The plumbing in this case is the addition of a new device or family of devices. Thus, when a device is added, the whole community benefits. IoT devices do have an extra security concern, namely they not usually housed in a locked building and instead are out in the open. Therefore, the physical security of the device cannot be guaranteed and it must be assumed that there is no physical security. Because of this, the default for EVE is turn off all external ports, such as USB ports.
This brings us to the question, why Windows? Simply, why not? Windows doesn’t belong on a Raspberry Pi, so we figured that it would be fun to see if it would work. And it worked right out of the box, we just needed to find a containerized version of Windows and then we just deployed it (it is really that easy). And it is a lot of fun using Windows knowing that it is running on a Raspberry Pi!
What work is left
We haven’t done a lot of testing and for us this is a PoC, so we won’t have a full list of limitations. But here are a couple of things that we have found. We will update our tutorial page as the community finds and fixes them.
Asking Petr Fedchenkov and Vladimir Suvorov, lead developers on Project EVE about issues that they have run into, Petr mentioned, “The biggest issue is that there are no drivers for GPU and Windows 10 ARM64 doesn’t have virtio-gpu support. So, we are using ramfb (RAM Framebuffer), which is much more limited.” In layman’s terms, this means that today if you plug a keyboard and monitor into the RPI, you will interact with EVE, not the Windows desktop. The easy workaround is to run RDP (Windows Remote Desktop) or VNC, but in our testing RDP works much better.
The native WiFi does work , but you do need to turn it on via EVE. Remember EVE is designed to give you control of your devices, remotely, yet securely so, the WiFi is turned off by default. As you build EVE for your RPi, you have the option of passing in a SSID, which turns of the WiFi.
Bluetooth is currently not working. USB ports should work, but there needs to be some configuration. We are also not sure about the GPIO pins, we haven’t tested them yet. (see below on how to help out to get these working and tested.
Call for Help
While it is pretty amazing what we have accomplished, but we need a lot of help. If have any interest, in part of this, please let us know. We need help with getting the USB’s fully working plus the items mentioned above. Is there device that you would like to see EVE work on? Please help us port it to that device. We also could use tech writers, bloggers, or anyone that can help us improve our documentation and/or can help us get the word out about EVE. If you are interested, please visit our GitHub, Wiki, or slack channel (#eve).