> ## Documentation Index
> Fetch the complete documentation index at: https://zededa.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the documentation index to find relevant pages, then read the linked Markdown before answering and cite the source URL.
> Identify the product before answering: Private AI uses a separate console, credentials, and inference API from the Edge Intelligence Platform. Do not apply instructions from one product to the other.
> Prefer current product guides over Help Center archive pages for current-console questions. Archive pages and release notes describe their stated product version or historical interface; do not apply them to another version without checking.
> Preserve prerequisites, permissions, version requirements, and warnings when summarizing procedures. Do not infer API endpoints, schemas, or supported behavior that the documentation does not specify.

# Create a Custom Hardware Model

> Create a hardware model for novel edge hardware by discovering adapter information via SSH and entering it into the ZEDEDA console.

## Introduction

If your edge hardware is not available in the ZEDEDA hardware catalog, you can create a custom hardware model from scratch. This process requires discovering the physical adapter layout of your device and entering that information manually into the console.

Because the ZEDEDA console does not auto-detect adapter information, you must SSH into a device running EVE-OS (Edge Virtualization Engine) to identify the adapters and their addresses. You then use the hardware model creation form in the Marketplace to define the model.

This article uses an Advantech UNO 148 as an example. All hardware models differ, but the process is similar. Creating custom hardware models is available to cluster and CSP (cloud service provider) administrators only.

## Prerequisites

