Ubuntu Bionic for OpenFrame (Kernel 3.16)
Operating System Changes / Kernel Changes
Given the last operating system release I'd made was Ubuntu Trusty, which left support in April 2019, I thought it would be sensible to create something new. Given that Ubuntu Bionic is the last to support 32-bit hardware I thought I'd give it some polish, meaning I spent far too much time on it. There's an automated build system now, a single image for all devices, plus the groundwork is done for supporting Debian in the future, where 32-bit support should live on.
There are a few things which are a bit different to previous images; most notably this is a command line only image, created to be as 'vanilla' as possible. This means you can use instructions available for any Ubuntu Bionic system to install whichever GUI environment you might like. Or none at all if you just want a single-use system.
I also needed to add Bluetooth to my OpenFrames and tried out a bunch of combination adapters. I eventually found this EZCast WiFi 2.4/5 GHz + Bluetooth 4.2 Adapter for £10 from Amazon. You can easily remove the plastic housing (though not strictly necessary) and replace the old internal Ralink 2770F card.
- Single image for any OpenFrame.
- Built for size; about 430 MB space used initially.
- Fully working audio and OpenGL with kernel drivers.
- Automating scripts for completing common tasks (eg. installing X.Org Server).
- Support for the Realtek 8821CU combined 5 GHz WiFi and Bluetooth 4.2 module.
- Simple before-boot wireless network configuration.
Installation and Setup
So I'm not editing in multiple places, please check the instructions on birdslikewires.net.
If you're using an OpenFrame 2 the wireless connection does work... sort of. Performance is absolutely terrible and I've not been able to do anything about it. Maybe it's my OF2 which is at fault, but feedback would be appreciated. We're using the brcmsmac driver; the b43 was worse and broke Bluetooth for me. The broadcom-wl driver might do the trick, but there are licensing issues, so I can't distribute it. Good luck!
Because I wanted to experiment with automated image creation, Ubuntu Bionic for OpenFrame is built without user intervention on one of my servers. Every time a new version of the 3.16 kernel is released the build system will automatically fetch, patch and compile it, along with all support modules, then create a new image. You can tell if it's an automated build as the kernel version will be, for example, 3.16.71op (no number at the end).
Individual builds are not tested, so please post here if there's something obviously broken.
If you want to see the build log for the last run, they're all here.
This was really an experiment in producing an end-to-end, intervention-free process for creating operating system images which could be applied to any system, starting with kernel source code and working up from there. It's not quite as hardcore as compiling the entire OS a la Gentoo Linux, but there was still a decent learning curve. We're cross-compiling everything in a 32-bit schroot environment on a 64-bit server, using the headers from the kernel we've built to compile external modules and then building and updating the entire OS from the Ubunutu base system into an image file, without ever touching a real OpenFrame device.
I was particularly pleased to be able to add support for a decent 5 GHz wireless adapter with Bluetooth, even though it required a lot of work to find suitable drivers which could be 'encouraged' into compiling for kernel 3.16, plus the added work of automatically recompiling them for every new kernel. I did try to get the drivers working for the original Openpeak OS, but there's no way it was worth the effort for me; I'm no driver programmer and I think there's a lot that would need modifying. Someone prove me wrong!
Anyone wanting to investigate any of this for themselves, all of the code is here:
You may notice we're still using kernel 3.16. Everything works for this process right up to the latest kernel 5.2, except for ALSA audio switching. If you know anything about C programming or ALSA, please help in the 'Annual ALSA Appeal' thread. We have almost everything working, including line out detection; the only thing remaining is properly muting the internal speaker when a line out is connected. At the moment the speaker remains powered and an audio system interference crackle is always present. Get this fixed and I'll be able to bump us up to the latest long-term kernel.
This should be a great little project platform, so have fun with it! You'll find many Debian or Ubuntu guides are directly applicable, including a lot of Raspberry Pi guides - just don't go trying to install their ARM binaries, that won't work!