Use GRUB2 and a boot framebuffer for a smoother boot splash

Registered by Colin Watson on 2010-04-08

GRUB2 supports programming a VBE mode in the boot loader and telling the kernel about it, causing the kernel to use a framebuffer at boot. With Linux 2.6.34, vesafb/efifb can hand over smoothly to a KMS driver, allowing us to assemble all of this into something very close to a flicker-free boot splash process.

Blueprint information

Status:
Started
Approver:
Robbie Williamson
Priority:
Essential
Drafter:
Colin Watson
Direction:
Needs approval
Assignee:
Colin Watson
Definition:
Approved
Series goal:
Accepted for natty
Implementation:
Started
Milestone target:
None
Started by
Robbie Williamson on 2010-11-01

Whiteboard

Old work items for ubuntu-10.10:
[apw] Get the fbcon handoff patch kit together in a PPA: DONE
[apw] Develop cleanedup fbcon handoff patch kit, test, and push to maverick: DONE
[leannogasawara] vesafb needs to be built-in on x86: DONE
[leannogasawara] fbcon needs to be built-in on all architectures (already done on ports): DONE

Work items for natty-alpha-1:
[apw] confirm patches survived the natty rebases: DONE
[jeremyfoshee] tag bugs 605614, 608429, 612626 and other similar bugs and monitor for new: DONE
[apw] give graphics upstreams a heads-up about impending bug reports: DONE
[broder] re-enable lua grub-extras module: DONE
[broder] add white/blacklist functionality to grub2: DONE

Work items for natty-alpha-2:
[cjwatson] re-enable gfxpayload=keep and call for testing: DONE
[cjwatson] Arrange for a suitable GRUB background colour: DONE
[cjwatson] Make sure GRUB shows background even when not showing the menu: DONE

Work items for ubuntu-11.04-beta-2:
[apw] investigate meego framebuffer patches: DROPPED
[apw] start upstream discussions: POSTPONED
[cjwatson] cut over to whitelist mode, if required: DROPPED

Work items for ubuntu-11.04:
[jeremyfoshee] general bug triage work item: TODO
[cjwatson] Change GRUB to program vesafb on BIOS systems rather than efifb: DONE
[cjwatson] Change GRUB packaging to use vesafb by default if we have a new enough kernel: DONE
[cjwatson] Fix Plymouth to cope with framebuffer mode change: DROPPED
Quirk pm-utils to do VBE state/mode save/restore when using efifb or vesafb (already in place upstream; see wiki): DROPPED
Visual indication if we wind up on fbdev as a fallback (replacing old failsafe X): TODO
[cjwatson] Coordinate testing to ensure that GRUB can set a VBE mode on all supported hardware: INPROGRESS
[cjwatson] Once everything is working well so that it can be done attractively and discreetly, restore brief pause during GRUB startup to allow menu access: TODO

Anybody have thoughts on what triggers whitelist vs. blacklist mode? Probably don't want a new variable in /etc/default/grub, since that's hard to transition without a dpkg conffile conflict. Can the changeover be triggered on something else? apport is the obvious thing, but we turn off apport way later than we want to switch to whitelist mode. I'm also thinking that setting GRUB_GFXPAYLOAD_LINUX in /etc/default/grub overrides any hardware detection, unless someone thinks that's crazy -broder

I figured we'd just switch it over in code. I agree with you on GRUB_GFXPAYLOAD_LINUX. -cjwatson

Just linked a branch with the stuff I've been working on in one place. I've also pushed a test build to https://launchpad.net/~broder/+archive/ubuntu-tests to see what comes out. If everything works correctly, you'll be able to create and then add lines to /boot/grub/gfxblacklist of the form "v0000d0000sv0000sd0000bc00sc00" (modeled after the kernel's module aliases). Hex digits have to be lower case, and replace any digit with "." to make it a wildcard. -broder

I believe that we no longer need to fix Plymouth to cope with a framebuffer mode change, now that we've stopped temporarily loading vesafb during boot. -cjwatson

(?)

Work Items