16aff3115Swdenk 26aff3115SwdenkThis is a demo implementation of a Linux command line tool to access 36aff3115Swdenkthe U-Boot's environment variables. 46aff3115Swdenk 556c17698SLuca CeresoliIn order to cross-compile fw_printenv, run 6*57332957SSimon Glass make CROSS_COMPILE=<your cross-compiler prefix> envtools 756c17698SLuca Ceresoliin the root directory of the U-Boot distribution. For example, 8*57332957SSimon Glass make CROSS_COMPILE=arm-linux- envtools 956c17698SLuca Ceresoli 1055011539SRobert P. J. DayFor the run-time utility configuration uncomment the line 11d0fb80c3Swdenk#define CONFIG_FILE "/etc/fw_env.config" 12d0fb80c3Swdenkin fw_env.h. 13d0fb80c3Swdenk 146de66b35SMarkus KlotzbücherFor building against older versions of the MTD headers (meaning before 156de66b35SMarkus Klotzbücherv2.6.8-rc1) it is required to pass the argument "MTD_VERSION=old" to 166de66b35SMarkus Klotzbüchermake. 176de66b35SMarkus Klotzbücher 18d0fb80c3SwdenkSee comments in the fw_env.config file for definitions for the 19d0fb80c3Swdenkparticular board. 20d0fb80c3Swdenk 21d0fb80c3SwdenkConfiguration can also be done via #defines in the fw_env.h file. The 226aff3115Swdenkfollowing lines are relevant: 236aff3115Swdenk 246aff3115Swdenk#define HAVE_REDUND /* For systems with 2 env sectors */ 256aff3115Swdenk#define DEVICE1_NAME "/dev/mtd1" 266aff3115Swdenk#define DEVICE2_NAME "/dev/mtd2" 27d0fb80c3Swdenk#define DEVICE1_OFFSET 0x0000 286aff3115Swdenk#define ENV1_SIZE 0x4000 296aff3115Swdenk#define DEVICE1_ESIZE 0x4000 3056086921SGuennadi Liakhovetski#define DEVICE1_ENVSECTORS 2 31d0fb80c3Swdenk#define DEVICE2_OFFSET 0x0000 326aff3115Swdenk#define ENV2_SIZE 0x4000 336aff3115Swdenk#define DEVICE2_ESIZE 0x4000 3456086921SGuennadi Liakhovetski#define DEVICE2_ENVSECTORS 2 356aff3115Swdenk 3655011539SRobert P. J. DayUn-define HAVE_REDUND, if you want to use the utilities on a system 37d0fb80c3Swdenkthat does not have support for redundant environment enabled. 38d0fb80c3SwdenkIf HAVE_REDUND is undefined, DEVICE2_NAME is ignored, 39d0fb80c3Swdenkas is ENV2_SIZE and DEVICE2_ESIZE. 40d0fb80c3Swdenk 41d0fb80c3SwdenkThe DEVICEx_NAME constants define which MTD character devices are to 42d0fb80c3Swdenkbe used to access the environment. 43d0fb80c3Swdenk 44d0fb80c3SwdenkThe DEVICEx_OFFSET constants define the environment offset within the 45d0fb80c3SwdenkMTD character device. 46d0fb80c3Swdenk 47d0fb80c3SwdenkENVx_SIZE defines the size in bytes taken by the environment, which 48d0fb80c3Swdenkmay be less then flash sector size, if the environment takes less 49d0fb80c3Swdenkthen 1 sector. 50d0fb80c3Swdenk 516aff3115SwdenkDEVICEx_ESIZE defines the size of the first sector in the flash 52d0fb80c3Swdenkpartition where the environment resides. 5356086921SGuennadi Liakhovetski 5456086921SGuennadi LiakhovetskiDEVICEx_ENVSECTORS defines the number of sectors that may be used for 5556086921SGuennadi Liakhovetskithis environment instance. On NAND this is used to limit the range 5656086921SGuennadi Liakhovetskiwithin which bad blocks are skipped, on NOR it is not used. 571c4ea78aSJoe Hershberger 581c4ea78aSJoe HershbergerTo prevent losing changes to the environment and to prevent confusing the MTD 591c4ea78aSJoe Hershbergerdrivers, a lock file at /var/lock/fw_printenv.lock is used to serialize access 601c4ea78aSJoe Hershbergerto the environment. 61