| # Install Fuchsia on a Khadas VIM3 board |
| |
| This guide shows you how to install Fuchsia on a |
| [Khadas VIM3](https://www.khadas.com/vim3). The installation |
| process will probably take between 1 to 3 hours. |
| |
| Running Fuchsia on VIM3 is useful if you want to explore how Fuchsia works on |
| relatively low-cost real hardware that supports many kinds of peripheral devices. |
| See [Appendix: Feature support](#features) for details on which VIM3 features |
| Fuchsia supports. |
| |
| If you just want to explore Fuchsia with the lowest friction possible, check out |
| [Get started with the Fuchsia SDK](/docs/get-started/sdk/index.md) instead. |
| |
| See [Appendix: Support](#support) if you have any trouble completing |
| this guide. |
| |
| ## Audience {#audience} |
| |
| If you've never tinkered with electronics you might find this |
| guide difficult to complete. For example, this guide assumes that you know |
| how to hook up serial cable wires to GPIOs to read logs and send commands |
| over a serial communication program. |
| |
| This guide also assumes that you're comfortable |
| with CLI workflows such as building Fuchsia from source. |
| |
| ## Prerequisites {#prerequisites} |
| |
| You'll need all of the following hardware and software to complete this guide: |
| |
| * A [Khadas VIM3](https://www.khadas.com/vim3) single-board computer. |
| |
| Caution: It's unknown whether Fuchsia will run on the Basic model VIM3. |
| This guide was validated with the Pro model VIM3. |
| |
| * A desktop or laptop computer that's running Linux and has 2 USB ports |
| available. |
| |
| Key Term: This desktop or laptop is called the **host** |
| throughout the rest of this guide. |
| |
| Caution: A macOS host may work but these instructions have not been validated |
| with macOS. Building Fuchsia on a remote Linux computer and then attempting to flash |
| Fuchsia onto the VIM3 with a local macOS host is known to not work. |
| |
| <!-- Context from kayce@: Local macOS host + remote Linux workstation doesn't work because |
| when you run `fx pave` you get an error about a mismatch between the local |
| host OS and the remote workstation OS. --> |
| |
| Note: This guide assumes that your Linux distribution has Debian commands |
| like `apt`. |
| |
| * A power supply of at least 24W to your host. The VIM3 can draw that much power when |
| [DVFS](https://en.wikipedia.org/wiki/Dynamic_frequency_scaling) is enabled. |
| |
| * A working Fuchsia development environment on your host. In other words you |
| should be able to build Fuchsia from its source code on your host. See |
| [Build Fuchsia](#build). |
| |
| * A [USB to TTL serial cable](https://www.adafruit.com/product/954). |
| |
| * A USB-C to USB-\* cable that supports both data and power delivery. |
| The USB-C side is for the VIM3. The other side can be whatever USB |
| type your host supports. |
| |
| The following is optional: |
| |
| * A [heatsink](https://www.khadas.com/product-page/new-vim-heatsink). |
| This enables running 2 CPU cores on the VIM3 at full speed without |
| reaching 80°C, the critical temperature beyond which cores are throttled |
| down. |
| |
| See the [VIM3 collection](https://www.khadas.com/shop?Collection=VIM3&sort=price_descending) |
| in the Khadas shop for examples of compatible accessories. |
| |
| Note: All the links in this section are only for your convenience. You |
| don't need to buy from these exact stores or these exact parts. |
| |
| ## Build Fuchsia {#build} |
| |
| If you don't already have an [in-tree][glossary.in-tree] environment |
| set up, you should start the process now because it can take a while to |
| complete: |
| |
| 1. [Download the Fuchsia source code](/docs/get-started/get_fuchsia_source.md). |
| |
| 1. [Configure and build Fuchsia](/docs/get-started/build_fuchsia.md). |
| |
| * When building Fuchsia, use `fx set core.vim3` instead. |
| |
| Note: The rest of this guide assumes that your Fuchsia source code directory |
| is located at `~/fuchsia`. |
| |
| Important: Whenever you see an `fx` command this guide assumes that your |
| working directory is within your in-tree Fuchsia source code checkout. |
| In other words this guide assumes that you run `cd ~/fuchsia` before |
| running any `fx` commands. |
| |
| You'll use the Fuchsia development environment to build the Fuchsia image |
| for VIM3 and run an in-tree CLI tool for flashing the Fuchsia image onto |
| the VIM3. |
| |
| ## Set up the hardware {#hardware} |
| |
| Set up the VIM3 to communicate with your host: |
| |
| 1. Connect the VIM3 and your host to each other with the USB-C to USB-\* cable. |
| The white LED on the VIM3 should turn on. |
| |
| Caution: Don't put a [USB hub](https://en.wikipedia.org/wiki/USB_hub) |
| between the VIM3 and your host. The hub may make it harder for your |
| VIM3 and host to detect and communicate with each other. |
| |
| This connection is used to power and flash the VIM3 with |
| [`fastboot`](https://en.wikipedia.org/wiki/Fastboot). |
| |
| 1. Connect the serial cable wires to the VIM3's GPIOs: |
| |
| * GND to pin 17. |
| |
| * RX (in to VIM3) to pin 18. |
| |
| * TX (out from VIM3) to pin 19. |
| |
| * Don't connect the power wire of your serial cable to any VIM3 GPIO. |
| The VIM3 is getting power through the USB cable. |
| |
| Tip: Pins 1, 20, 21, and 40 are labeled on the circuit board. |
| |
| Caution: In general the colors for TX and RX wires are not standardized. |
| For example your RX wire may be blue or green. |
| |
| See [Serial Debugging Tool](https://docs.khadas.com/products/sbc/vim3/development/setup-serial-tool) |
| for an example image of how your serial wires should be connected to the VIM3. |
| |
| ### Verify the serial connection {#serial} |
| |
| Make sure that you can view the logs being sent over the serial cable: |
| |
| 1. Open Fuchsia's serial console: |
| |
| ```posix-terminal |
| fx serial |
| ``` |
| |
| Note: If `fx serial` detects multiple USB devices and you don't know which one to use, |
| try disconnecting the serial cable from your host, running `ls /dev/ttyUSB*`, |
| then re-connecting the serial cable and running the command again. If you see |
| no difference when running `ls /dev/ttyUSB*` try `ls /dev/tty*` or `ls /dev/*` instead. |
| |
| 1. Press the reset button on the VIM3. The reset button is the one with the **R** |
| printed next to it on the circuit board. |
| See [VIM3/3L Hardware](https://docs.khadas.com/products/sbc/vim3/hardware/start) for |
| a diagram. In your serial console you should see human-readable logs. |
| |
| ## Erase the eMMC {#emmc} |
| |
| In later sections of this guide you'll update the bootloader and |
| OS on the VIM3. These updates don't work unless you |
| completely erase the eMMC first: |
| |
| 1. Press the reset button on your VIM3. |
| |
| 1. Right after you press the reset button, start repeatedly pressing the |
| <kbd>Space</kbd> key as your VIM3 boots up. Make sure that your cursor |
| is focused on your serial console. The bootloader process should pause |
| and your serial console should show a `kvim3#` prompt. Your serial |
| console is now providing you access to the **U-Boot shell**. |
| |
| 1. Run the following command in the U-Boot shell: |
| |
| ```posix-terminal |
| store init 3 |
| ``` |
| |
| Your serial console logs should verify that the eMMC was correctly erased. |
| |
| See [Erase eMMC](https://docs.khadas.com/products/sbc/vim3/development/erase-emmc) |
| for more details. |
| |
| ## Update the Android image on the VIM3 {#android} |
| |
| <!-- Context: https://forum.khadas.com/t/unable-to-change-bootloader-for-vim3/12708/6 --> |
| |
| The Android image that ships by default on the VIM3 does |
| not support Fuchsia installation. If you just received your VIM3 |
| from Khadas you must update your Android image: |
| |
| 1. Click the following URL to download the updated Android image: |
| <https://dl.khadas.com/firmware/vim3/android/VIM3_Pie_V210527.7z> |
| |
| 1. Extract the compressed archive file (`VIM3_Pie_V210527.7z`). |
| After the extraction you should have a `VIM3_Pie_V210527` directory |
| with an `update.img` file in it. |
| |
| 1. Follow the instructions in [Install OS into |
| eMMC](https://docs.khadas.com/products/sbc/vim3/install-os/install-os-into-emmc-via-usb-tool). |
| When running `aml-burn-tool` the value for the `-i` flag should be the |
| path to your `update.img` file. Your command should look similar to this: |
| |
| ```posix-terminal |
| aml-burn-tool -b VIM3 -i ~/Downloads/VIM3_Pie_V210527/update.img |
| ``` |
| |
| Caution: Make sure that you're following the instructions for Ubuntu |
| and VIM3 by clicking the **Install on Ubuntu** and **VIM3/VIM3L** tabs. |
| These instructions are not shown by default. |
| |
| Tip: The `TST Mode` workflow is probably the easiest and fastest way to get |
| your VIM3 into Upgrade Mode. |
| |
| 1. If the white and red LEDs on your VIM3 are off and the blue LED is on, |
| it means that your VIM3 is in sleep mode. Try putting your VIM3 |
| back into [Upgrade Mode](https://docs.khadas.com/products/sbc/vim3/install-os/boot-into-upgrade-mode) |
| and then pressing the reset button again. |
| |
| At this point the white LED on your VIM3 should be on and you should see |
| logs in your serial console after you press the reset button on your VIM3. |
| |
| ## Update the bootloader {#bootloader} |
| |
| Flash Fuchsia's custom bootloader onto the VIM3: |
| |
| 1. Access the U-Boot shell again by pressing the reset button and |
| then repeatedly pressing the <kbd>Space</kbd> key in your serial |
| console. When your serial console shows the `kvim3#` prompt, you're |
| in the U-Boot shell. |
| |
| 1. In your U-Boot shell run the following command: |
| |
| ```posix-terminal |
| fastboot |
| ``` |
| |
| You should see the following logs in your serial console: |
| |
| ``` |
| g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot |
| |
| USB RESET |
| SPEED ENUM |
| |
| USB RESET |
| SPEED ENUM |
| ``` |
| |
| If you see the first line (`g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot`) |
| but not the lines after that, try using a different USB-C to USB-\* cable and make |
| sure that it supports both data and power delivery. |
| |
| 1. Open a new terminal window in your host and run the following commands: |
| |
| ```posix-terminal |
| cd ~/fuchsia/prebuilt/third_party/fastboot |
| |
| ./fastboot flashing unlock |
| |
| ./fastboot flashing unlock_critical |
| |
| ./fastboot flash bootloader ~/fuchsia/prebuilt/third_party/firmware/vim3/u-boot.bin.unsigned |
| |
| ./fastboot reboot |
| ``` |
| |
| Caution: Installing the Android SDK Platform Tools probably installed another |
| instance of `fastboot` on your host. When working with Fuchsia, remember to use |
| the [in-tree][glossary.in-tree] version of `fastboot` at |
| `~/fuchsia/prebuild/third_party/fastboot/fastboot`. The `fastboot` protocol allows arbitrary |
| vendor protocol extensions and Fuchsia may rely on this functionality in the future. |
| |
| Note: You can also build the custom bootloader (`u-boot.bin.unsigned`) from source: |
| <https://third-party-mirror.googlesource.com/u-boot/+/refs/heads/vim3> |
| |
| ## Flash Fuchsia into the eMMC {#fuchsia} |
| |
| Complete these steps to install Fuchsia onto your VIM3 for the first time. You only |
| need to do these steps once. Once you have Fuchsia running on your VIM3, the |
| [Update your Fuchsia image](#update) workflow is a faster way to update the Fuchsia |
| image on your VIM3. |
| |
| 1. If you just ran the `./fastboot reboot` command from the last section then |
| your VIM3 should already be in `fastboot` mode. You can check your `fx serial` |
| logs to confirm. Otherwise press the reset button and then repeatedly press |
| the <kbd>F</kbd> in your `fx serial` console until you see `USB RESET` and |
| `SPEED ENUM` again. |
| |
| Important: You have to press the <kbd>F</kbd> key now to enter <code>fastboot</code> |
| mode. Previously you pressed the <kbd>Space</kbd> key. |
| |
| 1. From a separate terminal on your host run the following command: |
| |
| ```posix-terminal |
| fx flash |
| ``` |
| |
| Your VIM3 is now running Fuchsia! |
| |
| ## Update your Fuchsia image {#update} |
| |
| Complete these steps when you already have Fuchsia running on your VIM3 |
| and want to update the Fuchsia image on your VIM3. |
| |
| 1. Run the following command from a terminal on your host: |
| |
| ```posix-terminal |
| fx serve |
| ``` |
| |
| Leave this command running. |
| |
| 1. Make some changes in your in-tree Fuchsia checkout and build the changes. |
| |
| 1. Open a new terminal window and perform an OTA update of the Fuchsia image on your VIM3: |
| |
| ```posix-terminal |
| fx ota |
| ``` |
| |
| ## Appendix: Fix a bricked VIM3 {#bricks} |
| |
| Do these steps if you've [bricked](https://en.wikipedia.org/wiki/Brick_(electronics)) |
| your VIM3 and need to "factory reset" it: |
| |
| 1. [Erase the eMMC](#emmc). |
| 1. [Update the Android image](#android). |
| 1. [Update the bootloader](#bootloader). |
| 1. [Flash Fuchsia into the eMMC](#fuchsia). |
| |
| ## Appendix: Support {#support} |
| |
| * For issues that seem related to VIM3 hardware or firmware, try the |
| [VIM3 official docs](https://docs.khadas.com/linux/vim3/index.html) and |
| [Khadas VIM3 official forum](https://forum.khadas.com/c/khadas-vim3/30). |
| * For issues that seem related to Fuchsia, try the |
| [Fuchsia mailing lists and chat rooms](/docs/contribute/community/mailing-lists.md). |
| |
| ## Appendix: Feature support {#features} |
| |
| Fuchsia currently supports these features of the VIM3: |
| |
| * UART Serial Debugger |
| * Paving over ethernet and USB |
| * Storage (eMMC) |
| * HDMI Display and Framebuffer |
| * GPU (Mali) and Vulkan graphics |
| * Ethernet |
| * SDIO |
| * I2C |
| * GPIO |
| * Temperature Sensors and DVFS |
| * RTC |
| * Clock |
| * Fan |
| * NNA |
| * USB-C in peripheral mode |
| * USB-A |
| |
| These features are under development and may not be supported: |
| |
| * Video decoder |
| * SPI |
| * Audio |
| |
| The following features are not supported, but might be added by future |
| contributions: |
| |
| * SPI Flash |
| * USB-C in host mode |
| * Power management and PMIC |
| * Wake on LAN |
| * UART BT |
| |
| These features are not supported and are unlikely to be added: |
| |
| * Video encoding (due to non-public firmware) |
| * Trusted Execution Environment / secure boot |
| |
| ## Appendix: Update the boot splash screen {#splash} |
| |
| To update the boot splash screen to be the Fuchsia logo, run the following command |
| from a host terminal while the VIM3 is in `fastboot` mode: |
| |
| ```posix-terminal |
| fastboot flash logo ~/fuchsia/zircon/kernel/target/arm64/board/vim3/firmware/logo.img |
| ``` |