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