Make sure that developer mode (Hold ESC
+ Refresh
and poke the power button, then ctrl+D
when not prompted) and USB booting have been enabled (crossystem dev_boot_usb=1
). Then reboot.
Follow these instructions until step 10, where we'll make some substitutions. Our directions will vary slightly because we need HP (spring
) variants of the Samsung (snow
) kernel and uboot. These can be found in a dropbox link in this thread.
Before we reboot, we install a few packages in chroot
. Suppose that /dev/sda3
is mounted at /tmp/root
.
$ cp /etc/resolv.conf /tmp/root/etc/resolv.conf
$ sudo mount -o bind /dev /tmp/root/dev
$ sudo mount -t devpts none /tmp/root/dev/pts
$ sudo mount -t proc proc /tmp/root/proc
$ sudo mount -t sysfs sys /tmp/root/sys
$ sudo chroot /tmp/root /bin/bash
Now to install a few things:
# pacman -S devtools-alarm base-devel git libyaml
trousers and vboot-utils, too, but from AUR!
dosfstools for mkfs.vfat
# exit
When finished, make sure to unmount:
$ sudo umount /tmp/root/dev/pts /tmp/root/dev /tmp/root/proc /tmp/root/sys
If we need to chroot
in the future we can just /tmp/root/usr/bin/arch-chroot /tmp/root
.
Copy /usr/share/alsa/ucm
and /usr/share/vboot
from chromeOS to the rootfs so we can get sound working and sign our kernel in the next section.
From our USB install we can take over the eMMC. Actually, you can skip the USB install and just take over ROOT-C
and KERN-C
on the standard partition table. That's just not how I did it. The procedure looks (I hope) exactly like before, except replacing /dev/sda
with /dev/mmcblk0
.
First, it was reported that cgpt
could be copied from chromeOS and "just work". This wasn't the case, but it can be compiled from vboot-utils
. A little bit has been writting about the procedure in this thread.
We partition /dev/mmcblk0
just as we did /dev/sda
.
# cgpt show /dev/mmcblk0
start size part contents
0 1 PMBR (Boot GUID: E12BD9F6-7833-3449-8FD9-DAAB09FAD167)
1 1 Pri GPT header
2 32 Pri GPT table
8192 32768 1 Label: "U-Boot"
Type: ChromeOS kernel
UUID: A9805C2B-FC70-994C-9524-D4D9C8E09ED2
Attr: priority=10 tries=5 successful=1
40960 32768 2 Label: "Kernel"
Type: Linux data
UUID: BD69B9DE-AD38-1E4C-BEC4-644B8FCAF013
106496 30670815 3 Label: "Root"
Type: Linux data
UUID: 1186D744-C59D-AC42-ACAD-2D7479D39FCA
73728 32768 12 Label: "Script"
Type: Linux data
UUID: FB2614E2-2C58-584A-ADFB-5A8A8A28F66C
30777311 32 Sec GPT table
30777343 1 Sec GPT header
Make the same filesystems, unpack the rootfs, chroot in, etc - all as before. We need to create a new kernel to write, since the one that was so lovingly packaged up for us has a kernel command line that sets root=/dev/sda3
. We need to change that to /dev/mmcblk0p3
.
For this, we use vbtools.
# echo "root=/dev/mmcblk0p3 rootwait rw lsm.module_locking=0" > cmdline.txt
# vbutil_kernel --pack arch-eMMC.kpart \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--config cmdline.txt \
--vmlinuz /boot/vmlinux.uimg \
--arch arm --version 1
# dd if=arch-eMMC.kpart of=/dev/mmcblk0p1
I've automated all of the usb stick creation now, this will provide you with a bootable USB stick, and can be used to install to eMMC after booting from USB: https://github.com/omgmog/archarm-usb-hp-chromebook-11/
And a write-up here: http://blog.omgmog.net/post/installing-arch-linux-arm-on-the-hp-chromebook-11/