Installing recent Ubuntu on Samsung ARM Chromebook is not rocket science. All you need is following steps.

So which steps there are? Note that I will describe only installation on SD card and assume some level of knowledge from reader — that’s why there are steps where exact commands are not given as you can use different tools.

  1. Partition SD card with GPT. First partition needs type “7f00” (ChromiumOS kernel) and 4MB is enough. Second is “8300” type and should be enough to fit rootfs (or bigger).
  2. Create ext4 filesystem on second partition.
  3. Create rootfs — debootstrap, multistrap etc. You can do it directly to SD card partition to save copying later. You can also fetch any existing one.
  4. Chroot into rootfs (you can do it from terminal under Chrome OS).
  5. Add “Samsung Chromebook (ARM) support packages” PPA into APT sources.
  6. Install “cgpt”, “vboot-utils”, “linux-chromebook”, “xserver-xorg-video-armsoc” packages.
  7. Create file with kernel command line. I suggest “console=tty1 printk.time=1 quiet nosplash rootwait root=/dev/mmcblk1p2 rw rootfstype=ext4” but you can adapt it as you want.
  8. Sign kernel: “vbutil_kernel –pack /tmp/kernel-to-boot-ubuntu –keyblock /usr/share/vboot/devkeys/kernel.keyblock –version 1 –signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk –config CMDLINE_FILE –vmlinuz /boot/vmlinuz-3.4.0-5-chromebook –arch arm”
  9. Write kernel to SD: “dd if=/tmp/kernel-to-boot-ubuntu of=/dev/mmcblk1p1 bs=4M”.
  10. Mark kernel as good: “cgpt add -S 1 -T 5 -P 12 -i 1 /dev/mmcblk1”
  11. Copy WiFi firmware from Chrome OS — it is /lib/firmware/mrvl/sd8797_uapsta.bin file.
  12. Last chance to burn your speakers cause Ubuntu will not give that functionality…
  13. Reboot.
  14. Press Ctrl-U at that scary white screen.
  15. Enjoy your Ubuntu system.
  16. You may also add symlink for Samsung media framework: “cd /lib/firmware/;ln -sf s5p-mfc/s5p-mfc-v6.fw mfc_fw.bin”. But so far nothing uses it.

Note that you may have different results due to other rootfs used. I ran “debootstrap” and then chrooted, installed “xubuntu-desktop” and lot of other packages I use for development.

How to install Ubuntu 13.04 on Chromebook

