After several recompilations I finally got what I wanted on my Chromebook. Clean and easy way of booting own kernel.
Now situation is clean and easy:
- power on Chromebook
- ChromeOS U-Boot from SPI flash starts
- white screen of warning appears
- Ctrl-d to skip it
- U-Boot starts from mmcblk0p1
- U-Boot reads boot.txt from mmcblk0p2 (ext2 /boot/ partition)
- U-Boot reads uImage kernel and exynos5250-snow.dtb file from mmcblk0p2
- Kernel boots directly to Fedora F19 stored on mmcblk0p3
This way I can quickly test mainline kernels (but this may require U-Boot change for simplefb support), manipulate 3.-chromeos ones etc.
Next step would be replace bootloader stored in SPI flash but this voids warranty so let it wait a bit.
Olof Johannson wrote on Google+ how to get mainline kernel booting on Samsung ARM Chromebook. As mine returned from repair with new speakers and bottom cover I decided to take a look.
With chainloaded U-Boot and just standard “exynos_defconfig” build of 3.11-rc2 I got my machine booting to Ubuntu right away:
00:06 hrw@krolik:~$ cat /proc/device-tree/model ;echo
00:06 hrw@krolik:~$ uname -snrp
Linux krolik 3.11.0-rc2 armv7l
There are some things missing (audio, usb 3.0, backlight and more) but even with what is available we can boot and use Chromebook with mainline kernel instead of ChromeOS one.
I will revert to 3.4-chromeos for now and try 3.8-chromeos one but that’s because I use Chromebook as developer machine for some builds where storage speed matters.
Linus Torvalds released Linux 3.9 and many websites published summaries what’s new in it. One of common entries is support for ChromeOS laptops. But what that means for Samsung ARM Chromebook users?
Let’s start with Kernel Newbies summary which lists 5 commits:
None of them are for ARM Chromebook. But that does not mean that nothing was done for it. Touchpad driver was merged, many Exynos platform changes were made but yeah — still lot to do.
But that’s a curse of ARM platforms…
UPDATE: Arnd Bermann wrote a comment on my Google+ post that Olof Johansson has “linux-next” bootable on ARM Chromebook. YAY!
UPDATE: I got ChromeOS 3.8 kernel running on my Chromebook. Needs some testing and then will land in “saucy” as default one probably.
Lot of people asked me how I managed to fry left speaker in my Chromebook. There are also few which said that it is Ubuntu fault.
So today I used recovery to wipe out my installation of Ubuntu from device and decided to check under Chromium OS. And yes, I got nice smell of burnt plastic etc coming from left speaker area.
Why? Because it is kernel bug. Not Ubuntu, ALSA or user. Ok, it is a bit of user’s fault cause you should not have to play with ALSA mixer. But you can — all binaries are part of Chromium OS stable.
So let me give you needed steps:
- Boot Samsung Chromebook (ARM one) to Chromium OS
- Login or use guest session
- Run terminal (Ctrl+Alt+t)
- Run “alsamixer -c0″
- Set “Lineout” to highest value
- Unmute everything what starts with “Left” or “Right” (depends which speaker you do not like)
- Touch speakers (but better not for long)
- Hold “Power” button to shut down before it will burn though your desk.
In normal situation I would assume that sound driver will take care of combinations which may break your hardware. But looks like Chromebook developers did had such idea.
Is this howto useful? I think it is. Cause if you have device broken in some way and you want to get it replaced you can just run it and hope for replacement instead of repair.
And when next time someone will write me “go and fix ubuntu rather than putting blame on samsung. Its Ubuntu which is the cause” like I got in recent comment I will just ban such person from commenting.
Today Alan Pope was surprised that I am using Midnight Commander. It was not the first time when I saw such reaction.
Why am I using mc? It is “simple” tool, works fine and I know it. Some of its features are useless today (like /#sh: way of handling copying over ssh which got replaced by sshfs) but if it works why I should abandon it? I can use it remotely (try it with Nautilus/Dolphin/Thunar), on every type of terminal (but was incredibly hardcore on HP2623A one).
But thing which I love it in is “patchfs”. It allows to handle diffs like archives but with read/write operations. I can remove not wanted parts from patch without going into editor. When I was dealing with crazy/huge patches I was able to clean them in few minutes
Over year ago I wrote How to cross compile ARM kernel under Ubuntu 10.10 and this became one of most popular posts on my website. It may work still but it is terribly outdated so I decided that it is a time for update.
Users of Ubuntu 12.04 ‘precise’ have much simpler situation when it comes to cross compilation of Linux kernels than ones who use older releases. Everything is now in distribution, we have a lot of packages converted to multiarch so instruction is much shorter.
There are few steps to cross compile Linux kernel under Ubuntu 12.04 ‘precise’ (for “armhf” which is officially supported now):
apt-get install gcc-arm-linux-gnueabihf
apt-get source linux-source-3.2.0
- Install packages required to build kernel:
apt-get build-dep linux-source-3.2.0
dpkg-buildpackage -b -aarmhf
And that’s all. Linaro kernels will be as easy to build as Ubuntu one on next days as we have to update packaging to recent Ubuntu version.
Today I upgraded my virtual machine from Ubuntu 10.04 ‘lucid’ to 11.04 ‘natty’ + 3.0 kernel from 11.10 ‘oneiric’. For first time I used official way for upgrades and did that step by step (lucid -> maverick -> natty) with reboot on each step. Each upgrade ended with reboot of vm.
But fun started when I wanted to install 3.0 kernel from 11.10 ‘oneiric’… Installation went fine — mostly due to Alex’s comment to my blog post about it. But after reboot machine did not wanted to boot at all ;(
xm create NAME” resulted in “Error: Boot loader didn’t return any data!” message… After some googling (as I never was XEN administrator) and experiments I got what was wrong. We use ‘py-grub’ to boot VMs and this tool uses “/boot/grub/menu.lst” to get information which kernel to boot. But Ubuntu systems are using “/boot/grub/grub.cfg” due to grub2 instead of grub-legacy.
Anyway I updated menu.lst by hand and VM booted fine. Need to remember for next kernel update ;)