ROM Download

This page contains a command to download and run a script, which will flash custom firmware with a SeaBIOS payload on approaching 40 models of Intel based Chromebook – allowing you to run an alternative OS such as Linux. The script will work with ChromeOS or pretty much any Linux distro (at least no one has told me otherwise).

There are 3 types of firmware mod – RW_LEGACY, BOOT_STUB, and Full ROM – not all Chromebooks work with each one:

  • RW_LEGACY modifies a 2MB section of the ROM leaving the stock functionality intact, including the scary developer screen, and will not brick your device. Some Chromebooks already come with a working RW_LEGACY slot, although many of them do not (non-functional keyboard on Panther, non-functional display on Auron_Yuna, or just plain missing, etc.). As well as fixing aforementioned bugs, updating the RW_LEGACY slot can enable further functionality such as booting from SD card/eMMC. So, even in the case of a functioning stock RW_LEGACY, it may be fortuitous to update.

  • BOOT_STUB modifies the last 1MB of the ROM, removing the scary developer screen, but also removes the ability to run ChromeOS natively, carrying a chance of bricking your device. This also leaves the “REFRESH + POWER” functionality of the stock ROM intact, meaning, when you press these keys, the device will immediately reboot and attempt to run ChromeOS Recovery (which isn’t there any more), and give you a blank screen. The only way to then stop it from attempting to run ChromeOS Recovery on every boot, is to take the device apart and disconnect the battery.

  • Full ROM, as the name suggests, is a complete ROM containing a coreboot build with a slice of SeaBIOS on top, and is the most risky. Again, this will remove the ability to run ChromeOS natively. Flashing one of these will wipe out your product data. In the case of Sandy/Ivybridge Chromebooks a full ROM enables hardware virtualisation extensions and suspend. Other models full ROM’s also probably contain idiosyncrasies that the stock firmware does not.

You need to be in dev mode and to have disabled write-protect by enabling a jumper/removing a screw (usually the latter, located somewhere on the main board). Disabling write-protect is not necessary when flashing RW_LEGACY unless you want to make the legacy slot default. See each respective supported Chromebook’s developer information page (if available) for info on opening your Chromebook up and disabling write-protect.

Supported Chipset Matrix

     
SANDY/IVYBRIDGE RW_LEGACY FULL ROM
  ONLY ON 1ST GEN PIXEL YES
HASWELL RW_LEGACY FULL ROM
  YES MOST MODELS
BAYTRAIL RW_LEGACY FULL ROM
  YES NO
BROADWELL RW_LEGACY FULL ROM
  YES NO
BRASWELL RW_LEGACY FULL ROM
  YES NO
SKYLAKE RW_LEGACY FULL ROM
  YES NO
     

Jenkins is now being used along with some scripts, to automate building, and to reduce chances of a brick from human error. Run the script like so, making sure you are only in Crosh shell *not* the *root* Crosh shell if running from ChromeOS:

