README.md

# Nerves System for SG2002-based boards

This is a custom [Nerves](https://nerves-project.org) system for SG2002-based single-board computers powered by the Sophgo SG2002 SoC.

## Project Overview

This Nerves system provides a complete, bootable Linux image tailored for Elixir applications. It's built using [Buildroot](https://buildroot.org) and includes the necessary kernel, bootloader, and root filesystem to run Elixir applications on SG2002-based devices.

The system is based on the official Sophgo SDK and has been adapted to work with the Nerves platform.

## Features

*   **RISC-V 64-bit Architecture**: Targets the `riscv64` architecture with the `lp64d` ABI.
*   **Linux Kernel**: Uses the Sophgo Linux 5.10 kernel.
*   **U-Boot Bootloader**: Utilizes the Sophgo U-Boot 2021.10 bootloader.
*   **Toolchain**: Built with a custom Musl-based toolchain.
*   **Networking**: Supports networking via the onboard WiFi module.
*   **Peripherals**: Includes support for various peripherals like GPIO, I2C, and SPI.

## Getting Started

### Prerequisites

Before you begin, ensure you have the following installed:

*   [Elixir](https://elixir-lang.org/install.html)
*   [Erlang](https://www.erlang.org/downloads)
*   [Nerves Bootstrap](https://hexdocs.pm/nerves_bootstrap/Nerves.Bootstrap.html)

### Building the Firmware

1.  **Clone the repository:**
    ```bash
    git clone https://github.com/fermuch/nerves_system_sg2002.git
    cd nerves_system_sg2002
    ```

2.  **Set up your Elixir project:**
    Create a new Elixir project or use an existing one.

    ```bash
    mix nerves.new my_app
    cd my_app
    ```

3.  **Add the system as a dependency:**
    In your `mix.exs` file, add this system to your dependencies:

    ```elixir
    def deps do
      [
        # ... other dependencies
        {:nerves_system_sg2002, github: "fermuch/nerves_system_sg2002", tag: "v0.1.0"}
      ]
    end
    ```

4.  **Specify the target:**
    In your `mix.exs`, set the target to `nerves_system_sg2002`:

    ```elixir
    def project do
      [
        # ...
        target: "nerves_system_sg2002"
      ]
    end
    ```

5.  **Get dependencies and build the firmware:**
    ```bash
    mix deps.get
    mix firmware
    ```

### Deploying to SG2002-based devices

1.  **Prepare an SD card:**
    Format an SD card with a FAT32 partition.

2.  **Burn the firmware:**
    Use the `fwup` tool to burn the firmware to the SD card.

    ```bash
    mix firmware.burn
    ```

3.  **Boot the device:**
    Insert the SD card into your SG2002-based device and power it on. The device will boot into the Nerves system, and your Elixir application will start automatically.

## Further Information

*   **Nerves Project**: [https://nerves-project.org](https://nerves-project.org)
*   **Buildroot**: [https://buildroot.org](https://buildroot.org)
*   **Sophgo SDK**: [https://github.com/sophgo/](https://github.com/sophgo/)