Samsung Chromebook

The Samsung Chromebook XE303C12 is a new line of ultraportables designed specifically for Google's Chrome OS. Powered by a Samsung Exynos 5250, it gives you two cores running at 1.7GHz each and an included Mali-T604 quad-core GPU.

  • Exynos 5250 Dual-Core @ 1.7Ghz
  • 2GB DDR3L
  • 16GB eMMC
  • 11.6" / 1366x768
  • 802.11 a/b/g/n (Dual Band)
  • VGA (dongle)
  • HDMI
  • 1x USB 3.0 / 1x USB 2.0
  • SD/SDHC/SDXC

These instructions will create a dual-booting environment where you can switch between booting Arch Linux ARM and the stock ChromeOS. No changes are made to the internal eMMC drive, and your new Arch Linux ARM install will run completely from external storage. This is the recommended setup for those that just want to take a test drive, or don't want to give up ChromeOS.

Switch to developer mode

  1. Turn off the laptop.
  2. To invoke Recovery mode, you hold down the ESC and Refresh keys and poke the Power button.
  3. At the Recovery screen press Ctrl-D (there's no prompt - you have to know to do it).
  4. Confirm switching to developer mode by pressing enter, and the laptop will reboot and reset the system. This takes about 15-20 minutes.

Note: After enabling developer mode, you will need to press Ctrl-D each time you boot, or wait 30 seconds to continue booting.

Enable USB booting

  1. After booting into developer mode, hold Ctrl and Alt and poke the T key. This will open up the crosh shell.
  2. Type shell to get into a bash shell.
  3. Type sudo su to become root.
  4. Then type this to enable USB booting:crossystem dev_boot_usb=1 dev_boot_signed_only=0
  5. Reboot the system to allow the change to take effect.


Create a root USB or SD for dual booting

These instructions are written for installing to a USB drive with the sda device, assuming no other USB drives are plugged in. For an SD card, click here to magically adjust the instructions for the mmcblk1 device that an SD card will register as.

  1. Get a root shell as described in the previous section.
  2. Since ChromeOS will automatically mount any partitions it finds, unmount everything now:
    umount /dev/sda*
  3. Create a new disk label for GPT. Type y when prompted after running:
    partx -t gpt -u /dev/sda
  4. Partition the USB drive or SD card:cgpt create -z /dev/sda cgpt create /dev/sda cgpt add -i 1 -t kernel -b 8192 -s 32768 -l U-Boot -S 1 -T 5 -P 10 /dev/sda cgpt add -i 2 -t data -b 40960 -s 32768 -l Kernel /dev/sda cgpt add -i 12 -t data -b 73728 -s 32768 -l Script /dev/sda
  5. To create the rootfs partition, we first need to calculate how big to make the partition using information from cgpt show. Look for the number under the start column for Sec GPT table which is 15633375 in this example:
    localhost / # cgpt show /dev/sda start size part contents 0 1 PMBR 1 1 Pri GPT header ... 73728 16384 12 Label: "Script" Type: Linux data UUID: E3DA8325-83E1-2C43-BA9D-8B29EFFA5BC4 15633375 32 Sec GPT table 15633407 1 Sec GPT header
  6. Replace the xxxxx string in the following command with that number to create the root partition:
    cgpt add -i 3 -t data -b 106496 -s `expr xxxxx - 106496` -l Root /dev/sda
  7. Tell the system to refresh what it knows about the disk partitions:
    partx -l /dev/sda
  8. Format the partitions:
    mkfs.ext2 /dev/sda2 mkfs.ext4 /dev/sda3 mkfs.vfat -F 16 /dev/sda12
  9. Download and extract rootfs tarball:
    cd /tmp wget http://archlinuxarm.org/os/ArchLinuxARM-chromebook-latest.tar.gz mkdir root mount /dev/sda3 root tar -xf ArchLinuxARM-chromebook-latest.tar.gz -C root
  10. Copy the kernel to the kernel partition:
    mkdir mnt mount /dev/sda2 mnt cp root/boot/vmlinux.uimg mnt umount mnt
  11. Copy the U-Boot script to the script partition:
    mount /dev/sda12 mnt mkdir mnt/u-boot wget http://archlinuxarm.org/os/exynos/boot.scr.uimg cp boot.scr.uimg mnt/u-boot umount mnt
  12. Install nv-U-Boot:
    wget -O - http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/nv_uboot-snow.kpart.bz2 | bunzip2 > nv_uboot-snow.kpart dd if=nv_uboot-snow.kpart of=/dev/sda1
  13. Unmount the root partition:
    umount root sync
  14. Reboot the computer.
  15. At the splash screen, instead of pressing Ctrl-D to go to CromeOS, press Ctrl-U to boot to the external drive.
  16. You will see U-Boot start after a moment and start counting down from 3. Press any key at this time to interrupt the boot process and get a prompt that looks like:
    SMDK5250 #
  17. At this prompt type this to reset the environment and save it to flash:
    env default -f saveenv
  18. Type reset and press enter, pressing Ctrl-U at the splash screen again, and let U-Boot count down and load Arch Linux ARM.
  19. After logging in as root, you can connect to a wireless network by running:wifi-menu mlan0


Set the second partition to mount to /boot
This is necessary so that kernel upgrades will install the kernel image into the second partition where U-Boot can read it from.

  1. After logging in to Arch Linux ARM, edit /etc/fstab and uncomment the line beginning with /dev/mmcblk1p2 if you are using an SD card, or the line beginning with /dev/sda2 if you are using a USB drive.
  2. Save the file and exit the editor.


Better touchpad responsiveness
Create the file /etc/X11/xorg.conf.d/50-touchpad.conf and add the following to it:
Section "InputClass" Identifier "touchpad" MatchIsTouchpad "on" Option "FingerHigh" "5" Option "FingerLow" "5" EndSection

Enable audio

  1. Install alsa-utils:pacman -S alsa-utils
  2. Run alsamixer as root.
  3. Arrow right until you see four items starting with Left Speaker Mixer, and press M on all four channels to un-mute them.
  4. Arrow right some more until you find four more starting with Right Speaker Mixer and un-mute them as well.
  5. Arrow all the way back left to the Speaker channel and raise the volume a little. Keep it low (< 50ish), since alsa will let you get dangerously high for these speakers.


Suspend when closing the lid

  1. Install acpid and pm-utils:pacman -S acpid pm-utils
  2. Edit /etc/acpi/handler.sh and near the bottom you'll see the button/lid section. Add pm-suspend to the close section to look like:
    button/lid) case "$3" in close) logger 'LID closed' pm-suspend ;;
  3. Enable and start acpid:
    systemctl enable acpid systemctl start acpid
  4. Closing the lid will now trigger a suspend, and opening it will wake the system.


User permissions for backlight control

  1. To allow all users to modify the backlight control at /sys/class/backlight/pwm-backlight.0/brightness, create and edit the file /etc/tmpfiles.d/brightness.conf with these contents:
    f /sys/class/backlight/pwm-backlight.0/brightness 0666 - - - 800
  2. On boot, systemd will now set the permissions of that control file to be world writable. Acceptable values are 0-2800.


References

  1. Developer Information for the Samsung ARM Chromebook
  2. Custom Firmware Information
  3. Using Non-Verified U-Boot on the Samsung ARM Chromebook
  4. Using an Upstream Kernel on the Samsung ARM Chromebook

Architecture

ARMv7l

Processor

Samsung Exynos 5250

RAM

2048MB

NAND

16384MB

SD

Full SD

USB

2

Ethernet

None

Wireless

A/B/G/N