cd;bash <(curl https://johnlewis.ie/flash_cb_fw.sh)

If for some reason you need to run an older build, you will have to flash it manually. See the ROM Archive.

Join the conversation

1212 Comments

    1. Nah – I need the actual id’s from lspci output – it’s so I can tell the rom to initialise the graphics. Otherwise you won’t be able to see anything until a Linux kernel initiliases the graphics for you.

  1. Yes, this gives an output. What do you need of it exactly?
    There are about 20 lines in the output. Hard to capture them and pass it to my other system…

    1. Use “lscpi -vnnn”, and then look for a section similar to this:

      00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:591b] (rev 04) (prog-if 00 [VGA controller])
      Subsystem: Dell Device [1028:07be]
      Flags: bus master, fast devsel, latency 0, IRQ 136
      Memory at eb000000 (64-bit, non-prefetchable) [size=16M]
      Memory at 80000000 (64-bit, prefetchable) [size=256M]
      I/O ports at f000 [size=64]
      [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
      Capabilities:
      Kernel driver in use: i915
      Kernel modules: i915

      I need the bit that is like this “[8086:591b]”, but the “591b” will likely be something else in your output.

  2. Is there a way to connect (telnet, ssh, etc.) to the Chromebook from my other system? I know the ip is 192.168.1.21 and I can ping it…

  3. Script states that coral is not currently supported at all. Is there an updated script that has coral support?

          1. ok the vga compatible controller is [8086:5a84],

            what do you need from the /proc/cpuinfo

            and anyway i can help with the flash chip size issue?

  4. I am not pushing you at all. I will put the beast aside until I have some news from your part.
    I will set up another system (no Chrome OS) to Fedora…
    BTW – my background: I am founder of Autodesk, Inc and have been a developer of AutoCAD at the very beginning (1982)…

    1. That was odd – seemed like nginx was using an out of date copy of the cert, even though it was correctly renewed by certbot. I think maybe I need to get cron to restart Nginx everyone week or similar.

          1. I actually get the error in the crosh shell after running the flash_cb_fw.sh script and selecting option 1. The error is:
            “#=#=- # #
            curl: (60) SSL: no alternative certificate subject name matches target host name ‘www.johnlewis.ie’
            More details here: https://curl.haxx.se/docs/sslcerts.html

            curl failed to verify the legitimacy of the server and therefore could not
            establish a secure connection to it. To learn more about this situation and
            how to fix it, please visit the web page mentioned above.

            ERROR: legacy-slots/legacy-seabios-latest.cbfs.tar.bz2 could not be downloaded. Please try again later.”

            p.s. thanks for the quick response! :)

            1. Sorry about the slow response this time. :P

              When I manually renewed the certficate (recently) I think I may have got rid of www. as a subdomain, while it was still being referred to inside the script. Hence the error you received. I have removed the reference(s) to http://www.johnlewis.ie and replaced with johnlewis.ie. All should now be okay. Please check and report back.

  5. Hi John,

    I had the opportunity to swap my hardware. I got a new Acer Aspire 5 A515-52-776H 39,6 cm Multimedia Notebook (Intel Core i7-8565U, 8GB RAM, 512GB PCIe SSD, Intel UHD) from a friend. He took my Chromebook for it…
    There is no need for a ROM now as he will stay on Chrome OS.
    Thanks for your efforts.

  6. Just a proposal!

    Would you like to get the Chromebook (that one I dropped for a laptop) for free? I could send it over to Ireland if you wish…
    It’s brand new. Attention: German keyboard which is similar to US one but QWERTZ !!!

    Let me know what you think about

    1. That would be amazing if you did – I would like to see what the state of things now is, as I haven’t worked on a “normal” Chromebook for a couple of years. Don’t worry about the keyboard – I have an Acer Chromebook 15 with a german layout. got used to it. ;)

      Is it okay for me to email you my address? I’m in the UK, BTW – just used to be in Ireland hence the .ie

      Cheers,

      John.

      1. No problems at all. My email is
        (redacted)
        It’s quite good to send it right now. We don’t want to run into custom duty problems, yes?

        Cheers
        Rudolf

        1. You don’t want to get spammed by every bot on the web. :P

          I have your email from your user registration and your donation anyway, Rudolf – I was merely asking for permission to use it.

          Lol – given the way Theresa has wasted everyone’s time so far, I think customs issues are still some time away. :P

          Regards,

          John.

  7. Hello there John,

    I recently bought an HP Chromebook G4 11 off a person on Offer Up. I didn’t pay much attention, sadly, so when I booted it up, I quickly realized that it is an Enterprise/Education Edition. I called the organization it was issued to, to make sure it wasn’t stolen, fortunately, it was just decommisioned. The reason this matters is due to developer mode being disabled. I’ve tried to bypass it to no avail. I, however, found these ROMs, and I was intending to use them. I plan to flash the eepROM chip using a Raspberry Pi and an SOIC clip. I was wondering if you have the plain .bin/ROMs for download. I’ve done some poking around, and looked at the archived versions. I couldn’t find anything that could suit my needs. Please reply when convenient, and do tell me if I’ve overlooked something, or if you need any more information.

    -Svech

    1. Hi,

      The file you want is https://johnlewis.ie/Chromebook-ROMs/legacy-slots/legacy-seabios-baywell-latest.cbfs and you need to write it to the RW_LEGACY portion of the ROM. You will also either need to flash a shellball (if you don’t care about losing model name/serial number from ROM – updates in ChromeOS will not work without the former) or read and modify your existing firmware to enable dev mode and relevant GBB flags. Follow https://johnlewis.ie/extracting-the-shell-ball-rom-using-a-chromeos-image/ for information on extracting the shellball. In that resulting directory are scripts you can also use to modify the existing firmware’s flags.

      Cheers,

      John.

  8. Thankyou John,

    I should have mentioned this before, but from looking at the Baytrail compatibility list, BOOT_STUB seems to remove the developer functionality. Does BOOT_STUB also support booting externally or replacing Chrome OS entirely with another operating system, such as Ubuntu, or is full rom required(of which I know is not compatible with Baytrail)? I plan on replacing Chrome OS in order to make this Chromebook function as a general laptop.

    -Svech

    1. Replacing BOOT_STUB isn’t recommended or supported any more – updating RW_LEGACY will allow you to run Linux. You can simply change the GBB flags to 0x489 to default to RW_LEGACY after a 3 second delay.

      1. Once again, thankyou,

        Alrighty, I will do that then. For the sake of anyone else browsing these comments in the future for a similar purpose, I’ll update you once I’ve completed the flash in the next few days (waiting on the SOIC clip in the post).

        1. As a final response (hopefully), and some help to those in a similar situation,

          I received the SOIC 8 clip and some jumper wires in the post. Make sure you do the following after confirming that the device has been sold from the organization, not stolen. I followed the shellball extraction tutorial to the point of having the bios.bin file for the Chromebook G4 11. I then used flashrom on a Raspberry Pi to flash the new bios to the eepROM on the motherboard of the Chromebook (can be found on the underside of the motherboard, opposite to the RAM), using the SOIC clip. Oddly, flashrom initially stated that it could not write to the eepROM, but after failing a few times, it returned with “at least something changed”. After reassembling the Chromebook, and attempting to boot into Developer Mode, the flash worked and I was in. To prevent this from happening again, and to dis-enroll the device from the Enterprise License, I changed the device’s serial number to a non-enterprise serial number (A random serial number will usually do the trick). Tutorials for flashing eepROM (search “Unbrick my Chromebook”) and changing a Chromebook’s serial number (search “Change serial number on Chromebook through Developer Mode”) can be found online.

          You can stop here if you just want a normal, unrestricted Chromebook. I, however, wanted to install an alternative linux OS.

          To do this, I flashed the Chromebook’s bios through Developer Mode’s terminal with RW_Legacy. I then used the same utility used to flash RW_Legacy to change the primary boot handler to legacy. Remember to enable legacy boot. From there it’s as simple as creating a live USB for your chosen linux OS, using GParted to re partition the internal emmc to one fat32 partition, and installing your distro by booting from the USB drive. In my case, I installed Kali by Offensive Security, and found no driver problems.

          I can’t post every line of code and step here, so if you want a more detailed explanation, referring to tutorials on this site and others, and piecing together the information isn’t too hard. After a few hiccups, the process only took me two hours.

          -Svech

          1. Thanks for figuring that stuff out yourself, and thanks for fleshing out what was actually needed, beyond my pointers. I hope you enjoy you new, shiny, Linux Chromebook, but unfortunately I think you’ll find that processor a bit slow.

  9. Let me start by saying that I am shiny new at this and really don’t know what I’m doing. I have figured out that I need the legacy firmware so that I can boot from the USB on my Acer chromebook 11 CB3-131. When I try to run the script in at the crosh prompt, however, I get “unknown command: cd;”. What am I doing wrong?

    1. So far I can tell that you are not in shell. Go to terminal type in shell. And to get deeper permission try getting root permission by typing this after your in shell. “Sudo su” or “sudo -i”

  10. Hey I just wanted to know if there is a way to coreboot HP Chromebook 14 G5, I have managed to install seabios but only works when I press ctrl-d. Is there anyway I could install a custom/ full BIOS. So I dont need to see the developer screen or the beeping sound.

    1. There undoubtedly is a way of putting coreboot on the HP Chromebook 14 G5, but I don’t know what it is, and you might spend a long time getting nowhere. I would suggest trying one of the other people that make custom Chromebook firmware to see if they already have a complete replacement.

      Other than that, have you set the short delay and set the RW_LEGACY slot as default, so there’s the minimum of interaction with/fuss from the dev screen?

  11. Hey there! I have a HP Chromebook 14 (Falco Codename), but when I try running the cURL command it fails because it could not validate the identity of your website when downloading. I’ve tried overriding the error with -k and –insecure but both still send up the same.

    Any tips?

    1. Someone else reported the same problem – think it was because I removed “www.” as a valid subdomain of the certificate. Should be okay now. Please try again and report back.

  12. Hi John, I have a Lenovo 100e Chromebook, and I got an error: “Coral is not currently supported at all using this script”. This Chromebook has a Intel Celeron N3350 (Apollo Lake). What can I do?

    1. Which md5sum’s where? There was a problem with the cert subdomain that has just been fixed, but it has nothing to do with md5sum’s. Maybe just try again and let me know if you still have a problem + more detail this time please.

  13. I have Samsung Series 3 Chromebox (stumpy). Choosed “3”, full rom install, there were no errors, “you may reboot” you said :) Now I have a blank screen, can you help me ? Thank you

      1. Update: Changed to DVI from display port, I can see “seabios version” for 1 second then it goes black and nothing happens, any chance to recover?

          1. Last question (for now) :) Can I install full Linux after booting blind from live USB ? Thank you for you time.

            1. Yes, you can.

              That will not fix the SeaBIOS graphics initialisation problem though.

              Also, depending on the boot-order in the firmware, the Chromebox may try to boot ChromeOS off the internal drive as opposed to booting from the USB, but you won’t know until you try – give the USB at least 30 seconds (possibly several minutes) to bring the display to life for you. It’s also possible the Live USB distro could be broken and not initialiase the display itself, so try several USB sticks and several distro’s.

              1. Non of any Live USB did work, because ESC does not work for boot media and device wants to boot from ssd only. But i fixed that :) You wanna know how ?

                  1. My first try but that did not worked either with gnub errors after. I dismounted ssd, then stumpy booted from USB, then i put back ssd back while device is still on ! and whola :)

                    1. My real last question now and thank you for your time since yesterday, can I flash an other bios firmware to have the option boot from USB ( I need that), or stumpy does not support this feature, what you think ?

    1. Pretty sure there’s a “hopefully” in there somewhere but read it the way you want. ;)

      You just need to boot “blind” from a Linux Live USB – graphics is the problem here, and the Linux kernel will initialiase the graphics when it boots.

  14. Hi John, I have a Lenovo 1ooe Chromebook with Intel Celeron N3350 Processor (Apollo Lake), and when I try to update ROM, I got this error: “Coral is not currently supported at all using this script”. I found on the internet that Apollo Lake Processors are not yet supported by Linux. What can I do?

  15. Dear John, I installed your BIOS on my acer C720P and then installed debian 9. It works well thanks!
    I did that a while back and I wanted to update the BIOS, so I ran again your script. But it complains that it does not dmidecode. However, the dmidecode package IS installed. What can I do? Thanks.

      1. root@debian:~# cd;bash <(curl https://johnlewis.ie/flash_cb_fw.sh)
        % Total % Received % Xferd Average Speed Time Time Time Current
        Dload Upload Total Spent Left Speed
        100 10016 100 10016 0 0 57297 0 –:–:– –:–:– –:–:– 57563

        ERROR: This script requires that dmidecode is installed, please install it
        using your distro's package manager.

          1. OK, I found the problem. It was because sudo is not installed by default on debian. The command ‘sudo which demidecode’ was returning an error.

  16. Hi John,
    Legacy boot (Ctrl L) worked without changing the bios on my chromebook so I installed Ubuntu. Unfortunately when I let the battery run down, Ctrl L stopped working, apparently a known problem. Fixing it looks like it is going to be a pain. If I use your modified bios (RW_LEGACY) will I still have this problem?
    Otherwise, I notice you say disconnecting the battery will stop it trying to run OS recovery, so will that make Ctrl L work again or is that the problem in the first place?
    This is on an Asus Chromebook flip.
    Any help would be appreciated.

    1. How are you going to get my legacy slot on there, if it won’t boot? No, it won’t fix it anyway. You have to modify a ChromeOS recovery to enable the legacy slot again. There’s an article on the ChromiumOS website about doing it for the HP Chromebook 14 (from about 5 years ago). Should be same principle for yours, I think.

      1. Thanks, but my question is, if I recover the system, will updating the bios stop this happening again?

  17. I have a question… I flashed my chromebook c710 with your link above but when i try booting Windows 7 it give me an bios apci is not fully complaint what should i do? Please help

    1. It’s saying that part of the ACPI tables it expects to be there is missing. Windows has it’s own ACPI specific bits which aren’t in ChromeOS firmware, under normal circumstances. Search for someone else’s firmware. The next hoop after that is drivers for keyboard and mouse, but you should be able to find them the same place you got the firmware.

  18. Hello esteemed Mr. Lewis, save my peppy? Please?

    flashrom v0.9.9 : 870d8af : Jan 16 2019 09:47:01 UTC on Linux 3.8.11 (x86_64)
    coreboot table found at 0x7bf7a000.
    SUCCESS

    INPUT REQUIRED: About to flash your peppy’s entire ROM, repeat
    ‘If this bricks my peppy, on my head be it!’ observing exact case
    and punctuation: If this bricks my peppy, on my head be it!

    flashrom v0.9.9 : 870d8af : Jan 16 2019 09:47:01 UTC on Linux 3.8.11 (x86_64)
    Calibrating delay loop… OK.
    coreboot table found at 0x7bf7a000.
    spi_block_erase_52 failed during command execution at address 0x0
    spi_chip_erase_60 failed during command execution
    spi_chip_erase_c7 failed during command execution
    ——————————————————————————-

    INFO: Assuming you didn’t get any errors you may reboot. Otherwise, do not
    reboot under ANY circumstances, and post a comment @
    https://johnlewis.ie/custom-chromebook-firmware/rom-download/

  19. Hi, John. Thank you for your work, first of all!
    I have followed the procedure and tried to flash a full rom on the Google Pixel 2013 on which I am writing right now.
    After the script was run, I got the following warnings:
    flashrom v0.9.9 : 3fc9f2f : Jul 27 2018 21:39:58 UTC on Linux 3.8.11 (x86_64)
    Calibrating delay loop… OK.
    coreboot table found at 0xacedd000.
    spi_block_erase_52 failed during command execution at address 0x0
    spi_chip_erase_60 failed during command execution
    spi_chip_erase_c7 failed during command execution
    I didn’ t reboot and I’m here to ask you what I should do now.
    Please advise.
    Thanks again, best,

    Jacopo

    1. Hi Jacopo,

      spi_block_erase_52 failed during command execution at address 0x0

      The “0x0” means that it failed writing from the very beginning of the ROM chip (i.e. therefore hardware/software write-protect is still enabled).

      Can you check that both are disabled please (i.e. that the relevant internal screw is removed, and that flashrom –wp-disable has been run).

      As the write failed completely, it’s completely safe for you to reboot.

      Regards,

      John.

Leave a comment