How to make the legacy SeaBIOS firmware slot the default on a Haswell/Broadwell based Chromebook

Divulged this evening by Duncan Laurie on the coreboot mailing list:

If you want to boot SeaBIOS by default and you have unlocked the SPI flash write protection you can set flags in the (write protected) “GBB” flash region that will make it boot legacy mode by default.

In Chrome OS there is a script called set_gbb_flags.sh that will do this for you. Run the script with no arguments to get a list of possible flags and then to enable short dev mode screen (1 second timeout) followed by default legacy mode boot you could use these flags:

GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400

/usr/share/vboot/bin/set_gbb_flags.sh 0x489

85 thoughts on “How to make the legacy SeaBIOS firmware slot the default on a Haswell/Broadwell based Chromebook”

    1. There has been the occasional report of the RW Legacy (i.e. SeaBIOS) slot being wiped out and unusable. I suspect this is because the person(s) perhaps didn’t disable write-protect, or perhaps some other issue. Just be aware it *isn’t* fool proof.

  1. Thank you for this post.

    I’m just curious what would happen if you pressed the space bar after performing these steps. Would it wipe out these settings? Could it potentially brick the machine?

  2. How i unlock the SPI flash write protection ?

    I just try to run the set_gbb_flags.sh 0x489 and it apears:

    /usr/bin/old_bubs/set_gbb_flags.sh: 81: flashrom: not found

    Dont know what to do, help pls !

  3. ( im using c720 on chrome os with developer mode ) And what i want to do, is not to push Control + D everytime i open my chromebook. Then i need to that ? and if i need to do it… ( like i was trying )

    How i unlock the SPI flash write protection ?

    I just try to run the set_gbb_flags.sh 0×489 and it apears:

    /usr/bin/old_bubs/set_gbb_flags.sh: 81: flashrom: not found

    Dont know what to do, help pls !

  4. If you *just* want to get rid of the delay, as opposed to enabling the SeaBIOS slot by default, you will need to adjust the number you type there. Run the script without any arguments to get info on what each number means.

  5. Is there a way to make SeaBios the default with in the linux side of things? I got a little hasty and compleatly removed my chrome os partiotion to make room for Xubuntu and any storage I could get out of the 16 GB SSD. Am I just going to have to re-install chrome os, removing Xubuntu in the process, and making Seabios the default from there? Also, if I do that and then remove chrome os again will it revert back to staying on the splash screen and defaulting to chrome os?

    1. I think that script is in the CrOS SDK (albeit named with “old” at the front) so try installing the CrOS SDK (mini-layout) running it from there in your Xubuntu install.

      It’s technically easier just to go back to ChromeOS, if you haven’t anything in your Xubuntu install that needs saving/preserving. And no, it won’t change the flags back unless you expressly do so with the script. For extra safety, once the flags are changed as above, the Chromebook won’t do anything if someone presses “space” by accident except beep. HTH.

  6. Can someone please upload the c720 factory bios, I no longer have mine and would love to go back to factory for now. I have googled all I can but can’t seem to find the image. Thanks in advance.

  7. I was getting really tired of my 2-year-old constantly button-mashing and wiping out my Ubuntu install. I removed the screw and ran the script as root with the flags you recommended (0x489) and everything works like a charm! Thank you so much!

  8. I want to not have to press Ctrl – D on boot up to pass Scary Boot Screen. So only the 0x000001 Flag I want, I have a HP Chromebook 14 Snow White and do not care about Seabios at all – I don’t use it.

    Given this do I need to remove write – protect screw, if so where is it? I can’t seem to find any documentation online in regards to the screws position on HP Chromebook 14?

    Does the chromebook still beep each time it boots up with shortened Boot Screen?

    Regards – Harrison

    1. Yes, changing the GBB flags requires removing the write-protect screw, because the ROM has to be read and rewritten during the process.

      There is a picture of where the screw is somewhere, but I’m not sure I’d be able to find it easily. It is situated on the right-lower side of the board, and there is a gap in the surround (which the screw makes a circuit of when in). Can’t remember whether it’s on the top or bottom side, so you make have to take the board fully out to get at it.

      I don’t know whether it still beeps with just that one flag, you will just have to try it.

  9. Mr. Lewis

    Thank you for the work and publishing you’ve done regarding these BIOS.

    I would utilize your Bios for the ‘falco’ but I am ‘concerned’ about the operational integrity of the chromebook when you state the power saving function is even worse than normal? Do I misunderstand? Would you say the Bios you have for the HP Chromebook 14 falco is satisfactory for use or useful with notable limitations?
    If it still needs work, do you intend to work out the kinks, if so , any idea when?

    Again thank you for the work you’ve done and the dissemination of that information.

    BN

    1. I take it you’re using the guffy language because English is not your first?

      You are probably better off just changing the GBB flags. The power saving problem is caused by the TPM module. There are a couple of patches which do away with the TPM code completely, when not using ChromeOS. However, they are of limited use, because the Linux kernel XHCI driver won’t currently allow the laptop to go in and out of suspend more than once, anyway. So, no, I don’t plan on doing any more with it until the kernel XHCI driver is sorted out.

  10. Dear all is ok only driver not workin.

    We waitin for another tutorial how to change in default factory google os. Windows work well but this model is disign for google os. any news pls let me know how to factory reset in G.OS

  11. The laptop is Acer C720. I have installed windows 7 is work well, but problem is for some driver.

    Now need to change in chrome os.
    What can i do?

    You asked to create chrome os usb and to change flags back to 0.
    How to change flags back in 0?
    In my machine i have windows 7 for moment :/

  12. Hi John

    Thanks for this steep.
    I have created USB and work very good but in sudo -s need password?
    What can i do?
    And the moment i have run set_gbb_flags.sh 0×489
    flashrom: not found

    1. It seems to be locking people out at times lately. It should be open to everyone. Anyway, after the last time it happened I decided I couldn’t trust it any more. That’s why you can download the static Flashrom from my site, and I’ve also done my own write-up on my own procedure (using kpartx is a whole lot easier than supplying losetup with the right sector, especially if it changes).

      https://johnlewis.ie/extracting-the-shell-ball-rom-using-a-chromeos-image/

  13. John Lewis: Thanks!

    I ended using your tuto! Working like a charm.

    Btw, I was using your last c720 build, but with the new kernel 1.17Rc1 or Rc2 my xbacklight is broken. Do you have any idea about that?

    1. Yes. I am looking at the at the moment. It’s because of a change in the kernel and the way it deals with back-lights since 3.15. Currently, the kernel identifies whether to enable the back-light using the subsystem vendor ID’s written into the firmware. I have not been changing this value since I didn’t know what it was for, and it didn’t seem to do very much. However, to do things properly the video BIOS should report it has a backlight so that the kernel picks it up. So, I am looking at a way of getting such a BIOS, and including it in all the Haswell builds so that the back-light works, but the need for worrying about subsystem ID’s is obviated. Expect an update in the next day or so.

      Here’s more info. Scott is the one who enlightened me about the issue.

      https://www.libreoffice.org/bugzilla/show_bug.cgi?id=79813

  14. Hi,

    If I have already installed linux on my chromebook (hp 14), and now I decide I want to shorten the developer screen and boot straight into linux by removing the write protection screw etc…will removing the screw and setting those flags wipe my linux that I have installed already? Therefore, forcing me to start over again…

    1. It’s possible, but it doesn’t sound safe for you, as if you had the requisite knowledge to perform it safely you wouldn’t need to ask me. A wipe sounds like the safest option. Which distro are you running? Which model Chromebook do you have?

  15. Hi John, I have a c720 with crunchbang. I’ve stomped chromeos during ht e crunchbang install. is there any way to run the set_gbb_flags.sh script without chromeos on the machine? do I need to restore and then re install linux?

    1. You can download, mount and chroot into a recovery image and run it from there. This will be some help in that regard. Beyond that, you’ll probably want to mount dev, sys and proc before you do the actual chroot’ing, i.e.

      sudo -s
      mount -t sys none /directory/where/chromeos/image/is/mounted/sys
      mount -o bind /proc /directory/where/chromeos/image/is/mounted/proc
      mount -o bind /dev /directory/where/chromeos/image/is/mounted/dev

      chroot /directory/where/chromeos/image/is/mounted /bin/bash

      https://johnlewis.ie/extracting-the-shell-ball-rom-using-a-chromeos-image/

  16. Hi John,

    I have removed the write-protect screw and switched to root. The problem I’m running into is that set_gbb_flags.sh does not exist in my /usr/bin/ directory (or anywhere else, as far as I can tell.

    This is on an Acer c720 with a fresh install of ChromeOS in developer mode.

    Any idea what I need to do? Thanks.

  17. Of course as soon as I take the time to ask for help, I find the solution.

    For me set_gbb_flags.sh was located in /usr/share/vboot/bin/set_gbb_flags.sh

    Just in case someone else has the same problem.

  18. The script has moved to /usr/share/vboot/bin/set_gbb_flags.sh and the flashrom command isn’t in your PATH by default so…

    export PATH=/usr/sbin:$PATH
    sudo /usr/share/vboot/bin/set_gbb_flags.sh 0x489

  19. Unable to set_gbb_flags.sh 0x489, keep getting an error:
    /usr/bin/old_bins/set_gbb_flags.sh: 109: flashrom: not found

    Help?

    chronos@localhost / $ set_gbb_flags.sh
    Changes ChromeOS Firmware GBB Flags value.

    Usage: /usr/bin/old_bins/set_gbb_flags.sh [option_flags] GBB_FLAGS_VALUE

    Defined flags (some values may be not supported by all systems):

    GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
    GBB_FLAG_LOAD_OPTION_ROMS 0x00000002
    GBB_FLAG_ENABLE_ALTERNATE_OS 0x00000004
    GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
    GBB_FLAG_FORCE_DEV_BOOT_USB 0x00000010
    GBB_FLAG_DISABLE_FW_ROLLBACK_CHECK 0x00000020
    GBB_FLAG_ENTER_TRIGGERS_TONORM 0x00000040
    GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
    GBB_FLAG_FAFT_KEY_OVERIDE 0x00000100
    GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC 0x00000200
    GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400

    To get a developer-friendly device, try 0x11 (short_delay + boot_usb).
    For factory-related tests (always DEV), try 0x39.

    flags:
    -d,–[no]debug: Provide debug messages (default: false)
    -f,–file: Path to firmware image. Default to system firmware. (default: ”)
    –[no]check_wp: Check write protection states first. (default: true)
    -h,–[no]help: show this help (default: false)
    chronos@localhost / $ set_gbb_flags.sh 0x489
    /usr/bin/old_bins/set_gbb_flags.sh: 109: flashrom: not found

  20. Thank you for your article.

    Is there any way of doing this from Linux (Ubuntu)? I don’t seem to have ChromeOS any more? Can we just download the script and run it or does it call other stuff?

    I just wanted to have an easy to use Linus laptop where I don’t have to worry about the battery running flat and then losing my Linux environment (this happened to me a while back).

    Cheers Mike

    PS Are there other chromebooks that allow you to upgrade the SSD and come with a processor that’s easy to use with Linux. I quite like the Celeron the C720 comes with but would prefer nicer hardware like the original Toshiba 13″ but sadly the SSD is fixed. 4GB RAM would also be nice.

    1. Thank Duncan Laurie, I just parroted his info.

      You can run it from within a ChromeOS image. There’s an article on here about extracting one. Then it’s just like chrooting into any other Linux image – bind mount dev proc and sys, and then chroot.

      It kind of stopped with the C720/HP14. We’ll have to see what the Broadwell based Chromebooks bring, next year, but sockets and connectors cost money, and Chromebooks are all about saving it. My recommendation is not to get too hung up on upgrading the interior storage – I’ve been running my HP14 with the original SSD and a *really* slow 128GB USB 3.0 stick, mounted to Downloads, the last 6 weeks, and it’s an almost undistinguishable experience from the upgraded SSD (which eventually b0rked) the previous 6 months.

      Stay away from the Baytrail/ARM Chromebooks. Although the high IPS screens are really nice, the processors are way too slow and more suiting of a mobile phone. Broadwell will be the one to watch.

  21. Hey John. Thank you for the article, this looks like exactly what I’m looking for. However, I’m still having some issues I’m wondering if you could give me some advice on, please:

    I originally found this post after having my c720 with Elementary OS installed on it die after I let the battery die and reset the settings regarding legacy boot. Should’ve been no problem to put back, but I haven’t been able to install Elementary OS without it corrupting my Chrome OS installation. So, two questions:

    Is it ok to carry out what you’ve detailed in this post before installing another OS, and will it stick if Chrome OS gets messed up? I’m worried about resetting these flags and then having the Elementary installation mess up and then not being able to get into any OS at all because it defaults to a legacy boot.

    Is there a way that you know of to either edit these flags or edit the legacy boot settings from the Chrome BIOS? Pressing TAB at the Scary Spacebar Screen gives me information on both of these but doesn’t let me edit them.

    Cheers for any help. I’m determined to make my cheap Chromebook into a reliable Linux machine that doesn’t randomly render my whole installation inaccessible when the battery dies!

    1. It is okay to change the flags before OS install. If your battery dies again, you will lose the GBB flags you’ve set, but you can set them again with a ChromiumOS USB stick instead of wiping your beloved distro off. It’s a “feature” of the original C720 firmware.

      No.

      Perhaps you should consider the custom firmware I provide, which will get rid of the ChromeOS specific stuff completely, and make your Chromebook behave like a conventional laptop.

  22. Hello. You are doing some neat stuff. I set my daughter up with an ACER C720 for Christmas. It is running Ubuntu 14, not a dual boot though. I would like to get rid of the scary screen though because my daughter has already once wiped every thing clear by hitting the space bar instead of ctrl-L.

    Can I set these flags in Ubuntu or do I have to be in ChromeOS? I have a recovery image of ChromeOS and am prepared to start over if necessary but it would sure be nice if I didn’t have to.

    Thanks!

  23. Hi I have followed the procedure as stipulated here and it works. However now I would like to restore the device to factory settings.

    Does anyone know the procedure?

    Thank you

  24. yes I do and I can install chrome os back, the issue is I am not sure how to undo the script, it wont let me log back into the command line with any keyboard shortcuts.
    and so chrome os will not boot

    1. That doesn’t make a lot of sense to me. If you have written the backup ROM back to the device, using Flashrom, you will be able to load ChromeOS from a recovery, and so also boot ChromeOS. Please indicate which ROM your Chromebook is currently running.

    1. If you aren’t getting a “ChromeOS is missing or damaged screen”, it means you’re still using one of my custom ROM’s. You flash the backup back using “./flashrom -w backup-date.rom” while cd’ed into the directory the USB stick is mounted on.

  25. Thank you so much for publishing this info. Would you be willing to write out the exact commands needed to execute these changes? I have limited command line experience.

    Thanks!

  26. I’m coming across a problem where I do this, it displays the correct hex 1e9 as the gbb flag, but will still look for the chrome os. I still have to press ctrl+l every time, but now I have to do it within a second of it posting. I don’t get it.

  27. Hi John!

    I really need your help! :-O
    Your rom works just perfekt but…
    after i decided to upgrade my ssd to 128gb it won’t boot a usb stick. i tried to reinstall chromeos on the 128gb and run your script a second time to have a running linux on my ssd. but i can’t get into the chromeos recovery mode and i don’t know how to restore the usual chrome-rom :-/

    Please help me :)

  28. Looking for suggestions:
    I bought a second-hand Acer C720 to do some tinkering, hence immediately removed the write-protect screw (#7 at http://www.chromium.org/_/rsrc/1381990807648/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png ). Having removed it I was still unable to make /usr/share/vboot/bin/set_gbb_flags.sh executable — response was “read-only system”. Yes, I removed the correct #7 screw, I used “sudo su” within crosh, there is no corrosion in the machine unless you count a slight reddish haze on the inside of the back case, and I’ve read all the online discussions that mention removing the bleeping write-protect screw from a C720. Including the thread at https://plus.google.com/+PedroLarroy/posts/YWuxKoxJ98M . I tried putting a bit of insulating foam between the overlapping wire and the #7 metal. I tried cleaning out the area with a toothpick but there was nothing to clean out really. Anyone got any bright ideas out there?

    1. Get another board, or flash externally.

      I had a similar issue with a Lenovo N20P whereby removing the screw didn’t work. Out of desperation, I even tried scraping through the tracks on the board coming from the screw area. In the end, the only way I could flash was by “hard-pulling” a couple of the pins externally, and the board subsequently no longer allows me to flash the SPI at all, any more.

Leave a Reply