| # Install Fuchsia on Pixelbook | |
| ## Prerequisites | |
| Ensure that you have a chromebook build for Fuchsia. Note that Chromebook is now a | |
| distinct board configuration from other x64 devices. See [Paving](/docs/development/hardware/paving.md#building) for | |
| more information. | |
| ## Update ChromeOS | |
| If your Pixelbook has never been booted, it is best to boot it normally to check | |
| for any critical updates, as follows: | |
| 1. Boot the Pixelbook 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 version is >=62. | |
| ## Put your device into developer mode | |
| ***WARNING: This will erase any state stored locally on your Pixelbook*** | |
| 1. Power off the Pixelbook. | |
| 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 Pixelbook 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 Pixelbook. | |
| 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. | |
| ### 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/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block | |
| 001 5G data STATE /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-000/block | |
| 002 16M cros kernel KERN-A /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-001/block | |
| 003 4G cros rootfs ROOT-A /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-002/block | |
| 004 16M cros kernel KERN-B /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-003/block | |
| 005 4G cros rootfs ROOT-B /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-004/block | |
| 006 64M cros kernel KERN-C /dev/sys/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-005/block | |
| 007 4G cros rootfs ROOT-C /dev/sys/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 PixelBook 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. |