Hi - I’m Eliyahu. I’m currently a student at Cambridge in my secod year studying engineering. I enjoy both hardware and software development, and worked in the past doing embedded development for a Greenpower race car.
Posts
-
NVMe booting on 12th gen Poweredge
For anyone who just wants the solution without the story, skip to here.
-
Headphone repair and upgrades
For the past few years, I’ve been using Senheiser HD 202s as my headphones (I found them lying unused in a cupboard - yay free stuff). So far they’ve been pretty good in my opinion, having never devled into the rabbithole that is audio at any point. Unfortunately, a couple weeks ago, one of the conductors in their cable seems to have come loose, and now the headphones only work when the cable is bent at a particular angle.
-
Writing a UEFI bootloader - part 4
It’s been a while since I’ve written a post in this series, but not to worry, because stuff has been happening. The bootloader has significantly progressed since the last post, I just haven’t had the want or time to write another blog post until now. So the big change for this post is that the UI is now actually somewhat usable. I tried for a bit of time to write a UI library which went nowhere since I couldn’t wrap my brain around it. For a while I had given up on that idea and was planning on this post coming much later in the series, until I realised while writing a project for work that LVGL exists - so now I have LVGL running in the bootloader. The UI could probably do with improving, but the actual code is there. I was originally planning to use lvgl-rs which seem to be the official LVGL rust bindings. Unfortunately while messing around in it I discovered what I think are some soundness issues (currently writing a bug report). I had a go at trying to patch them, but couldn’t figure out how to do it in the current design without propagating generics throughout half the codebase in ways that didn’t make sense. Instead I started working on my own version (currently unpublished) based on a lot of the original code but with some changes to the architecture. Some work later, and I’ve ended up with this.
-
Unwinding in a Rust kernel - part 2
In the last post I managed to get unwinding working within the kernel, but there was the small issue that it would only print out addresses, and each one would need to be converted with a tool like
addr2lineto get any useful debugging information out. The best solution would probably be to get the bootloader to load in debuginfo and parse that in the same wayaddr2linedoes. However, this has a couple of issues: -
Unwinding in a Rust kernel - part 1
Apparently it’s been nearly two months since the previous post. Not to worry though, because (after A levels finished) I’ve been busy with more Popcorn, and made significant progress in both the design and implentation. There’s a couple of UEFI posts still to come (one currently in the pipeline) but I thought it might be worth posting soemthing in the meantime to give the appearance that this blog is not in fact dead.
-
Writing a UEFI bootloader - part 3
With filesystem access in place, we can start working on loading images from the disk, and putting together a basic UI. Once that’s in place, we should be able to load a kernel image from disk, and boot into it.
-
Writing a UEFI bootloader - part 2
At the end of the last post, I said that I’d probably start working on filesystems and image rendering. And I’m pleased to say that both of those have been a success.
-
Writing a UEFI bootloader - part 1
For some reason, I decided that for this attempt, it would be fun trying to write a bootloader myself rather then relying on GRUB. I could make up probably-untrue excuse about easier access to hardware control, like the GOP, but the real reason is likely closer to “why not?”. I discovered that there’s a uefi-rs crate already available, so started by reorganising the Popcorn2 directory structure to have both a kernel and a bootloader binary within one cargo workspace. Copying the tutorial was supposed to give a nice “Hello world!”, but instead it gave some lovely compiler errors about not being able chunks of the stdlib. It seems that, like with building the main kernel, it needs
build-stdto compile thecorecrate (which wasn’t explained in the tutorial). With that out of the way, creating an EFI partition and booting qemu gives the nice “Hello world!” output, but I’d prefer to try and do something fancier. -
Popcorn - attempt 2
Having been demotivated from continuing with Popcorn attempt 1 with all the strange, hard to track down memory bugs, I decided to start again (and write this series of blog posts alongside) but in Rust. I technically have already done some OS development in Rust, in the experimental pre-Popcorn times, but at that point had never used it before, and didn’t properly understand how to write idiomatic Rust. This caused a lot of borrow checker fighting and unnecessary
unsafeblocks, which is why I made the decision to write attempt 1 of Popcorn in C++ instead.
subscribe via RSS