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


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

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

1,188 thoughts on “ROM Download”

  1. After entering cd;bash <(curl
    the process runs and in the end I get:
    Block protection could not be disabled!
    erasing and writing flash chip…SUCCESS

    The laptop reboots (coldboot) to the "OS verification is OFF" screen. I let it give it's two beep and it loads a sign-in.

    At this point, how do I install Ubuntu 14.04 from usb to completely replace the Chrome OS? I am not sure I replaced the Chrome OS with seaBIOS.

    Your assistant is humbly appreciated.

    Thank you and Happy New Year
    Tom G

    1. What do you mean by “loads a sign-in”?

      You just need to make a bootable USB stick as you would for a “normal” laptop. Preferably using dd or Rufus depending on the writing operating system, and preferably not using uNetbootin or similar.

      Depending on the model of Chromebook, it might not be wise to load an old version of Ubuntu like 14.04. Additionally, some models will experience the best hardware support if you instead load GalliumOS.

      Same to you,


      1. Hi jhon,
        I have already executed the script that you left several times

        cd; bash <(curl

        but when executing it I get the following:

        flashrom v0.9.9: 831c609: Nov 30 2017 02:04:47 UTC on Linux 3.18.0-16503-ge33b03ba1f58-dirty (x86_64)
        flashrom v0.9.9: 831c609: Nov 30 2017 02:04:47 UTC on Linux 3.18.0-16503-ge33b03ba1f58-dirty (x86_64)
        Calibrating delay loop … OK.
        Error accessing low megabyte, 0x100000 bytes at 0x0
        / dev / mem mmap failed: Resource temporarily unavailable
        Failed getting access to coreboot low tables.
        Mapping BYT IBASE at 0xfed08000, unaligned size 0x200.
        Mapping BYT SBASE at 0xfed01000, unaligned size 0x200.
        Erasing and writing flash chip … SUCCESS.

        and when restarting the computer and pressing crtl + D on the recovery screen, I get the image of chrome, as if nothing had happened.

        How can i fix this? or is there something that is wrong?

        1. Okay – 3 things I notice.

          1. You haven’t told me what model you’re using.

          2. You seem to be running a custom kernel (one of the kernel opts could be stopping you getting access to the necessary memory).

          3. Have you tried hitting “ctrl + L”?

    1. BOOT_STUB isn’t supported any more, so if you use it, do so even more at your own risk and I won’t fix any problems with it.

      It goes by the codename of the board – if the codename is in the script (the one you see at the dev boot screen), then it’s supported. If not, let me know and I will add it.

    2. hi again jhon
      the model of my chromebook is the Samsung chromebook 3 ‘(celes)

      I researched online and I saw that you have to execute the following script:

      crossystem dev_boot_usb = 1 dev_boot_legacy = 1

      Once you run it and restart the chromebook, press Crtl + L and if it appeared the seabios.

      Anyway, thanks !

  2. I used your script to install your full ROM on my daughter’s C710-2847 a couple of days ago. I read on these pages that your son has a C710 so I figure you might be able to help me. Your script worked perfectly. (Frankly, running your script was much simpler and faster than your WP mining captcha that I had to endure to get in here even.)

    I’m working on a wiki for the MX-Linux forum and community. MX Linux is Debian-based but it uses Sys V init. I’d like to get suspend working with MX-17 GNU/Linux on my daughter’s C710. Suspend is the only thing that is seriously not working. Everything else has worked turn-key. I’ve done a lot of online research and TPM and ehci_pic seems to the at the root of most problems. I’ve tried a number of fixes from your pages here and elsewhere too. Even though your comments indicate it should be fixed, I get one suspend then and the next one causes a black screen hang, requiring a power cycle reset. I see an error 38 in dmesg ([ 206.014679] tpm tpm0: Error (38) sending savestate before suspend). says (under the first paragraph #3, WRT to your ROM):

    It will not be reboot on resume (unlike stock SeaBIOS), presumably since the firmware is not interacting with the TPM. But because an error 38 is returned during the selftest issued on resume, its functioning will degrade over suspend/resume cycles until the machine refuses to enter suspend,

    The 38 error snippet from my dmesg follows. Any ideas?



    [ 115.074460] PM: Preparing system for sleep (mem)
    [ 115.074691] Freezing user space processes … (elapsed 0.001 seconds) done.
    [ 115.076682] OOM killer disabled.
    [ 115.076684] Freezing remaining freezable tasks … (elapsed 0.001 seconds) done.
    [ 115.077953] PM: Suspending system (mem)
    [ 115.077989] Suspending console(s) (use no_console_suspend to debug)
    [ 115.078390] wlan0: deauthenticating from 68:c4:4d:40:31:d8 by local choice (Reason: 3=DEAUTH_LEAVING)
    [ 115.164457] sd 0:0:0:0: [sda] Synchronizing SCSI cache
    [ 115.164822] sd 0:0:0:0: [sda] Stopping disk
    [ 116.008298] PM: suspend of devices complete after 930.559 msecs
    [ 116.020515] PM: late suspend of devices complete after 12.193 msecs
    [ 116.033598] PM: noirq suspend of devices complete after 13.077 msecs
    [ 116.034041] ACPI: Preparing to enter system sleep state S3
    [ 116.034157] ACPI: EC: event blocked
    [ 116.034158] ACPI: EC: EC stopped
    [ 116.034160] PM: Saving platform NVS memory
    [ 116.034161] Disabling non-boot CPUs …
    [ 116.040993] smpboot: CPU 1 is now offline
    [ 116.042945] ACPI: Low-level resume complete
    [ 116.043013] ACPI: EC: EC started
    [ 116.043014] PM: Restoring platform NVS memory
    [ 116.043320] Suspended for 9.976 seconds
    [ 116.044613] Enabling non-boot CPUs …
    [ 116.044737] x86: Booting SMP configuration:
    [ 116.044739] smpboot: Booting Node 0 Processor 1 APIC 0x2
    [ 116.048171] cache: parent cpu1 should not be sleeping
    [ 116.048788] CPU1 is up
    [ 116.050852] ACPI: Waking up from system sleep state S3
    [ 116.066328] mei_me 0000:00:16.0: Refused to change power state, currently in D3
    [ 116.126708] PM: noirq resume of devices complete after 72.421 msecs
    [ 116.129013] PM: early resume of devices complete after 2.257 msecs
    [ 116.129243] ACPI: button: The lid device is not compliant to SW_LID.
    [ 116.129265] ACPI: EC: event unblocked
    [ 116.140038] genirq: Flags mismatch irq 0. 00000080 (mei_me) vs. 00015a00 (timer)
    [ 116.140068] mei_me 0000:00:16.0: request_threaded_irq failed: irq = 0.
    [ 116.140076] dpm_run_callback(): pci_pm_resume+0x0/0x90 returns -16
    [ 116.140079] PM: Device 0000:00:16.0 failed to resume async: error -16
    [ 116.144153] sd 0:0:0:0: [sda] Starting disk
    [ 116.153205] tpm tpm0: A TPM error (38) occurred continue selftest
    [ 116.493192] usb 2-1.2: reset full-speed USB device number 3 using ehci-pci
    [ 116.493228] usb 1-1.1: reset full-speed USB device number 3 using ehci-pci
    [ 116.571379] usb 1-1.1: device firmware changed
    [ 116.636161] usb 1-1.3: reset high-speed USB device number 4 using ehci-pci
    [ 116.888496] PM: resume of devices complete after 759.486 msecs
    [ 116.888793] PM: Finishing wakeup.
    [ 116.888795] OOM killer enabled.
    [ 116.888796] Restarting tasks …
    [ 116.891106] usb 1-1.1: USB disconnect, device number 3
    [ 116.894915] done.
    [ 116.958183] usb 1-1.1: new full-speed USB device number 5 using ehci-pci
    [ 117.038206] usb 1-1.1: string descriptor 0 read error: -22
    [ 117.038223] usb 1-1.1: New USB device found, idVendor=0489, idProduct=e04e
    [ 117.038227] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [ 118.696329] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    [ 118.700949] ata1.00: configured for UDMA/133
    [ 118.757535] usb 1-1.1: firmware: direct-loading firmware ar3k/AthrBT_0x11020000.dfu
    [ 118.806178] usb 1-1.1: firmware: direct-loading firmware ar3k/ramps_0x11020000_40.dfu
    [ 118.957072] usb 1-1.1: USB disconnect, device number 5
    [ 119.032967] systemd-logind[2445]: Operation ‘sleep’ finished.
    [ 119.130177] usb 1-1.1: new full-speed USB device number 6 using ehci-pci
    [ 119.210693] usb 1-1.1: string descriptor 0 read error: -22
    [ 119.210712] usb 1-1.1: New USB device found, idVendor=0489, idProduct=e04e
    [ 119.210716] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [ 120.804419] wlan0: authenticate with 68:c4:4d:40:31:d8
    [ 120.818692] wlan0: send auth to 68:c4:4d:40:31:d8 (try 1/3)
    [ 120.822593] wlan0: authenticated
    [ 120.823228] wlan0: associate with 68:c4:4d:40:31:d8 (try 1/3)
    [ 120.838867] wlan0: RX AssocResp from 68:c4:4d:40:31:d8 (capab=0x431 status=0 aid=1)
    [ 120.839049] wlan0: associated
    [ 205.771137] PM: Syncing filesystems … done.
    [ 205.889512] PM: Preparing system for sleep (mem)
    [ 205.889732] Freezing user space processes … (elapsed 0.002 seconds) done.
    [ 205.891879] OOM killer disabled.
    [ 205.891880] Freezing remaining freezable tasks … (elapsed 0.001 seconds) done.
    [ 205.893171] PM: Suspending system (mem)
    [ 205.893206] Suspending console(s) (use no_console_suspend to debug)
    [ 205.893661] wlan0: deauthenticating from 68:c4:4d:40:31:d8 by local choice (Reason: 3=DEAUTH_LEAVING)
    [ 205.984009] sd 0:0:0:0: [sda] Synchronizing SCSI cache
    [ 205.984355] sd 0:0:0:0: [sda] Stopping disk
    [ 206.014679] tpm tpm0: Error (38) sending savestate before suspend
    [ 206.014690] dpm_run_callback(): platform_pm_suspend+0x0/0x40 returns 38
    [ 206.014695] PM: Device tpm_tis failed to suspend: error 38
    [ 206.239986] PM: Some devices failed to suspend, or early wake event detected
    [ 206.249418] sd 0:0:0:0: [sda] Starting disk
    [ 206.405105] PM: resume of devices complete after 165.109 msecs
    [ 206.405500] PM: Finishing wakeup.
    [ 206.405502] OOM killer enabled.
    [ 206.405504] Restarting tasks … done.
    [ 206.948747] systemd-logind[2445]: Operation ‘sleep’ finished.

  3. Thanks for the prompt reply, John. lsmod reveals that tpm modules are not loading. I tried blacklisting all of them, but they never load, AFAIK so it’s pointless. If I try to suspend without kernel options I actually don’t get the 38 error but the system hangs on the 2nd suspend attempt. With tpm_tis.force=1, I get the error 38 but at least the computer doesn’t hang and it keep it from needing to recover the filesystem journal after power cycling, though it appears to panic on an ugly shutdown.

    tpm_tis.interrupts=0 only creates a couple of IRQ mismatch errors or something and doesn’t appear to help with suspend at all (despite what my previously linked thread says).

    This thread is also on the right track:

    However, the python3 test command only completes successfully when I boot with tpm_tis.force=1 (though the result doesn’t impart a fix). Without tpm_tis.force=1, I get:

    FileNotFoundError: [Errorno 2] No such file or directory: ‘/dev/tpm0’

    Obviously tpm elements are built into the kernel and not loaded as modules and they are incompatible with your ROM. Unless someone more knowledgeable about Linux TPM handling has some suggestions, I think I’ll need to rebuild a kernel. Sadly, most MX-Linux (or just about any other Linux but Gentoo ;)) users are unlikely to rebuild a kernel for their Chromebook!

    1. Well, this is what I get on mine:

      root@c710:~# dmesg |grep -i tpm
      [ 1.703939] ima: No TPM chip found, activating TPM-bypass!

      Also, if you extract the config file from the ROM, you’ll see there are no TPM options set. If you look at the config options set on the Jenkins server for the SeaBIOS payloads, you’ll also see there’s no TPM support enabled there.

      So, I don’t know what your suspend problem is, but it’s not down to the TPM, as the firmware is not enabling it.

      tpm_tis used to be loaded as a module – I’m not sure when that changed, but it must’ve been at some point in the last 3 or 4 years.

      1. >root@c710:~# dmesg |grep -i tpm
        >[ 1.703939] ima: No TPM chip found, activating TPM-bypass!

        That’s what I get too, John. Thanks for checking.

        During wakeup, I always (kernel option or no kernel option) get:

        [ 178.784354] genirq: Flags mismatch irq 0. 00000080 (mei_me) vs. 00015a00 (timer)
        [ 178.784388] mei_me 0000:00:16.0: request_threaded_irq failed: irq = 0.
        [ 178.784396] dpm_run_callback(): pci_pm_resume+0x0/0x90 returns -16
        [ 178.784399] PM: Device 0000:00:16.0 failed to resume async: error -16

        So maybe the smoking gun lies in those errors.

        However, even though no TPM modules are loaded, I get TPM error messages in dmesg (when I use the force=1 kernel option workaround suggested in the thread). Thus I know the kernel contains some vestiges of TPM code baked-into it (which inspires mistrust, given how many people have reported the same symptoms along with error 38.!

        After 1st suspend attempt:

        [ 197.203607] tpm tpm0: A TPM error (38) occurred continue selftest

        After 2nd suspend attempt (there is no 2nd attempt dmesg without the kernel option, because its hangs):

        [ 420.190800] tpm tpm0: Error (38) sending savestate before suspend
        [ 420.190813] dpm_run_callback(): platform_pm_suspend+0x0/0x40 returns 38
        [ 420.190819] PM: Device tpm_tis failed to suspend: error 38
        [ 420.428599] PM: Some devices failed to suspend, or early wake event detected

        I’ll link this comment page to the MX Linux forum and see what the kernel gurus suggest.

        1. You’re welcome. Okay, well this is happening in Ubuntu 16.04 on kernel 4.4.0-116. I’m pretty sure the C710 was one of the less problematic Chromebooks in terms of power-saving (didn’t have to do things to workaround ehci-pci as you did on Haswell). I would recommend you boot different kernel versions to compare and contrast, and then you might be able to narrow down where this regression was introduced. I would even go back to kernel 3.x just as a test.

          Yeah, I think I’m seeing pretty much the same errors too – that one is related to the Intel Management Engine.

          I’m pretty sure that unless the TPM is initialised in some way by the firmware it will just sit there like a dumb eejit. The Management Engine, with its proprietary version of Minix, really is the one you should worry about. ;)

          Best of luck with it.

  4. Bingo! You were right, John. Woowhoo!! Disabling mei did the trick. I could not do it with modprobe -r, because mei was in use so I used the grub editor and temporarily added the kernel option

    (with no spaces)

    during boot and it worked. Now I’ll put it in grub and do a

    sudo update-grub

    I worked for Intel for over 20 years as a Sr. Hardware Engineer and all I can say is, gee Intel, let’s have some more of your wonderful TPM, AMT, MEI and other features we don’t want and can’t (fully) decline or disable so you and your globalist partners and spooks can own the chips and PCs we pay-for!

    I’ve been a PayPal almost as long as there’s been PayPal and this is the first time I can’t logon, despite two password resets. I keep getting an error on the paypal logon screen (from your “Donate” link or otherwise). I promise that when they get it fixed, I’ll donate 16 EU / ~ 20 bucks U.S. to you and I hope others from the MX community make it over here and donate too. I’ll be linking this page and discussing whether a bug report is in order. I much prefer to donate cash to you than endure bitcoin mining! You’d have my 20 bucks already, if PayPay would have let me logon!

    1. If you remove me_mei first, it will work, since that’s what’s using mei. Of course, you’re going to blacklist anyway, so it doesn’t matter.

      Amen – scary, scary shit they’ve done. They need to cop on.

      You could just donate as guest without an account, although I recognise the link to do it isn’t entirely obvious on the donate page, and thank you!

  5. Donation completed. It turns out that apparently PayPal considered the act of clicking on your “donate” button to be an abnormal transaction for me (maybe because it was Euros?) and locked-down my account. It took 20 mins. on the phone to straighten it out, answering “security” questions from as long as over 20 years ago! Maybe just letting you mine on my machine awhile is actually a better method. :(

    The donation is also on behalf of the MX Linux users group and forum. Except for the mei de-fanging to get suspend working, MX Linux is a turn-key installation using your ROM.


    1. I appreciate the donation, and I understand people have a big psychological problem with mining, but the fact is that the vast majority of users who come here don’t contribute anything, they just take.

      The other added benefit of the mining (in terms of the captcha) is it has zeroed the amount of comment SPAM I’m now getting. I may well decide to disable the auto-miner on the main page in favour of just using captcha, as the amount of money it’s earning is derisory. But I do want to get something from the silent majority who just come to the page, take what they need, and leave. If you have any better ideas on how to achieve that, I’m all ears. Donations have understandably gone down over the last months and years, so there is no way I’m earning enough to buy new models as things stand, and I’m certainly not going to fork out £30 quid a month for a decent unmanaged server on the internet, like I was (hence the C710 serving the website from my own internet connection) …

  6. Yes–of course! modprobe -r mei_me needs to happen first, because lsmod did, in fact, show that it was using mei. Thanks! I guess it was getting late for me but no matter–I just made it persistent right from the start with the kernel blacklist option, as you noted. Blacklisting using an /etc/modprobe.d file would probably work too, I guess.

    Also thanks for your thoughts and considerations regarding donations. I can see the upside to the mining. I inadvertently “triple paid” I think, because I unwittingly kept restarting the mining captcha to comment. That’s okay though, and I don’t mind paying (donating), except when the price is my patience! ;) Philosophically I love crypto currencies. I just wish crypto had realized its inherent benefits as money, instead of mostly realizing the world’s largest casino! Maybe someday, but people obviously love casinos more than they love sound money!

    Here’s a link for anyone who wanders here and decides to “LinuxBook” away their ChromeOS:

    There may be a formal guide in MX Wiki > Hardware someday too.

    1. Believe it or not, I have to do the captcha to login as admin – most times I have to do it at least twice, because I hit enter in a rush! :P

      It’s been a pleasure, and thank you for kinda understanding – wish I could say the same for the guy who contacted my work in regard to the mining …

  7. full rom install which was choice number 5 for me.

    $ inxi -M
    Machine: Device: desktop System: Google product: Parrot v: 1.0 serial: N/A
    Mobo: Google model: Parrot v: 1.0 serial: N/A
    BIOS: coreboot v: 4.0-6588-g4acd8ea-dirty date: 09/04/2014
    $ inxi -S
    System: Host: biker Kernel: 4.15.5-antix.1-amd64-smp x86_64 bits: 64
    Desktop: IceWM 1.4.2 Distro: antiX-17_x64-full Heather Heyer 24 October 2017

    I will donate with paypal

  8. Hi, my chromebook c7 is no longer supported by google, so I would like to install ubuntu on it, but I do not want to use crouton. I ask, can i use your full ROM on it to install xubuntu 16.04? Please, let me know. Thanks. Sid.

  9. Hi John,

    Does your SeaBIOS support Apollo Lake Chipsets? I am trying to find a Chromebook that has USB Type-C Charging and has a 15.6 in screen and I have only found one but I don’t know if I should buy it yet because I don’t know if SeaBIOS full ROM is supported with that Chipset yet. If you could get back to me ASAP I would be very grateful.

    Model: Acer Chromebook 15 CB515-1HT-P39B
    Proccessor: Pentium N4200

    1. Hi,

      The bigger problem would likely be distro driver support, since it’s patchy for Braswell/Skylake and newer. It may already come with a working RW_LEGACY slot. No guarantee I would be able to make an RW_LEGACY slot that works.

      1. With the RW_LEGACY can you make it were it boots straight into the Linux distro or does it have to boot into the ChromeOS dev page and then go through the “Ctrl + L” then go through SeaBIOS to get it to boot Linux? Maybe a script to make it boot right up into the Linux distro?

        1. With RW_LEGACY, you can reduce the dev screen to a short wait, disable the space bar from wiping anything, and it go automatically into the RW_LEGACY slot – you need to change the GBB flags to 0x489 for that to happen. In case I didn’t make that clear enough – yes that will boot straight into the Linux distro without intervention.

          1. How exactly would I go about doing that? Is how to change the GBB flags in the script you have written, if not where can I find how to do that. I will purchase one of these Chromebooks and see if the RW_LEGACY slot works with SeaBIOS and post my findings on here so you have at least one person with data on this model. What I have read on the distro is that it would just be speakers that are interfered with and what I am going to be using these for I do not need to speakers.

    1. Hi,

      I think a few people have tried it with Banon with success. Think there are still probably some driver issues with Linux but {shrugs}.

      Well, I don’t know about that – the way Monero keeps falling it’s definitely a futile enterprise. But, it definitely keeps the spammers away. :)

  10. If anyone has /dev/mem issues, or gets an “Operation not permitted” error try what is mentioned (at your own risk)

    I used your script a year ago or so on my Acer Chromebook 15 (Auron-Yuna) and wanted to update it so I ran the setup script from my Bunsenlabs install (Debian Jessie) I was first met with a dependancy issue with LIBPCI 3.3. After updating that I had an issue with not being able to write to /dev/mem. It seems that on newer kernels, (running 4.9) the kernel option iomem=relaxed needs to be used in order to write to hardware.

    Also, I have never been able to get run many Boot CDs correctly on this Chromebook. Some work, like Clonezilla. But others like Hirens Boot CD and others don’t.

    The most common issue is when I load one up, the video is incorrect, and is only drawn on the top 1/10th of the screen. I get this same behavior in my actual Linux install when booting at the boot/kernel options screen. I went into defaultgrub configuration and changed video mode to 1024×768 and that fixes the boot/kernel options menu on boot, however I was wondering if you knew of a way to get USB Bootable utilities to work?

    1. I don’t, TBH. It’s probably down to the RW_LEGACY slot reusing the coreboot framebuffer for resolution, etc. It depends on what each respective utility is using for actual boot. For instance, I know that some versions of syslinux have issues with this. If you could respin the utilities that do use syslinux, and don’t work, with a newer version of syslinux (say the one used to Ubuntu 18.04, or similar) I think it would be a good test.

      I haven’t tried Hiren’s boot CD, or Clonezilla, in such a long time, I honestly don’t know how they (or what they use to) boot.

  11. Hey John.
    I was wondering if perhaps you could help me. I downloaded coreboot , the ‘23102013.rom’ version, for my chromebook, acer c710 with Celeron 847 processor.
    I followed the steps shown by Johnny Phung to flash the acer ( Everything seemed to work. But when I booted back up I get the following:

    SeaBIOS (version rel-1.7.3-26-g915f64a-dirty-20130902_202533-john-samsung-550-chromebook)

    Press F10 for boot menu.

    Booting from Hard Disk…
    [1.546378] Kernel panic – not syncing: No init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
    [1.546594] Pid: 1, comm: swapper/0 Not tainted 3.4.0 #1
    [1.546682] Call Trace:
    [1.546738] [] panic+0x80/0x171
    [1.546811] [] init_post+0xa3/0xa3
    [1.546970] [] ? start_kernel+0x328/0x328
    [1.547056] [] kernel_thread_helper+0x6/0x10
    [1.547153] panic occured,switching back to text console

    : So I rebooted, and pressed the forward key to stop at the Grub menu. GNU GRUB version 2.00.
    I get only two options:
    1)*Load SeaBIOS
    2) Scan for OS on internal HDD

    I have a live usb with Ubuntu 18.04 on it, and I tried changing between iso, and DD images, but it still won’t show up on the menu. And when I select either of the options above I get:
    ‘unaligned pointer 0x1
    Aborted. Press any key to exit.’
    However, no matter which key I press, I can’t get off this screen. My only option is to restart the pc, and start over.
    I can access the GNU grub command line though.
    Please help me figure this out. I’ve written everything I know about the problem.

    1. That’s a really old video, and the version of SeaBIOS in that ROM hasn’t been updated in an eon.

      Have you tried taking one of the memory sticks out of your C710, to see if that makes a difference?

      Failing that, if you run:

      insmod ahci
      insmod part_msdos

      From the grub cli, that might tell us more.

      1. ‘unaligned pointer 0x1
        Aborted.’ is the only return I get after running both commands.
        I’ve only got one memory stick in there, and I don’t know what would happen if I take it out.

        1. Actually, I’m going about this completely the wrong way – SeaBIOS loads, so this is our way out of the mess.

          The USB stick isn’t appearing because it’s taking too long to initialise and announce itself on the bus – you therefore need to use a different USB stick.

          If that isn’t an option, the other way around it is to install Linux on the C710’s HD via another machine, then put it back in the C710 – you’ll then boot from the HD.

          Lemme know what worked and which way you went.

          1. I’ll let you know if it works. I’m sorry for dragging you into this problem. It’s just that this computer is my very first experience with coding and customising. It represents out of the box thinking for me. I’ve had it since 2013. Before that, I hadn’t had much experience besides Windows XP(which is ancient by now). Would be a shame if I lost it.

            1. You’ll be fine – the fact you can boot into SeaBIOS means it’s not completely bricked. Even if it were, you could still unbrick it with an RPi Zero or above, some jumper wires, and a Pomona 5250 SOIC clip, which is a fun exercise. ;)

              1. haha. Yeah, Always fun.
                You know, I’d love to learn more about how you created all of this. I, myself, only have experience with c++ programming, and started learning a little Java.
                I’m 20, and I’m still pondering what I wanna do with my life. So, if you ever in need of a student with a keen interest in learning more about computers, let me know.

                1. Okay, so just to correct you a bit here (I did mean to do this the other day) – although I have a programming background, and can script BASH/Python and stuff, tweak PHP/CSS templates for WordPress, even make very minor mods to C for kernel/coreboot, I’m not a programmer, per se. All I have done (as have at least 2 others) is compile coreboot ROM’s, etc myself, and make them available for other people to use. The real stars are the coreboot developers, who actually make this stuff – I just did the last mile for the less initiated and in a “hey, it’s cool to run Linux natively on Chromebooks” (and it’s also more “open”) kind of way.

                  Anyway, if you want to get a feel for compiling a coreboot ROM, either go look at coreboot docs, or take a look at the article I did on compiling a coreboot ROM for the Samsung 5 series 550 Chromebook back in 2013. Other stuff will be gleaned by reading other articles on my site, and subscribing to the coreboot mailing list. Compiling a coreboot ROM is very much like compiling the Linux kernel, except it’s more likely not to make your machine boot at all. ;)

              2. I have installed Ubuntu onto the hard drive using the ubuntu installer, and I put it back into the Chromebook. When I start it up, it says: ‘booting from hard drive,’ and nothing further occurs. It just stays there until I unplug the laptop.

                  1. I think it’s sda. I partitioned the hard drive, with swap, home, and root partitions before I started the install, but all those partitions we’re created under /dev/sda

                    1. I made sure I install ubuntu to the right drive by checking the disk space, about 320 GB’s.

                    2. Well, what I think has likely happened, is that the Master Boot Record on the 320GB drive doesn’t contain Grub. When you installed Ubuntu, it will have asked you if you want to install Grub, and will probably have defaulted to /dev/sda.

                      You can write it to the MBR after the fact, by running, “grub-install” e.g. “sudo grub-install /dev/sda”.

                      Either that or perhaps the boot partition isn’t marked as “active”. Both will result in SeaBIOS appearing to hang booting.

                      Did you confirm you can boot from the 320GB in the surrogate machine, after you installed it?

                    3. No. But I’ll see if I can boot from it, and if it doesn’t work, I’ll do the sudo grub-install.

                    4. I checked to see that everything boots up perfectly from the hard drive, and everything is a go.
                      Which leaves me with a question…
                      Whenever I boot up Ubuntu on the surrogate pc, I see a much more updated grub manager. Grub version 2.02.
                      But the chromebook starts up with grub version 2.00.
                      Could they be conflicting with each other?

                    5. I don’t think so – I think it may actually be a reporting error, as the Chromebook/SeaBIOS will be using “legacy” booting, whereas the surrogate PC may well be using UEFI. Either that or the relevant “legacy” area of the disk (mbr), didn’t get updated with the newer version during install, and the older version is an artifact.

                      If you reinstall grub while booted on the Chromebook, you may find it has an effect on the version number, in the case of the latter e.g.

                      sudo grub-install /dev/sda

  12. Hi John,
    I run the script”cd;bash <(curl" on my Lenovo N42 Chromebook(The CPU is INTEL N3060 braswell), there are two problems.
    The first, under the latest Chrome OS 64-bits, you site('s SSL link doesn't work, it's seemed that the SSL certificate is invalid. I downloaded the "", and modified all https links to http links, the first problem is solved.
    The second, after downloaded the firmware, the script told me the MD code was error and try run it later. After several times tries, I gave up and write this comment.

  13. Hi

    I have a toshiba chrome book 2 and ran the above script which completed ok. I was able to run the live usb from seabios and all looked fine. Upon rebooting I did Ctrl l to get back into chrome which left me at the os is missing screen. I tried another reboot but escape is not working now nor is ctrl l. I have also tried the recovery utility which unsurprisingly is not recognised. Is my only option now a hardware flash or is there anything i am missing. I built the recovery using a windoze pc and the google utility, oddly i cannot see the contents on a windows machine it just prompts for format, I assume that is normal and the usb is not duff and being misreported by the utility

    Thanks in advance.


    1. When you had booted from the LiveUSB, had you tried to install Linux?

      Well, it would’ve been “ctrl + D” to get back into ChromeOS, that’s of course assuming you changed the GBB flag to 0x489? If you didn’t, you wouldn’t need to hit anything to attempt ChromeOS boot.

      Do you get the white dev screen? Does SeaBIOS start automatically? Which model of Toshiba Chromebook 2 is this? What does the dev screen report the model name as?

  14. Will this work on Apollo Lake chips? I have a new HP Chromebook 14 G5 coming in the mail and would like to install Ubuntu on a flash drive to boot from. The specific processor is the Intel Celeron N3350. I read in another comment that the issues were mostly with distro support. Would this mean that it would likely succeed in the bios mod, but not be able to work with Ubuntu or something?

    1. I’m not sure. If you tell me the model name (from the dev screen) when you get it, I can add it to the script, and we can go from there. Might also be a good idea to tell me what the PCI ID’s of the graphics card are, so I can check what the chances of you getting graphics output in SeaBIOS are. :D

      Yes, you may well have driver issues in Linux, but some chipsets came with better support that others. As a general rule, the more “mobile-like” the chipset is, the worse the hardware support will be. YMMV, etc etc etc.

        1. No problem – I could also do with “lspci -vnnn” output too.

          I’ll add it to the script, but the chances of graphics working are reasonably slim unless I make sure the right PCI id’s are in the firmware mod, for the graphics card.

  15. I have been trying to run the commands on my C731 (Braswell) and the curl command downloads an html file rather than a shell script. I have tried the same commands on different computers and get the same result. Am I doing something wrong? Thanks

    (Sorry if I screwed up somebody’s thread with this post).

    1. When I ran the script”cd;bash <(curl"
      on my Lenovo X131E Chromebook it downloaded the file and then gave this error:

      100 147/dev/fd/63: line 1: syntax error near unexpected token 'newline'- 0
      /dev/fd/63: line 1:'’
      19 0 14719 0 0 5500 0 –:–:– 0:00:02 –:–:– 7960
      (23) Failed writing body

      I have done the hardware work on the write protect and turned off write protect by command. It seemed to be working fine to access the ROM. I have checked my time and date. I am stumped now.

        1. Yes to all of those questions.
          It just says it can’t run the “DOCTYPE html” document as the error.
          This has been very disappointing. I have wasted two days of effort. I wanted a small, lightweight linux box to carry in my work truck. I HATE Chrome OS. I will toss this into a box somewhere and forget it. Wasted money and time.
          You are doing great work. Thanks for what you have done.

  16. Samsung Series 3 XE303C12 2012 Chromebook is not supported at all. If it could be supported in at least being able to modify the RW_LEGACY slot, that would be much appreciated. Thank you!

    1. There’re a couple of small problems with doing that – firstly, it’s got an ARM processor, and secondly the firmware on that device doesn’t contain an RW_LEGACY slot to begin with. So, good luck with that. :P

  17. Hi John,
    I’m having some trouble booting to SeaBIOS with the ASUS C300MA-RO005 (Baytrail). I’ve removed the write-protection screw and enabled dev mode (it has been enabled for a while as I used to have a crouton on the laptop). The script seems to run as expected in shell (non-sudo) with (1) RW_LEGACY selected:

    flashrom v0.9.9 : 3fc9f2f : Jul 27 2018 21:39:58 UTC on Linux 4.4.141-14563-g78fd9f781aae (x86_64)
    Calibrating delay loop… OK.
    coreboot table found at 0x7ae6e000.
    Mapping BYT IBASE at 0xfed08000, unaligned size 0x200.
    Mapping BYT SBASE at 0xfed01000, unaligned size 0x200.
    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
    Erasing and writing flash chip… SUCCESS

    INFO: Good, your quawks’s RW_LEGACY slot was written successfully.
    You can hopefully, safely reboot!

    However, rebooting results in the usual chrome dev ‘OS verification is disabled’ screen.
    ‘Ctrl-L’ with a bootable USB produces a beep with no result. I don’t know if the spi erase commands failing is to blame here?

    Should I try manually flashing? Any recommendations would be much appreciated.


  18. i have a Acer Chromebook 14 CB3-431 with Intel processor and really want to install Ubuntu on it. I ran into a problem when I did the CTRL + ALT + forward key,, and just got a dark screen. Powered down the computer repeated the step CTRL + ALT + forward key, still same dark screen. What do I do?

    1. So, why did you hit that key combo?

      Basically, when you hit that key combo, the system will try to run ChromeOS recovery, but because you’ve removed that part of the ROM during your presumed write of BOOT_STUB, ChromeOS recovery no long exists and you just get a blank screen …

      I think there may be some funny key combo/incantation you can do to bring it back, or, failing that, just disconnect the internal battery.

      It’s also probably a good idea for you to tell me what the hell you put on there, to begin with, if you want me to help – writing BOOT_STUB hasn’t been supported by the script now for a number of years …

  19. Hey John,
    I am on a Lenovo X131e.

    I was dumb and did the full OS removal before flashing the legacy drive. I was getting errors flashing the legacy drive and then later on I stupidly turned off my system. Now when it turns on SeaBIOS shows up and if I don’t press anything it boots from the hard disk, then shows only a black screen. If I press escape I can get to the boot menu and I can see the recovery drive I made, but I can’t select any options. I’m completely stuck.

    Did I brick it or is there still some way I can fix it?


    1. I was able to fix the issue by plugging in an external keyboard… Should have read a bit more before posting. Anyways thanks for your work, and have a great day!

      1. Yeah – I don’t think there’s a keyboard problem with the X131e (Stout), but SeaBIOS will get its knickers in a twist if you press escape too many times, and too early. Glad you found a workaround anyway.

  20. am I in trouble?

    before running the script:
    – RW screw removed
    – vpd mlb_serial and serial changed
    – RO_VPD and GBB bin files saved in safe place

    Ran script, option 5 FULL ROM:

    ##################################### 100.0%
    ##################################### 100.0%
    flashrom v0.9.9 : 266087c : Nov 20 2018 01:07:48 UTC on Linux 3.8.11 (x86_64)
    coreboot table found at 0x7f782000.

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

    flashrom v0.9.9 : 266087c : Nov 20 2018 01:07:48 UTC on Linux 3.8.11 (x86_64)
    Calibrating delay loop… OK.
    coreboot table found at 0x7f782000.
    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 @

    chronos@localhost ~ $

      1. no, I didn’t flashrom –wp-disable :(

        also, looks like Im bricked now :( at least partially… while I was away from home, there must had been power outage, the box have shut down.
        Now I only see this:

        Seabios with the only option to boot from SSD, no option from SD card slot/USB…

        What should I do next? M.2 SSD to USB adapter and try re-image SSD or shop for Pomona 5250 SOIC clip ?

        I would like to resurrect this box, cos its Core i7…

        thanks for your help John

        1. Don’t worry – the merest fact you have a display means things are working. :)

          So, what’s happening there, is it’s still trying to boot off the internal hard disk, but it can’t boot ChromeOS because the verified boot chain has been broken. It’s not recognising any USB stick or SD card in the picture you’re posting there – some USB sticks take ages to announce themselves on the bus, using normal (read: slow) firmware, there’s almost always enough time for this to happen before you reach the boot selection, but with coreboot, I have had to introduce a delay of up to 5 seconds, on occasion, for a USB stick to be recognised. My advice there is to try other USB sticks, and/or ctrl-alt-delete after the dispaly comes up, but before it actually tries to boot ChromeOS (tip: you’ll know if it’s got that far, because it will no longer respond to ctrl-alt-delete, and you’ll be forced to hard power off). That way, the USB stick will likely (maybe with two or three consecutive tries) announce it’s presence. Further, I would advise you be very careful about how the bootable USB stick was created – if using Windows to create the USB, use Rufus, if Linux, write directly to the drive with “dd bs=4M status=progress conv=fsync if=filename.iso of=/dev/sdX” where “X” is the drive designation (probably /dev/sdb if you don’t have any other drives in there except for the internal one). Let me know how you get on, or if you’re stuck.

          1. it turns out that my Zako was reimaged with Panther ROM with your script, you may want to check the script/rom yourself…

            dmidecode -s system-product-name returns “Panther” instead “Zako” after re-image.

  21. Hello,

    I tried to install the flash on
    Acer Chromebook 13 CB713-1W-57G8 Intel Core i5-8250U, 8GB RAM, 64GB eMMC, Intel UHD, Chrome OS
    and did get the error message
    nami is not currently supported at all using this script.

    I am lost a bit
    Any help?

    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. 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]
      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.

  22. 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)…

  23. 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.

  24. 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



        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



  25. 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.


    1. Hi,

      The file you want is 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 for information on extracting the shellball. In that resulting directory are scripts you can also use to modify the existing firmware’s flags.



  26. 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.


      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.


          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.

  27. 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?

Leave a Reply