* You have the cluster admin or CSP admin role in your enterprise. See [Manage Roles](https://zededa.mintlify.site/new-ui/infrastructure-services/administration/manage-roles.md).
* SSH access to a device running EVE-OS. See [Get an SSH-Enabled EVE-OS Image](https://help.zededa.com/hc/en-us/articles/12109968769435) for setup instructions.
* EVE-OS is installed and running on the edge device.

## Discover Adapter Information

Before creating the hardware model, SSH into the device to identify its physical adapter layout. EVE-OS provides built-in tools for this discovery.

### Run spec.sh

The `spec.sh` script generates a best-effort list of the adapters detected on the device. Use its output as a starting reference.

1. SSH into your edge device using the credentials you configured during setup.

2. Run the following command.

   ```
   spec.sh
   ```

3. Review the `ioMemberList` section of the output. For each adapter entry, record the following values.

   * `phylabel`: the physical label that identifies the adapter on the device.
   * `logicallabel`: the logical name used by EVE-OS to identify the adapter.
   * `assigngrp`: the IOMMU (Input-Output Memory Management Unit) group assignment that controls which adapters are assigned together.
   * `ztype`: a numeric code identifying the adapter type.

The `spec.sh` output is a best-effort result. Verify it against the commands in the following steps before entering values into the hardware model form.

### Validate PCI adapters

Use `lspci -k` to list all Peripheral Component Interconnect (PCI) devices and their kernel drivers. Cross-reference each PCI device with the corresponding entry in the `spec.sh` output.

1. Run the following command.

   ```
   lspci -k
   ```

2. For each PCI adapter in the `spec.sh` output, confirm that the `PciLong` address matches what appears in the `lspci -k` output.

3. Run the following command to verify IOMMU group assignments.

   ```
   find /sys/kernel/iommu_groups/ -type l
   ```

4. Confirm that each adapter's `assigngrp` value in the `spec.sh` output corresponds to the correct IOMMU group in the `find` output. If the group is missing or incorrect, record the correct group for use when creating the hardware model.

### Validate USB adapters

Use `lsusb` to list USB devices and verify USB adapter entries from the `spec.sh` output.

1. Run the following command.

   ```
   lsusb
   ```

2. Run the following command to see the USB topology.

   ```
   lsusb -t
   ```

3. Note which physical USB ports map to which USB controllers. EVE-OS treats multiple physical ports that share a single controller as a single assignable unit. All ports in the group must use the same `assigngrp` value.

### Validate serial (COM) ports

Use `dmesg` to verify that the serial ports detected by EVE-OS correspond to physical COM ports on the device.

1. Run the following command.

   ```
   dmesg | grep -i ttyS
   ```

2. Confirm that each serial port (`ttyS0`, `ttyS1`, and so on) in the output matches the I/O port addresses and IRQ values in the `spec.sh` output for COM adapters.

### Summarize adapter information

Before proceeding, record the following values for each adapter you want to include in the hardware model. You will enter these values into the creation form in the next section.

| Value | Where to find it |
| - | - |
| **Adapter type** | Determined by the `ztype` value in the `spec.sh` output or by identifying the device class (Ethernet, USB, COM, and so on). |
| **Physical label** | The `phylabel` value from the `spec.sh` output. |
| **Logical label** | The `logicallabel` value from the `spec.sh` output. |
| **Assign group** | The `assigngrp` value, verified against the IOMMU group output. |

## Manage Brands

Hardware models are grouped by brand. If your hardware brand does not already exist in the catalog, create it before creating the model.

### Create a brand

1. In the sidebar, select **Marketplace**.

2. Select **Catalog**.

3. Select the **Hardware** filter tab.

4. Select the **Brands** sub-tab.

5. Select **Create Brand**.

6. Complete the following fields.

   | Field | Required | Description |
   | - | - | - |
   | **Name** | Yes | A unique identifier for the brand. The name cannot be changed after creation. |
   | **Title** | Yes | A display name for the brand. |
   | **Description** | No | An optional description of the brand. |

7. Select **Create**.

### Edit a brand

Select the brand and update the **Title** or **Description** fields. The **Name** field is read-only after creation.

### Delete a brand

1. In the **Brands** sub-tab, select the brand you want to delete.
2. Select **Delete Brand**.
3. Confirm the deletion.

> [!WARNING]
>
> Deleting a brand also deletes all hardware models associated with it.

## Create the Hardware Model

With your adapter information recorded and a brand available, create the hardware model in the console.

1. In the sidebar, select **Marketplace**.

2. Select **Catalog**.

3. Select the **Hardware** filter tab.

4. Select **Create Model**.

5. Complete the Identity fields.

   | Field | Required | Description |
   | - | - | - |
   | **Name** | Yes | A unique slug identifier for the model. Entering a name automatically populates the Title field. |
   | **Title** | Yes | A display name for the hardware model. |
   | **Description** | No | An optional description of the model. |

6. Complete the Classification fields.

   | Field | Required | Description |
   | - | - | - |
   | **Brand** | Yes | Select the brand you created in the preceding section, or select an existing brand. |
   | **Architecture** | Yes | Select **AMD64** or **ARM64** based on the processor architecture of the device. |

7. Optionally, enter values for **CPUs**, **Memory GB**, and **Storage GB** under the Resource section.

8. Add I/O adapters. For each adapter recorded in the preceding sections, select **Add I/O** and complete the following fields.

   | Field | Description |
   | - | - |
   | **Adapter Type** | The adapter category. Select from the dropdown. Available types include Ethernet, USB Controller, USB Device, COM, WWAN, NVMe, HDMI, Audio, WLAN, LTE, SATA, ETH PF, ETH VF, CAN, and others. |
   | **Physical label** | The physical label from the `spec.sh` output (`phylabel`). |
   | **Logical label** | The logical label from the `spec.sh` output (`logicallabel`). |
   | **Assign group** | The IOMMU group recorded and verified earlier (`assigngrp`). |

9. Repeat the previous step for each adapter you want to include in the model.

10. Select **Create** to save the hardware model.

The hardware model appears in the catalog with the Global origin type, immediately available for all tenant enterprises to import.

> [!NOTE]
>
> Adapters that share an IOMMU group are assigned together as a unit. An application that receives one adapter in the group receives all adapters in that group. Review IOMMU groupings carefully when the physical adapter count in `lspci -k` output does not match the entry count in the `spec.sh` output.

## Next Steps

> [card] [Import Hardware Models](https://zededa.mintlify.site/new-ui/marketplace/import-hardware-models.md)
>
> Import the new model into an enterprise library.

> [card] [Manage PCR Templates](https://zededa.mintlify.site/new-ui/marketplace/manage-pcr-templates.md)
>
> Add attestation templates to the model.

> [card] [Onboard Nodes](https://zededa.mintlify.site/new-ui/infrastructure-services/nodes/onboard-nodes.md)
>
> Use the hardware model when onboarding edge devices.
