How are you all?
Many of us wondering that, Is it possible to get U-boot environment variables in user space? Is it possible to set U-boot environment variable from user space? Answer to these questions is YES. It is possible to set and retrieve U-boot environment variables from user space through command-line or any application.
In this article I will demonstrate how to set and get U-boot environment from Linux user space through an application or shell command. To explain this I will take a reference of AM335x EVM.
In Linux source code, there is a board file specific to board or processor (in my case it is board-am335xevm.c) which contains a structure of memory partitions, In that memory partions will be a separate memory partition of Uboot environment variables where these variables will be stored. refer the below image.
Build fw_printenv / fw_setenv tool
- first of all cd to top of the u-boot source directory
- Issue a command
host# make HOSTCC=arm-arago-linux-gnueabi-gcc env
This must create a fw_printenv and fw_setenv cross compiled binaries in <uboot-src>/tools/env directory. You must see these binaries along with fw_env.config file. You must copy these two binaries to /bin folder and fw_env.config file to /etc directory of the target system.
Test fw_printenv / fw_setenv tool
The executable fw_printenv will dump the entire environment space, individual variables can be read by:
target# ./fw_printenv autoload
To set an environment variable use fw_setenv. This example will set the variable autoload to no, use fw_printenv to read back the change.
target# ./fw_setenv autoload no