Previous GSoC Projects

The wiki is being retired!

Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!

This site lists all previous Google summer of Code projects related to coreboot.

2014

Generic Interface using alternate CBFS access patterns for ARM SoCs

Enhance early coreboot debugging

flashrom

2013

coreboot cheap testing rig

The goal of this project is to create a cheap testing rig which works with the existing board test infrastructure. We have a hardware test system since 2006:

The initial version of our testing rig used a remote power switch and was rather expensive. With cheaper technologies such as X10, it's possible to drop the testing costs per board significantly.

Links

Report



A universal USB-based FWH/LPC/SPI programmer

While flashing SPI chips can be done externally with relative ease using flashrom, hardware to program FWH and LPC chips is beyond the reach of most enthusiasts. Cortex-M processors have become well-established in the open source community due to their low cost and extensive ecosystem. This makes them an ideal candidate for a universal ROM programmer. I propose a hardware/software/firmware ecosystem for a universal ROM programmer based on Cortex-M processors.

Report

Prepare for the lack of super-io UARTs and serialports on new mainboards

There are some common debugging problems people come across when starting a port of a new mainboard for coreboot. First is the flashchip being soldered on the mainboard and second is the lack of serial port connector. I attempt to attack both of these on some level. My primary goals are to add support for memory-mapped serial UARTs and the ECHI debug port mechanism on the commonly used payloads, and to integrate a pre-OS flash writing mechanism in the toolchain to allow easy and safe deployment of new coreboot builds.

Results

flashrom: infrastructure improvements galore

The plan is to tackle some long-standing infrastructure problems that have to be fixed eventually if we want to continue current and future flash chips. The expected outcome of my GSoC programming are the following new features:

Results

2012 - No GSoC

Regretfully, coreboot was not selected for GSoC 2012.

2011 Projects

Spice Payload

The rationale behind the Coreboot Spice Payload is a software component to provide a virtualized desktop to small devices with minimal hardware and software resources. Once the most of the intensive CPU and GPU tasks are moved to the spice server it is possible to set poor devices with a full functional desktop and minimal software requirements in the client side.

Links

Student

Mentors


Porting coreboot to ARM

This includes building basic ARM layout for coreboot and porting it to some available SOCs.

ARM SOC's with PCIe are now on the market for tablets, netbooks and servers. These systems can take advantage of coreboot's strength in properly configuring PCI, SAS, SATA and SCSI devices; fast boot times; and payload support.

Links

Student

Mentors


Coreboot panic room. Diagnostics (also remote flashing)

To help developing coreboot code, we have to set-up remote diagnostics (also flashing) interface in coreboot. We will be able to renew a bricked board through serial port or even do some research through registers in case of panic(). This will enable easier development of CAR, chipset, payloads code.

Links

Student

Mentors


flashrom: add support for the EC inside Intel's ICHs

Flashrom is a program used to read and write directly from/to flash memories such as "BIOS" chips on computer mainboards. In the case of PCs and laptops the access to the memory chips is often controlled by the chipset or other chips (embedded controllers). In the case of newer Intel chipsets it is unknown how the unlocking exactly works and there is no public datasheet explaining it. This project tries to reverse engineer how it works and will re-implement it to allow flashrom to work with newer Intel chipsets when they are configured to be "locked down".

Links

Student

Mentors


2010 Projects

USB drivers for libpayload

OHCI and XHCI drivers for libpayload.

