blob: 9b513ae7c0e94a0d203e6f423be6644b9ffe7793 [file] [log] [blame] [view]
# Install Fuchsia on a Chromebook
## Supported Chromebooks
These Chromebooks are used regularly by developers and should be stable.
* Google Pixelbook Go (_atlas_)
### Formerly supported Chromebooks
These Chromebooks are supported on a best-effort basis, and are not regularly tested.
* Google Pixelbook (_eve_)
### Other ChromeOS devices
Other x86-based ChromeOS devices may or may not work. ARM-based ChromeOS devices will not work out of the box.
## Prerequisites
Ensure that you have a `chromebook-x64` build for Fuchsia.
1. Complete the [Download the Fuchsia source code][get-fuchsia-source]
guide.
2. As part of [Configure and Build Fuchsia][build-fuchsia], set your build
configuration to use the following Chromebook product:
```posix-terminal
fx set workstation_eng.chromebook-x64 --release
```
## Update ChromeOS
If your Chromebook has never been booted, it is best to boot it normally to check
for any critical updates, as follows:
1. Boot the Chromebook normally. Opening the lid usually powers on the device.
If this doesn't work, the power button is on the left side of the device, near
the front of the wrist rest.
2. Tap the "Let's go" button.
3. Connect to a wired or wireless network.
4. Accept the terms to proceed to the update check step.
5. The device should check for updates, install any found.
6. After rebooting from any updates, tap 'Browse as Guest' in the lower left
corner.
7. From the browser UI, go into "Settings->About Chrome OS" or "Help->About Chrome
OS" and confirm the newly installed version.
## Put your device into developer mode
Caution: This will erase any state stored locally on your Chromebook.
1. Power off the Chromebook.
2. Go into Recovery Mode.
Hold down Esc+Refresh (first and third buttons on the top row of the keyboard).
Then press the Power button (bottom left side of the device).
3. Start by disabling OS verification by pressing Ctrl+D. You should see "To turn OS verification OFF, press ENTER". Press Enter to confirm.
4. When your device reboots, you'll get confirmation that OS verification is OFF. Press Ctrl+D again to enter Developer Mode.
5. Wait for the device to re-configure itself, which will take several minutes.
Initially it may not appear to be doing anything. Let the device sit for a
minute or two. You will hear two loud <BEEP>s early in the process. The
process is complete when you hear two more loud <BEEP>s.
6. The device should reboot itself when the Developer Mode transition is
complete. You can now jump to Step #2 in the "Boot from USB" section.
## Boot from USB
1. Boot into ChromeOS.
2. You should see a screen that says "OS verification is OFF" and approximately
30 seconds later the boot will continue. Wait for the Welcome or Login screen
to load. **Ignore** any link for "Enable debugging features".
3. Press Ctrl+Alt+Refresh/F3 to enter a command shell. If pressing this key
combination has no effect, try rebooting the Chromebook once more.
4. Enter 'chronos' as the user with a blank password
5. Enable USB booting by running `sudo crossystem dev_boot_usb=1`
6. _(optional)_ Default to USB booting by running `sudo crossystem dev_default_boot=usb`.
7. Plug the USB drive into the Chromebook.
8. Reboot by typing `sudo reboot`
9. On the "OS verification is OFF" screen press Ctrl+U to bypass the timeout and
boot from USB immediately. (See [Tips and Tricks](#tips-and-tricks) for other
short circuit options)
The USB drive is only needed for booting when you want to re-pave or otherwise
netboot the device.
If you didn't make USB booting the default (Step #6), you will need to press Ctrl+U
at the grey 'warning OS-not verified' screen to boot from USB when you power on your device.
If the device tries to boot from USB, either because that is the default or you
pressed Ctrl+U, and the device fails to boot from USB you'll hear a fairly loud <BEEP>.
Note that ChromeOS bootloader USB enumeration during boot has been observed to be slow. If you're
having trouble booting from USB, it may be helpful to remove other USB devices
until the device is through the bootloader and also avoid using a USB hub.
## Tips and Tricks {#tips-and-tricks}
By default the ChromeOS bootloader has a long timeout to allow you to press
buttons. To shortcut this you can press Ctrl+D or Ctrl+U when on the grey screen
that warns that the OS will not be verified. Ctrl+D will cause the device to
skip the timeout and boot from its default source. Ctrl+U will skip the timeout
and boot the device from USB.
### Configuring boot source from Fuchsia
Fuchsia has an equivalent to `crossystem` called `cros_nvtool`.
You can run `cros_nvtool set dev_boot_default <usb|disk>` to modify the default boot source of
the system to USB or disk, respectively.
### Going back to ChromeOS
To go back to ChromeOS you must modify the priority of the Fuchsia kernel
partition to be lower than that of at least one of the two ChromeOS kernel
partitions.
1. Press Alt+Esc to get to a virtual console if not already on one
2. Press Alt+Fullscreen to get to a terminal emulator on Fuchsia
3. Find the disk that contains the KERN-A, KERN-B, and KERN-C partitions with
the `lsblk` command. Below this is device 000, note how the device path of the
kernel partitions is an extension of that device.
$ lsblk
ID SIZE TYPE LABEL FLAGS DEVICE
000 232G /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block
001 5G data STATE /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-000/block
002 16M cros kernel KERN-A /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-001/block
003 4G cros rootfs ROOT-A /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-002/block
004 16M cros kernel KERN-B /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-003/block
005 4G cros rootfs ROOT-B /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-004/block
006 64M cros kernel KERN-C /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-005/block
007 4G cros rootfs ROOT-C /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-006/block
4. Use the `gpt` command to look at the device's (eg. 000) partition map.
$ gpt dump /dev/class/block/000
blocksize=0x200 blocks=488554496
Partition table is valid
GPT contains usable blocks from 34 to 488554462 (inclusive)
Paritition 0: STATE
Start: 478035968, End: 488521727 (10485760 blocks)
id: 51E8D442-0419-2447-96E5-49CB60CF0B25
type: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
flags: 0x0000000000000000
Paritition 1: KERN-A
Start: 20480, End: 53247 (32768 blocks)
id: 054CD627-F23C-5C40-8035-C188FA57DE9C
type: FE3A2A5D-4F32-41A7-B725-ACCC3285A309
flags: priority=2 tries=0 successful=1
Paritition 2: ROOT-A
Start: 8704000, End: 17092607 (8388608 blocks)
id: 936E138F-1ACF-E242-9C5B-3667FAA3C10C
type: 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
flags: 0x0000000000000000
Paritition 3: KERN-B
Start: 53248, End: 86015 (32768 blocks)
id: A8667891-8209-8648-9D5E-63DC9B8D0CB3
type: FE3A2A5D-4F32-41A7-B725-ACCC3285A309
flags: priority=1 tries=0 successful=1
Paritition 4: ROOT-B
Start: 315392, End: 8703999 (8388608 blocks)
id: 8B5D7BB4-590B-E445-B596-1E7AA1BB501F
type: 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
flags: 0x0000000000000000
Paritition 5: KERN-C
Start: 17092608, End: 17223679 (131072 blocks)
id: C7D6B203-C18F-BC4D-9160-A09BA8970CE1
type: FE3A2A5D-4F32-41A7-B725-ACCC3285A309
flags: priority=3 tries=15 successful=1
Paritition 6: ROOT-C
Start: 17223680, End: 25612287 (8388608 blocks)
id: 769444A7-6E13-D74D-B583-C3A9CF0DE307
type: 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
flags: 0x0000000000000000
5. Note that KERN-A and KERN-B typically have ChromeOS kernels. The
Zircon kernel appears as KERN-C as in the example above, or as
ZIRCON-A instead in certain setups.
To go to ChromeOS, lower the priority of KERN-C (or ZIRCON-A)
by referencing the **partition** index on the **disk** that has
that partition. E.g.:
$ gpt edit_cros 5 -P 0 /dev/class/block/000
6. Reboot.
7. When the ChromeOS bootloader appears, press Space to re-enable
OS Verification. Your device will reboot. This time, it will display
a message with "Your system is repairing itself. Please wait". This operation
will take around 5 minutes, after which the Chromebook will reboot one final
time. The device will reboot to the initial setup screen.
To go back to the Fuchsia kernel, just re-pave the device.
[get-fuchsia-source]: /docs/get-started/get_fuchsia_source.md
[build-fuchsia]: /docs/get-started/build_fuchsia.md