41 thoughts on “How to install Ubuntu 13.04 on Chromebook

  • 14th February 2013 at 15:25

    Hi, I’m willing to buy this chromebook just to run ubuntu but I’m afraid of the graphic performance. How can the 3D/VPU can be OK with Ubuntu if we only have Blobs from Samung for Mali drivers ?

    • 14th February 2013 at 22:35

      To the best of my knowledge no one can gotten the HW video decoder to work yet on Ubuntu. And no one has gotten Unity (and compiz) to work with the binary Chrome OS-supplied OpenGL ES 2.0 driver. I want to run Unity but I can’t get HW acceleration with it, so I’m forced to use LXDE.

      • 14th February 2013 at 23:22

        Ok, video acceleration does not work. OpenGL ES works for simple apps (including Quake 3 Arena GLES). I do not care about Unity — XFCE works perfect for me.

      • 15th February 2013 at 21:14

        KDE also works fine when using kwin-gles.

  • 14th February 2013 at 18:22

    Pretty complicated. Are you planning installation on internal flash? Or, better, Debian instead of Ubuntu (on internal flash)? I consider buing this hardware (well, one of chromebooks) just to have small (but not 10″) laptop with Linux (I mean Debian ;-)).

    • 14th February 2013 at 18:26

      There is Chrubuntu script which can install Ubuntu 12.04 on internal emmc. During weekend I will use it to install on SD to check what kind of problems users have with upgrades.

      • 14th February 2013 at 19:55

        There is also a Chrubuntu script that lets you install it on an SD card. I did that and then upgraded to 13.04 without issue. It runs reasonably well, though a little sluggish whenever there is disk activity (i.e. when the daily apt cron is running.)

        • 14th February 2013 at 19:56

          Probably most of SD cards will be slower than internal eMMC. But USB 3.0 drives are faster ;D

          • 14th February 2013 at 23:23

            I installed to the internal eMMC this afternoon just to see how much faster it is. You were right. I haven’t done any formal testing, but it is definitely much, much faster. I was using a class 10 SD card before, but this makes that feel very slow.

          • 14th February 2013 at 23:34

            My Samsung microSD card does 20MB/s while eMMC does 36MB/s. At same time external hard drive on USB 3.0 does 76MB/s 😀

      • 16th February 2013 at 16:17

        I just did this, but to the internal eMMC.. unfortunately after the upgrade to 12.10, I’m hitting the plymouthd problem. I was able to turn off developer mode and then turn it back on to get back to Chrome OS with a shell where I attempted to fix the plymouthd issue (based on various bits I found); my fix didn’t work, though. However, now, when I turn off developer mode, I boot back in to Chrome OS… when I turn it back on, it never goes through the erase/reset step and I boot back into my broken linux install.

        Now settings things up on USB, but that’s pretty frustrating!

  • 15th February 2013 at 01:29

    Good stuff. Thanks for the guide. I installed onto external ssd plugged into usb3 port …. pretty darn fast.

    One problem is that it doesn’t seem to boot from an extenal hd from either usb port. So had to put the kernel on a separate usb stick in the usb 2.0 port. Not a big deal, but a bit of a pain to have to carry around the additional usb stick to boot.

  • 15th February 2013 at 16:54


    Thanks for your effort Marcin, I will try this tonight.

  • 16th February 2013 at 15:07

    @Josh Lefler : can you explain how you did the upgrade from ubuntu 12.04 to 13.04 ? My chromebook is running chrUbuntu 12.04 now. I’ve tried to upgrade it with the command : do-release-upgrade,but it gives this error :

    root@localhost:/etc/apt# do-release-upgrade Traceback (most recent call last): File “/usr/bin/do-release-upgrade”, line 50, in “is possible”).decode(enc)) UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc3 in position 12: ordinal not in range(128)

    • 16th February 2013 at 22:53


      I installed xubuntu-desktop first because I can’t stand using Unity. (I prefer KDE, but thought it might be a bit heavy for the chromebook)

      Then, I used the Ubuntu GUI to upgrade to 12.10. (You have to go into settings and tell it to alert for any release, not just LTS releases.)

      Finally, I just replaced quantal with raring in /etc/apt/sources.list and did sudo apt-get dist-upgrade. I tried going straight from precise to raring but it failed miserably and I had to reinstall. You could probably use apt-get to go from precise to quantal then quantal to raring – I don’t really know why I used the GUI for one and the shell for the other.


      • 16th February 2013 at 22:55

        I just did direct Chrubuntu 12.04 -> Ubuntu 13.04 upgrade. More about it in next blog post 😉

  • 16th February 2013 at 15:41

    I changed the sources from precise to raring and it’s doing the upgrades,but I think this way is not good to upgrade the kernel from 3.4 to 3.7,right ?

    • 16th February 2013 at 22:30

      I use kernel 3.4 under Ubuntu 13.04 still. You probably mean “linux-libc-dev” package 😉

  • 16th February 2013 at 18:07

    Writing this from my ubuntu@chromebook. I had re-installed my raring using your instructions. LXDE Works OK for me 🙂

    I noticed a message in the dmesg about missing firmware: s5p_mfc_alloc_and_load_firmware:42: Firmware is not present in the /lib/firmware directory nor compiled in kernel

    As I have always compiled the whole /lib/firmware I suspected that something is missing. It turned out that we need to copy /lib/firmware/mfc_fw.bin

    This formware seems to have something in common with the A/V acceleration subsystem. Now is this important I can’t tell but at least keeps my dmesg cleaner.

    Keep up the good work.

    • 16th February 2013 at 22:24
      cd /lib/firmware
      ln -sf s5p-mfc/s5p-mfc-v6.fw mfc_fw.bin

      But so far nothing uses this subsystem under Ubuntu.

  • 17th February 2013 at 14:21

    Hello, fellow Samsung Chromebook enthusiasts. How can I get the source of the 3.4.0 Samsung kernel in order to recompile for added functionality like NFS and CIFS support in Ubuntu 13.04? It seems like among the offered packages only 3.8.0 sources are available (and they compile OK, but do not seem to contain graphics drivers for Mali). It is even possible to generate the kernel oneself?

    • 17th February 2013 at 14:50

      Check PPA link in article. You will find kernel package there. If you miss some packages then open a bug.

  • 17th February 2013 at 15:02

    Let me understand better please. Can I use kernel 3.8 on my chromebook ? is it stable ? I read that it does not include the graphic drivers. Can I add them manually ? Do you have a link where it’s explained which are the necessary steps to do ? thanks.

  • 19th February 2013 at 16:44

    I’m working on modifying the Chrubuntu install script to do a base 13.04 install. The current work-in-progress is here: This may also give people doing their own install some ideas of what needs to be done so far. Fixes are encouraged!

    I haven’t run it on a fresh Chromebook yet (will do so sometime this week), but I’ve run the steps manually while fixing up the script and it gets me to a booting 13.04 Chromebook. There may be a better rootfs to start with, but this one seemed to work mostly OK (I wish there was a generic “ARM” one that didn’t include any hardware-specific packages). The two major things that don’t seem to work:

    • EGL/OpenGL ES. eglInitialize() is failing, and it’s not clear why, though es2_info/es2gears aren’t linking to libEGL at all which seems suspect.
    • Hibernate/suspend seems to be broken (or rather, coming out of them).

    These are minor that I’ve noticed: – When the display truns off, turning it back on prints a warning to dmesg (unbalanced enable for IRQ 243) – Touchpad is annoyingly low sensitivity (much worse than in ChromeOS) 🙂

    • 28th March 2013 at 12:21

      About “EGL/OpenGL ES. eglInitialize() is failing, and it’s not clear why, though es2_info/es2gears aren’t linking to libEGL at all which seems suspect.”

      What Xorg-video driver you use? Check permission for user on /dev/mali0 I’am add udev rule like: this and add you system user to mali group usermod -a -G mali

      • 29th March 2013 at 16:43

        Hi Belousow – I have also not been able to get GLES to work at all. I just fixed the permission issue (strace of es2_info shows that it successfully opens /dev/mali0 before eventually showing “eglInitialize() failed”. I’ve tried it with fbdev and armsoc so far with the same results. Just another datapoint in the “GLES doesn’t work” forest. sigh

      • 30th March 2013 at 02:37

        With respect to xorg-video drivers, there is a video over on YouTube showing performance of the armsoc video driver versus the fbdev driver.

        The video link is here:

        With the armsoc driver, I get some error messages and I see performance issues in various benchmark tests. Switching to the fbdev – i do see some improvement in 3D performance – and I am not getting the same 3D error messages. I have not done a lot of tsting with this yet – but things look good so far.

        The details on what to change are in the video.

    • 29th March 2013 at 16:40

      Just FYI – I think I resolved my suspend/resume crashes by completely disabling DPMS in the X server. That is xset -dpms, and forcing laptop-mode to stop re-setting it. I did a bunch of other changes simultaneously, unfortunately, so I cannot be 100% sure that is the straw that broke the camel’s back. If that doesn’t fix suspend for you, I can show you the other things I did at the same time that it started working reliably. 🙂

  • 25th February 2013 at 22:22


    Would following these steps work for installing to an acer C7 chromebook? provided i use the x86 images from ubuntus site and the modified 64bit kernel that im currently using on ubuntu 12.04? I am interested to see if it would boot, and if so, perhaps using other distributions such as fedora (with the modified chromeOS kernel).

    My main goal is speed, and ubuntu seems to run pretty slowly using the internal hard drive. Im wanting to try install xubuntu or lubuntu but wasnt aware how to do it.

    Regards, Jeremy

  • 26th February 2013 at 15:03

    any step by step for the layman yet?

    • 19th March 2013 at 23:26

      Agree, anything for the non-linux proficient?

      The 12.04 was pretty simple. Something that simple would rock!

    • 9th March 2013 at 23:34

      After changing the printf statements the debs build fine. Thanks for your work on this.

  • 20th March 2013 at 00:27


    How do I boot the ubuntu kernel in the internal mmc 0 p 6 from a nv-u-boot prompt. u-boot is chainloaded from sd card.

    Thanks a ton!

  • 22nd March 2013 at 04:11


    It’s possible to install on the emmc?

    After installing it, can I go off developer mode? Does 13.04 will bring better support for Samsung?


  • 23rd March 2013 at 12:58

    Thanks for the write up, but I’m new to debootstrap so this:

    “Create rootfs — debootstrap, multistrap etc. You can do it directly to SD card partition to save copying later. You can also fetch any existing one.”

    is making me stuck, I’ve tried “debootstrap –arch=armhf raring /media/usb” on my laptop but it fails, so is my command wrong or should I be doing this on the Chromebook..?!

    Thanks, J

  • 27th March 2013 at 07:11

    I tried this method starting with the ubuntu raring armhf core found at and I’ve run into two main problems.

    1. There are no “linux-chromebook” or “xserver-xorg-video-armsoc” after adding your PPA. I did however install chromebook-s3-default-settings.
    2. There doesn’t seem to be a way to install any window manager or desktop environment. I even tried downloading the armhf builds of lubuntu-desktop without any luck.

    Can you go retrace your steps and figure out what I am missing? Do I need to start from a debootstrap?

Comments are closed.