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 MP15 reads the U-Boot environment (including the MAC addresses) from a UBI volume called uboot_config or from its redundant copy in UBI volume uboot_config_r in the NAND flash. If it does not find a valid environment on the NAND, U-Boot uses a hard-coded default environment:
-
The size of the environment is determined by constant
CONFIG_ENV_SIZE
.
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
.
Digi Embedded Yocto 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 two entries in the form: Device name, offset, size.
The first entry must point to the U-Boot environment location.
The second must point to its redundant copy.
For example:
# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Device name Offset Size Erase-size No.Blocks
/dev/ubi0:uboot_config 0x0 0x20000 0x20000
/dev/ubi0:uboot_config_r 0x0 0x20000 0x20000
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 MP15
The following U-Boot environment variables are worth mentioning:
MAC addresses
Variable | Description | Flags |
---|---|---|
|
MAC address of the first wired Ethernet interface |
change-default |
|
MAC address of the second wired Ethernet interface if there is one |
change-default |
|
MAC address of the Wi-Fi interface |
change-default |
|
MAC address of the Bluetooth interface |
change-default |
About flags
|
Digi programs the MAC addresses of the ConnectCore MP15 during manufacturing and stores them in the Wi-Fi chip OTP bits, keeping a copy in the U-Boot environment on the NAND.
You can find the Digi-assigned MAC address on the ConnectCore MP15 module label. See Determine Digi MAC addresses for more information.
Module variant
Variable | Description | Flags |
---|---|---|
|
Variant ID code for the System-On-Chip |
write-once |
During start-up, U-Boot automatically sets this variable to the ConnectCore MP15 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 |
---|---|---|
|
Version number of the carrier board |
write-once |
|
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 Carrier board version and ID.
Determine Digi MAC addresses
The MAC address and serial number of the SOM are encoded in the data matrix on the SOM label. |
Sequential MAC address scheme
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.
Determine MAC addresses
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
If your SOM has a second Ethernet MAC address:
=> printenv eth1addr
To get Wi-Fi MAC address:
=> printenv wlanaddr
To get Bluetooth MAC address:
=> printenv btaddr