Featured Post

HOW TO: Install VPN server on Ubuntu when server is behind firewall

The whole point in this post is to run your own VPN service, and allow you to connect remote devices to your home network. To start off yo...

Apr 28, 2014

OpenELEC on the Asus Chromebox

First off I want to say, this was the best use of $179 in a while..just buy it:

ASUS CHROMEBOX-M004U Desktop

This box blows away my old Zotac ION - and it's fanless.  It kills on performance compared to the Raspberry Pi and Zotac ION, and it's small and portable, it's fanless, it boots very quick! I love it.

Disclaimer: All the information in this guide is completely taken from the following link:

http://wiki.xbmc.org/index.php?title=ASUS_Chromebox

But I have formatted it in the appropriate manner for myself to reference in future.

Follow this guide if you want to replace Chrome OS with OpenELEC and have it boot in automatically, I do not do the backup like the wiki, I create a backup USB after the fact on a Windows box, but you can do it from any OS it appears.  I have tested this backup and it works, so this is my preferred and quicker method.

+Matt DeVillier has updated the wiki to provide an all-in-one setup script for installing OpenELEC as default, or dual boot. You must still complete steps 1.1 and 1.2. 

1 Device Preparation

1.1 Put in Developer Mode

Putting the ChromeBox in developer mode will allow you to access the underlying Linux operating system features necessary for installing XBMC.

WARNING: This will erase all user data on the device.

With the device powered off:

  • Insert a paperclip into the hole left of the SD card slot and press the recovery button
  • Power on the device, then remove the paper clip.
  • When greeted with the recovery screen, press CTRL-D to enter developer mode.
  • Press the recovery button (with paperclip) to confirm.
  • The device will reboot and wipe any existing user data.

1.2 Disable Firmware Write Protect

Disabling the firmware write protect will allow us to set the firmware boot flags to shorten the developer boot screen timeout (from 30s to ~1s), and optionally boot directly to the legacy BIOS (and into Ubuntu or OpenELEC). This is not absolutely necessary, but highly convenient and carries little to no risk.
With the device powered off and unplugged:

  • Remove (4) rubber feet from bottom of unit
  • Remove (4) screws under rubber feet
  • Separate two halves of unit
  • Remove write-protect screw circled below:
  • Reassemble in reverse order

1.3 Update the Legacy BIOS

It is necessary to update the legacy BIOS to enable booting from USB/SD media, or if replacing ChromeOS with Ubuntu/OpenELEC, as the stock legacy BIOS is completely broken. If you dual booting and using either the ChrUbuntu or ChrOpenELEC scripts to install, then this step is included as part of those scripts and does not need to be done manually.

To update the legacy BIOS:

  • Power on and boot to ChromeOS
  • Hit CTRL-ALT-F2 to open a shell
  • Login with user chronos (no password required)
  • Download the updated legacy BIOS with the command:
    curl -L http://gdurl.com/EVKN/download -o seabios.bin
  • Flash the new bios with the command:
    sudo flashrom -w -i RW_LEGACY:seabios.bin


This updated legacy BIOS has a ~1.5s wait on the 'Press ECS to show boot menu' screen.

1.4 Set Developer Boot Flags

Setting the following boot flags will allow you to boot either to a backup copy of ChromeOS on USB/SD (using CTRL-U) or to the legacy BIOS (using CTRL-L) and into Ubuntu or OpenELEC.
Important: These boot flags must be set before installing either Ubuntu or OpenELEC.
To set the boot flags, perform the following steps:

  • Power off your ChromeBox, then power on but do not login.
  • Press CTRL-ALT-F2 to open a shell.
  • Login as user chronos, no password is needed.
  • Run the commands:
  • sudo crossystem dev_boot_usb=1
  • sudo crossystem dev_boot_legacy=1
  • Do not reset, proceed to section 1.5 - original wiki doesn't force you to do this, so if you want to change the commands later you appear to have to reinstall Chrome OS and do everything again.


1.5 Set Firmware Boot Flags

With the firmware write-protect disabled, we can shorten the default developer-mode boot wait time (from 30s to ~1s) and set the ChromeBox to default to booting the legacy BIOS (and into Ubuntu or OpenELEC) instead of requiring CTRL-D or CTRL-L to be pressed each time.


  • Power on and boot to ChromeOS
  • Hit CTRL-ALT-F2 to get to command prompt
  • Login with user chronos (no password required)

  • To shorten the boot wait time only, run the command:
    sudo set_gbb_flags.sh 0x1
    (This is the same as immediately pressing CTRL-D

  • To shorten the boot wait time and set the default boot to the legacy BIOS:
    sudo set_gbb_flags.sh 0x489
    (This is the same as immediately pressing CTRL-L)

  • To reset these options to default, use:
    sudo set_gbb_flags.sh 0x0



1.6 Create a Recovery Media for ChromeOS (on USB/SD)

Follow this guide:
https://support.google.com/chromebook/answer/1080595?hl=en

I corrupted my backup from the wiki, so this was my only option - but it is tested and works.

2 Installing OpenELEC


In order to install OpenELEC, you'll need to download a custom build tailored to the ChromeBox. This build differs from the regular OpenELEC Generic x86_64 build in that it uses a slightly older version of the syslinux bootloader (5.10, vs 6.02), as the version included with OpenELEC does not work properly on the ChromeBox at this time. This custom build also includes a fix for some MCE IR remotes, which fail to work when connected to USB 3.0 ports (fix has been submitted as a patch and hopefully will be included in future Linux and OpenELEC releases).

2.1 Installation steps:

Download the custom build of OpenELEC from http://gdurl.com/qnDc/download

Once downloaded, unzip/extract the files.

  • Insert a USB stick and run the create_installstick installer.
  • See the OpenELEC wiki instructions for more details on creating the USB installation media.
  • Power off your ChomeBox. Insert the USB/SD installation media.
  • Power on and press CTRL-L to boot to legacy BIOS
  • Press ESC to bring up the boot menu and select the number corresponding to your USB installation media
  • The OpenELEC installer will load
  • Choose the 'Quick Install' menu option
  • Select the target disk for install (the internal HDD should be the only option presented)
  • Hit Yes/Ok to the prompts confirming that the target disk will be erased/overwritten
  • When the installer has finished, remove the installation media and select Reboot.


If you have set the firmware boot flags as above, OpenELEC should boot right up in about 15 seconds. Otherwise, you will need to hit CTRL-L to boot the legacy BIOS.

That's it, you can update to the latest official OpenELEC build. Afterwards, updates should be automatic.

Update:  Please check the following location for a list of known issues an their available workarounds:
http://wiki.xbmc.org/index.php?title=ASUS_Chromebox#Known_issues_.2B_Fixes.2FWorkarounds

2 comments:

Matt DeVillier said...

there's a big difference between the backup instructions on the wiki and the ones you linked to: the instructions on the wiki are how to clone your existing ChromeOS install onto a USB stick, so you can boot into ChromeOS at will using CTRL-U. The instructions you linked to are for creating recovery media, which when used will restore the ChromeBox to a near-stock state and erase OpenELEC/Ubuntu etc.

iainmacleod said...

Understood Matt. From my playing about with the backup (CTRL+U), it appeared as though it was installing/repairing Chrome OS - so I figured it was basically overwriting OpenELEC much like the recovery media does.

Do you know different to this?