As part of this year's Google Summer of Code I’m working for the LinuxBIOS project. My assignment is to make GRUB2 work as payload for LinuxBIOSv3 (the most recent version of LinuxBIOS). This means, that GRUB2 ends up in the flash ROM and gets loaded by LinuxBIOSv3 (which sets up the memory controller and things like that), so that GRUB2 can continue the boot process (provide a menu, load the system, etc)
One of the issues of that task is that GRUB2 so far only had a disk driver that uses the PCBIOS interfaces - highly compatible and somewhat nice to use, but on a LinuxBIOS system, these interfaces do not exist (and shouldn’t - being 20 years old and part of the 16bit interface).
The last few months I worked on getting GRUB2 to load at all, on using keyboard and vga text mode (which are also done via PCBIOS in GRUB2), and on providing a serial console (easier than I thought).
Today, I finally worked on the IDE driver - reusing code from OpenBIOS (somewhat related to LinuxBIOS), and managed to get it ported in 8 hours or so.
So, what’s left for GSoC for me?
- Booting a multiboot client doesn’t work for weird reasons. While this isn’t strictly part of my assignment, having a boot loader that can’t boot is kinda - pointless..
- Cleaning up the code, separating it out, manage all the licensing mess that the FSF generates for their projects and get the code in their repository (the changes I made on the LinuxBIOS side are already committed)
- The IDE driver I used provides an ATAPI interface already, but there are some small issues with accessing CDs (with block sized 2048 bytes) from GRUB2 (assuming all devices have blocks sizes 512 bytes).