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 6UL reads the U-Boot environment (including the MAC addresses) from a partition called environment in the NAND flash. If it does not find a valid environment on the NAND, U-Boot uses a hard-coded default environment:

• The environment is located at the offset determined by constant `CONFIG_ENV_OFFSET` in U-Boot source code at `include/configs/ccimx6ulsbc.h` and `include/configs/ccimx6ulstarter.h`.

• The size of the environment is determined by constant `CONFIG_ENV_SIZE` at the same header file.

• There is a back-up copy of the environment in the same NAND partition (where the original copy is) at the offset determined by constant `CONFIG_ENV_OFFSET_REDUND` in the same header file.

## Access U-Boot environment from Linux

You can access the U-Boot environment from a Linux application. In the U-Boot source tree, you can find the environment tools in the directory `tools/env`, which you can build with the following command:

``$make env`` Digi Embedded Yocto also compiles this tool by default and installs it on your target’s root file system as two executable files: • `fw_printenv`: to print the value of variables. • `fw_setenv`: to set the value of variables. The tools work with the configuration file `/etc/fw_env.config`, which must contain one or two entries in the form: Device name, offset, size. The first entry must point to the U-Boot environment location. The second (if present) must point to its redundant copy. If both copies are set to the same offset, an automatic mechanism custom to Digi U-Boot implementations determines the first good sectors where each copy lives. This mechanism makes better use of NAND sectors and improves space allocation for potential bad blocks. /etc/fw_env.config ``````# Configuration file for fw_(printenv/setenv) utility. # Up to two entries are valid, in this case the redundant # environment sector is assumed present. # If both copies are set to the same offset, an automatic mechanism will # determine the first good sectors where each copy lives, skipping bad blocks. # Device name Offset Size Erase-size No.Blocks /dev/mtd1 0x0 0x20000 0x20000 24 /dev/mtd1 0x0 0x20000 0x20000 24`````` ## 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 6UL The following U-Boot environment variables are worth mentioning: ### MAC addresses 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 6UL during manufacturing and saves them in the U-Boot environment on the NAND. You can find the Digi-assigned MAC address on the ConnectCore 6UL module label. See Determine Digi MAC addresses for more information. ### Wireless virtual MAC addresses The wireless interface on the ConnectCore 6UL 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

### 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 6UL 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

During start-up, U-Boot automatically sets these variables to the carrier board’s version and ID numbers (decimal numbers programmed in the SOM one-time programmable bits). See Carrier board version and 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:

``=> printenv ethaddr``

``=> printenv eth1addr``
``=> printenv wlanaddr``
``=> printenv btaddr``