The U-Boot environment is a block of memory in persistent storage. It is used to store variables in the form `name=value`.

## Where is the U-Boot environment?

The ConnectCore 8X reads the U-Boot environment (including the MAC addresses) from the boot media, which means:

• If the device boots from the eMMC, it reads the environment from the eMMC.

• If the device boots from microSD card, it reads the environment from the microSD card.

• If it does not find a valid environment on the boot media, it uses a hard-coded default environment.

When the ConnectCore 8X boots from the eMMC, it reads U-Boot from eMMC boot partition 1 (device `/dev/mmcblk0boot0` in Linux) and reads the U-Boot environment (including the MAC addresses) from eMMC boot partition 2 (device `/dev/mmcblk0boot1` in Linux).

• The environment is located at the offset determined by constant `CONFIG_ENV_OFFSET` in U-Boot source code

• The size of the environment is determined by constant `CONFIG_ENV_SIZE` in U-Boot source code

• There is a back-up copy of the environment in the same partition (where the original copy is) at the offset determined by constant `CONFIG_ENV_OFFSET_REDUND` in U-Boot source code

## Append boot arguments to the kernel command line

You can use the `extra_bootargs` variables to append commands to the default kernel command line.

## Important U-Boot environment variables on the ConnectCore 8X

The following U-Boot environment variables are worth mentioning:

Variable Description Flags

`$ethaddr` MAC address of the first wired Ethernet interface change-default `$eth1addr`

MAC address of the second wired Ethernet interface if there is one

change-default

`$wlanaddr` MAC address of the Wi-Fi interface change-default `$btaddr`

MAC address of the Bluetooth interface

change-default

 About flags Variables with the write-once flag are protected and will not be overwritten by `setenv` or `env default` commands (unless manually forced with `-f` option). Variables with the change-default flag can only be written once using `setenv` command (unless manually forced with `-f` option).

Digi programs the MAC addresses of the ConnectCore 8X during manufacturing and saves them in the U-Boot environment on the eMMC.

If the device boots from an external media different from the eMMC (for example microSD card), the system reads the U-Boot environment from it, so MAC addresses will not match the ones assigned by Digi during manufacturing. You must program the MAC addresses of the available interfaces and save the environment on your boot storage media.

The wireless interface on the ConnectCore 8X module allows you to define up to three optional virtual interfaces so that the platform can run concurrently as station, p2p, and SoftAP. Digi neither reserves nor programs unique MAC addresses for these virtual interfaces. A user who wishes to assign unique MAC addresses to such virtual interfaces can use the following U-Boot environment variables:

Variable Description Flags

`$wlan1addr` MAC address of virtual wireless interface 1 change-default `$wlan2addr`

MAC address of virtual wireless interface 2

change-default

`$wlan3addr` MAC address of virtual wireless interface 3 change-default ### MMC boot device Variable Description Flags `$mmcbootdev`

MMC device index where U-Boot booted from

write-once

During start-up, U-Boot initially sets this variable to the MMC device index where the device booted from:

• 0 if booting from internal eMMC (USDHC0)

• 1 if booting from microSD card (USDHC1)

You can use this variable to determine which MMC device the ConnectCore 8X booted from.

### MMC device (update target)

Variable Description Flags

`$mmcdev` MMC device index to update firmware to - The `update` command uses this variable to determine the MMC device index to write the firmware to: • 0 for the internal eMMC (USDHC1) • 1 for the microSD card (USDHC2) You can modify this variable as needed. ### Module variant Variable Description Flags `$module_variant`

Variant ID code for the System-On-Chip

write-once

During start-up, U-Boot automatically sets this variable to the ConnectCore 8X System-On-Chip variant ID number (a hexadecimal code programmed in the SOM one-time programmable bits).

### Carrier board version and ID

Variable Description Flags

`$board_version` Version number of the carrier board write-once `$board_id`

ID number of the carrier board

write-once

These optional write-once variables can be set to the carrier board’s version and ID numbers during manufacturing. See [{XREF_hw_r_carrier-board-v-id}].

Digi assigns MAC addresses according to a sequential scheme. The order of assignment depends on the available interfaces, but the scheme always respects the order Ethernet 1, Ethernet 2, Wi-Fi, Bluetooth and skips non-available interfaces.

You can determine the MAC addresses for your device either by reading the Ethernet MAC off the label and using the scheme to calculate subsequent addresses, or by reading them from your device. To read the stock environment variables from the device using the `printenv` command executed at the U-Boot prompt:

To get first Ethernet MAC address:

``{pu}printenv ethaddr``

``{pu}printenv eth1addr``
``{pu}printenv wlanaddr``
``{pu}printenv btaddr``