Notice that libpayload code must be licensed BSD-style (so ports from FILO, SeaBIOS or Linux won't work). Pick a given set and tell us why it's enough work for the allocated time, but not too much for you. Also, which sources (if any) you want to draw from. We will not accept code that has been taken from other (GPL) projects. If you are taking this project you have to be willing and capable of writing your own hardware drivers.

Links

Student

Mentors


TianoCore on coreboot

Tiano Core is Intel's EFI implementation. Unlike coreboot, it is not a firmware, but rather a bootloader. In 2008 there was an initial port of TianoCore to run on coreboot, but there are many things left to do.

This project requires no hardware skills, but especially in case of TianoCore will require knowledge of Microsoft compilers as well as the GNU tool chain.

Student

Links

Mentors

Payload infrastructure

Incorporate payload building into the coreboot build. kconfig options could be added for supported payloads, those payload could be updated to build with kconfig as well. Payloads that build with libpayload need would need default configs. Payloads should also be built with the crossgcc tools. This is related to the libpayload and board config infrastructure above. ---MJones

Student

Links

Mentors

flashrom

Note: The list below is an idea collection. Individual list items are simple enough to serve only as partial GSoC task, but they are grouped to reasonable tasks. If you're interested, please talk to us on the flashrom mailing list and/or on IRC irc://irc.freenode.net/#flashrom

http://www.flashrom.org/GSoC/2010 has more flashrom ideas and suggestions.

Student

Links

Mentor

coreboot mass-porting to AMD 780 series mainboards

Grab a couple of AMD 780 based mainboards and port coreboot to it.

Student

Links

Mentors



Projects 2009

VGA BIOS for Geode LX

This project's goal is to write a VGA BIOS (PCI option rom) for AMD Geode LX systems (such as the Linutop, Thincan or XO). There exists a free VGA BIOS but it knows nothing about real hardware. If you really want to kick the iron, this project could be enhanced to contain a complete infrastructure for including hardware initialization code for many different graphics cards.

Links

Mentors

USB Option ROM for SeaBIOS

SeaBIOS is our latest and greatest way to boot all kinds of different operating systems. It is a coreboot payload that implements 16bit BIOS interrupts as they are needed by nearly all boot loaders today. In the last year, SeaBIOS learned how to cope with coreboot ACPI, and how to boot off SCSI drives. One major feature that we're desperately lacking is USB stick/disk/cdrom booting from SeaBIOS. USB support for SeaBIOS should be implemented as a PCI option rom, using the libpayload USB stack. The USB stack currently supports UHCI controllers. Part of this project could also be to add OHCI and EHCI support to the USB stack in libpayload (not a requirement for participation, but would sure be nice!)

Links

Mentors

AVATT part 2

AVATT is coreboot+Linux+KVM as hypervisor in the ROM. A first version was done during last GSoC, but there is still a pretty big TODO list.

TODO

Mentors


Projects 2008

SCSI booting in coreboot

Currently coreboot can not boot from an arbitrary SCSI controller. There are two solutions for the problem:

So we obviously need a solution based on the later. This could as well be implemented as a Linux program, as an intermediate payload, or as a shared library.

The code you are going to write needs to catch the int13 interrupt vector that the SCSI option rom installs and make it available to arbitrary (firmware/payload) code trying to load something from disk.

This is a coreboot v3 project.

All Virtual All The Time (AVATT)

The goal here is to build a system that comes up running Linux and KVM from power on reset. From that point the system could boot anything -- Windows, Linux, *BSD, Plan 9 -- anything that runs on x86 32 and 64-bit architectures. Coreboot would be integrated with a Linux kernel and initrd that had KVM built in. The initrd would include the minimal set of tools needed for starting new KVM virtual machine guests. Note that Linux booting from coreboot is a solved problem, using the buildrom tool, so the main effort here is to develop a minimal KVM infrastructure that can fit in a 2Mbyte FLASH part. Linux + X11 have been demonstrated in a 1Mbyte part, so we feel that this task is not impossible, but will be a terrific learning experience for a student, and will provide the community with a valuable resource when it is finished. The Xen and KVM communities have both asked for this capability for some time now, so there is a group of people ready to use this system when it is finished.

coreboot graphical port creator

In coreboot v2, every port to a new mainboard requires that you touch a lot of source files with only minimal changes. In version 3 we try to fix this issue and pack all mainboard specific information into a configuration file that we call the Device Tree Source (DTS). This Device Tree config file is a simple text file describing what static (non-detectable and/or soldered on) devices are used on the mainbard and how they are wired (SPD-ROM, Interrupt Routing, SuperIO, Northbridge, Southbridge, Hypertransport,..). It is mostly organized as a tree (with some special cases, Hypertransport allows cycles for instance)

The idea is to create a tool, based on the [www.eclipse.org/ Eclipse IDE], Swing, or your favourite portable toolkit, which allows you to drag and drop those components together and describe how they are wired.

This would be a great help for mainboard vendors that build mainboards of already supported components. No more reading of coreboot code would be required, but rather only the understanding of the hardware, and probably the mainboard schematics.

This is a coreboot v3 project. It requires good Java and/or Eclipse skills (or whatever toolkit/language you choose)

libpayload

There are many, many "payloads" for coreboot these days: Linux, FILO, GRUB2, Tiano Core, Open Firmware, etherboot, and some more to count. All these payloads have a few functions in common that they use to read information from coreboot or change coreboot settings in NVRAM. It would be incredibly useful to unify all this code and enhance it, so that not every coreboot payload has to keep reinventing the wheel.


Projects 2007

Booting Windows and other Operating Systems in LinuxBIOS [1]

The goal of this sub project is to figure out how to boot Windows Vista/XP/2003. There are three approaches that might proof successful:

Port GRUB2 to work in LinuxBIOS

GRUB2 is going to be _the_ bootloader of choice in the forseeable future. As such, it could replace both Grub legacy and FILO, the LinuxBIOS hack for grub compatibility. FILO lacks many features that come with GRUB2 with no extra effort.

This task splits into four sub-problems:


CMOS Config / Device Tree Browser Payload

Unlike other BIOSes, Linux has no such thing as a "CMOS setup". This does not mean that you can not configure it. There is a nice and small Linux command line utility called lxbios for that purpose. But people are often asking for a builtin config tool. Such a config tool could feature VGA graphics (maybe even VESA?), it should be easy to use, allow to browse information from LinuxBIOS' central structure: the device tree, and provide lxbios functionality with some sex appeal.

This is a LinuxBIOSv3 project.

Open Firmware payload for LinuxBIOS

Mitch Bradley from Firmworks, Inc. released the Open Firmware sources under a BSD license. The released code does work in LinuxBIOS, but could use some proper integration and testing on some hardware or in Qemu.

Some ideas:

Some parts might require cooperation with other GSoC projects:

This project might benefit from Forth skills.

GNUFI or TianoCore payloads

There are two open source EFI implementations out there. GNUFI (or here or here) and TianoCore. Try getting those to work as LinuxBIOS payloads, or change LinuxBIOS so it can load them as payloads.

This project requires no hardware skills, but especially in case of TianoCore might require knowledge of Windows compilers (VC2005?)

Boot OpenSolaris, FreeBSD, NetBSD, OpenBSD or other free OSes

LinuxBIOS has (despite its name) been a little Linux centric. A nice project would be to analyze what it takes to get OpenSolaris, the BSDs or other free operating systems to work in LinuxBIOS, without the need for legacy emulation (ie. no ADLO)

Improve Linux as a BIOS [2]

There's a small project called buildrom which creates a payload from a Linux kernel and some user space utilities. It has been written to work with the OLPC. This project could be enhanced to work on all supported LinuxBIOS motherboards.

Porting Flashrom utility to Windows 2000/XP

Flashrom is used to burn LinuxBIOS binary to flash chips in the target motherboards. It runs on Unix/Linux. In this project the flashrom utility is ported from Linux/Unix to Windows 2000/XP. The Windows port is called Winflashrom. The project is divided into two tasks. The first task is to port most of the user space flashrom source code to MinGW and the second task is to code a Windows device driver to provide direct hardware access for the user space code. The difficulty of this task is in providing a reliable Windows device driver for the user space code.