1 Samsung XE303C12 aka Chromebook Snow
2 ====================================
4 This file describes booting the Chromebook from an SD card containing
5 Buildroot kernel and rootfs, using the original bootloader. This is
6 the least invasive way to get Buildroot onto the devices and a good
9 The bootloader will only boot a kernel from a GPT partition marked
10 bootable with cgpt tool from vboot-utils package.
11 The kernel image must be signed using futility from the same package.
12 The signing part is done by sign.sh script in this directory.
14 It does not really matter where rootfs is as long as the kernel is able
15 to find it, but this particular configuration assumes the kernel is on
16 partition 1 and rootfs is on partition 2 of the SD card.
17 Make sure to check kernel.args if you change this.
21 Start by configuring and building the images.
23 make chromebook_snow_defconfig
24 make menuconfig # if necessary
27 The important files are:
29 uImage.kpart (kernel and device tree, signed)
31 bootsd.img (SD card image containing both kernel and rootfs)
33 Write the image directly to some SD card.
34 WARNING: make sure there is nothing important on that card,
35 and double-check the device name!
37 SD=/dev/mmcblk1 # may be /dev/sdX on some hosts
38 dd if=output/images/bootsd.img of=$SD
40 Switching to developer mode and booting from SD
41 -----------------------------------------------
42 Power Chromebook down, then power it up while holding Esc+F3.
43 BEWARE: switching to developer mode deletes all user data.
44 Create backups if you need them.
46 While in developer mode, Chromebook will boot into a white screen saying
47 "OS verification is off".
49 Press Ctrl-D at this screen to boot Chromium OS from eMMC.
50 Press Ctrl-U at this screen to boot from SD (or USB)
51 Press Power to power it off.
52 Do NOT press Space unless you mean it.
53 This will switch it back to normal mode.
55 The is no way to get rid of the white screen without re-flashing the bootloader.
59 Loud *BEEP* after pressing Ctrl-U means there's no valid partition to boot from.
60 Which in turn means either bad GPT or improperly signed kernel.
62 Return to the OS verification screen without any sounds means the code managed
63 to reboot the board. May indicate properly signed but invalid image.
65 Blank screen means the image is valid and properly signed but cannot boot
66 for some reason, like missing or incorrect DT.
68 In case the board becomes unresponsive:
70 * Press Esc+F3+Power. The board should reboot instantly.
71 Remove SD card to prevent it from attempting a system recovery.
73 * Hold Power button for around 10s. The board should shut down into
74 its soft-off mode. Press Power button again or open the lid to turn in on.
76 * If that does not work, disconnect the charger and push a hidden
77 button on the underside with a pin of some sort. The board should shut
78 down completely. Opening the lid and pressing Power button will not work.
79 To turn it back on, connect the charger.
81 Partitioning SD card manually
82 -----------------------------
83 Check mksd.sh for partitioning commands.
85 Use parted and cgpt on a real device, and calculate the partition
86 sizes properly. The kernel partition may be as small as 4MB, but
87 you will probably want the rootfs to occupy the whole remaining space.
89 cgpt may be used to check current layout:
91 output/host/usr/bin/cgpt show $SD
93 All sizes and all offsets are in 512-byte blocks.
95 Writing kernel and rootfs to a partitioned SD card
96 --------------------------------------------------
97 Write .kpart directly to the bootable partition:
99 dd if=output/images/uImage.kpart of=${SD}1
101 Make a new filesystem on the rootfs partition, and unpack rootfs.tar there:
104 mount ${SD2} /mnt/<ROOTFS-PARTITION>
105 tar -xvf output/images/rootfs.tar -C /mnt/<ROOTFS-PARTITION>
106 umount /mnt/<ROOTFS-PARTITION>
108 This will require root permissions even if you can write to $SD.
112 The command line is taken from board/chromebook/snow/kernel.args and stored
113 in the vboot header (which also holds the signature).
115 The original bootloader prepends "cros_secure console= " to the supplied
116 command line. The only way to suppress this is to enable CMDLINE_FORCE
117 in the kernel config, disabling external command line completely.
119 That's not necessary however. The mainline kernel ignores cros_secure,
120 and supplying console=tty1 in kernel.args undoes the effect of console=
122 Booting with console= suppresses all kernel output.
123 As a side effect, it makes /dev/console unusable, which the init in use must
128 Run modprobe mwifiex_sdio to load the driver.
129 The name of the device should be mlan0.
133 https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook
134 http://linux-exynos.org/wiki/Samsung_Chromebook_XE303C12/Installing_Linux
135 http://archlinuxarm.org/platforms/armv7/samsung/samsung-chromebook
136 http://www.de7ec7ed.com/2013/05/application-processor-ap-uart-samsung.html
137 http://www.de7ec7ed.com/2013/05/embedded-controller-ec-uart-samsung.html