wdenk | 34b613e | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 1 | |
| 2 | This is a demo implementation of a Linux command line tool to access |
| 3 | the U-Boot's environment variables. |
| 4 | |
Luca Ceresoli | ece4b57 | 2011-04-07 22:11:20 +0000 | [diff] [blame] | 5 | In order to cross-compile fw_printenv, run |
Simon Glass | 69eb8dd | 2017-09-05 01:53:58 -0600 | [diff] [blame] | 6 | make CROSS_COMPILE=<your cross-compiler prefix> envtools |
Luca Ceresoli | ece4b57 | 2011-04-07 22:11:20 +0000 | [diff] [blame] | 7 | in the root directory of the U-Boot distribution. For example, |
Simon Glass | 69eb8dd | 2017-09-05 01:53:58 -0600 | [diff] [blame] | 8 | make CROSS_COMPILE=arm-linux- envtools |
Luca Ceresoli | ece4b57 | 2011-04-07 22:11:20 +0000 | [diff] [blame] | 9 | |
Simon Glass | 8e6f01f | 2017-09-05 01:53:59 -0600 | [diff] [blame] | 10 | You should then create a symlink from fw_setenv to fw_printenv. They use |
| 11 | the same program and its function depends on its basename. |
| 12 | |
Robert P. J. Day | 7678513 | 2013-02-27 11:28:45 +0000 | [diff] [blame] | 13 | For the run-time utility configuration uncomment the line |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 14 | #define CONFIG_FILE "/etc/fw_env.config" |
| 15 | in fw_env.h. |
| 16 | |
Markus Klotzbücher | 94db557 | 2007-11-27 10:23:20 +0100 | [diff] [blame] | 17 | For building against older versions of the MTD headers (meaning before |
| 18 | v2.6.8-rc1) it is required to pass the argument "MTD_VERSION=old" to |
| 19 | make. |
| 20 | |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 21 | See comments in the fw_env.config file for definitions for the |
| 22 | particular board. |
| 23 | |
| 24 | Configuration can also be done via #defines in the fw_env.h file. The |
wdenk | 34b613e | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 25 | following lines are relevant: |
| 26 | |
| 27 | #define HAVE_REDUND /* For systems with 2 env sectors */ |
| 28 | #define DEVICE1_NAME "/dev/mtd1" |
| 29 | #define DEVICE2_NAME "/dev/mtd2" |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 30 | #define DEVICE1_OFFSET 0x0000 |
| 31 | #define ENV1_SIZE 0x4000 |
| 32 | #define DEVICE1_ESIZE 0x4000 |
Guennadi Liakhovetski | ffb379a | 2008-09-04 13:01:49 +0200 | [diff] [blame] | 33 | #define DEVICE1_ENVSECTORS 2 |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 34 | #define DEVICE2_OFFSET 0x0000 |
| 35 | #define ENV2_SIZE 0x4000 |
| 36 | #define DEVICE2_ESIZE 0x4000 |
Guennadi Liakhovetski | ffb379a | 2008-09-04 13:01:49 +0200 | [diff] [blame] | 37 | #define DEVICE2_ENVSECTORS 2 |
wdenk | 34b613e | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 38 | |
Robert P. J. Day | 7678513 | 2013-02-27 11:28:45 +0000 | [diff] [blame] | 39 | Un-define HAVE_REDUND, if you want to use the utilities on a system |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 40 | that does not have support for redundant environment enabled. |
| 41 | If HAVE_REDUND is undefined, DEVICE2_NAME is ignored, |
| 42 | as is ENV2_SIZE and DEVICE2_ESIZE. |
| 43 | |
| 44 | The DEVICEx_NAME constants define which MTD character devices are to |
| 45 | be used to access the environment. |
| 46 | |
| 47 | The DEVICEx_OFFSET constants define the environment offset within the |
| 48 | MTD character device. |
| 49 | |
| 50 | ENVx_SIZE defines the size in bytes taken by the environment, which |
| 51 | may be less then flash sector size, if the environment takes less |
| 52 | then 1 sector. |
| 53 | |
wdenk | 34b613e | 2002-12-17 01:51:00 +0000 | [diff] [blame] | 54 | DEVICEx_ESIZE defines the size of the first sector in the flash |
wdenk | e7f34c6 | 2003-01-11 09:48:40 +0000 | [diff] [blame] | 55 | partition where the environment resides. |
Guennadi Liakhovetski | ffb379a | 2008-09-04 13:01:49 +0200 | [diff] [blame] | 56 | |
| 57 | DEVICEx_ENVSECTORS defines the number of sectors that may be used for |
| 58 | this environment instance. On NAND this is used to limit the range |
| 59 | within which bad blocks are skipped, on NOR it is not used. |
Joe Hershberger | ef2fc1b | 2012-10-04 08:31:00 +0000 | [diff] [blame] | 60 | |
Anthony Loiseau | ade0dc3 | 2023-12-21 23:44:38 +0100 | [diff] [blame] | 61 | If DEVICEx_ESIZE and DEVICEx_ENVSECTORS are both zero, then a runtime |
| 62 | detection is attempted for NOR and NAND mtd types. |
| 63 | |
Joe Hershberger | ef2fc1b | 2012-10-04 08:31:00 +0000 | [diff] [blame] | 64 | To prevent losing changes to the environment and to prevent confusing the MTD |
John Keeping | 8d6c454 | 2023-04-12 12:24:26 +0100 | [diff] [blame] | 65 | drivers, a lock file at /run/fw_printenv.lock is used to serialize access |
Joe Hershberger | ef2fc1b | 2012-10-04 08:31:00 +0000 | [diff] [blame] | 66 | to the environment. |