| # 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 |