env: enable accessing the environment in an EXT4 partition
For example to store the environment in a file named "/uboot.env" in MMC "0", where partition "1" contains the EXT4 filesystem, the following configs should be added to the board's default config: CONFIG_ENV_IS_IN_EXT4=y CONFIG_ENV_EXT4_DEVICE_AND_PART="0:1" CONFIG_ENV_EXT4_FILE="/uboot.env" CONFIG_ENV_EXT4_INTERFACE="mmc" Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org> [trini: Fix some line over 80 chars issues] Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
f2006808f0
commit
1087a7942c
39
env/Kconfig
vendored
39
env/Kconfig
vendored
@ -81,6 +81,13 @@ config ENV_IS_IN_FAT
|
||||
- CONFIG_FAT_WRITE:
|
||||
This must be enabled. Otherwise it cannot save the environment file.
|
||||
|
||||
config ENV_IS_IN_EXT4
|
||||
bool "Environment is in a EXT4 filesystem"
|
||||
depends on !CHAIN_OF_TRUST
|
||||
select EXT4_WRITE
|
||||
help
|
||||
Define this if you want to use the EXT4 file system for the environment.
|
||||
|
||||
config ENV_IS_IN_FLASH
|
||||
bool "Environment in flash memory"
|
||||
depends on !CHAIN_OF_TRUST
|
||||
@ -396,6 +403,38 @@ config ENV_FAT_FILE
|
||||
It's a string of the FAT file name. This file use to store the
|
||||
environment.
|
||||
|
||||
config ENV_EXT4_INTERFACE
|
||||
string "Name of the block device for the environment"
|
||||
depends on ENV_IS_IN_EXT4
|
||||
help
|
||||
Define this to a string that is the name of the block device.
|
||||
|
||||
config ENV_EXT4_DEVICE_AND_PART
|
||||
string "Device and partition for where to store the environemt in EXT4"
|
||||
depends on ENV_IS_IN_EXT4
|
||||
help
|
||||
Define this to a string to specify the partition of the device. It can
|
||||
be as following:
|
||||
|
||||
"D:P", "D:0", "D", "D:" or "D:auto" (D, P are integers. And P >= 1)
|
||||
- "D:P": device D partition P. Error occurs if device D has no
|
||||
partition table.
|
||||
- "D:0": device D.
|
||||
- "D" or "D:": device D partition 1 if device D has partition
|
||||
table, or the whole device D if has no partition
|
||||
table.
|
||||
- "D:auto": first partition in device D with bootable flag set.
|
||||
If none, first valid partition in device D. If no
|
||||
partition table then means device D.
|
||||
|
||||
config ENV_EXT4_FILE
|
||||
string "Name of the EXT4 file to use for the environemnt"
|
||||
depends on ENV_IS_IN_EXT4
|
||||
default "uboot.env"
|
||||
help
|
||||
It's a string of the EXT4 file name. This file use to store the
|
||||
environment (explicit path to the file)
|
||||
|
||||
if ARCH_SUNXI
|
||||
|
||||
config ENV_OFFSET
|
||||
|
2
env/env.c
vendored
2
env/env.c
vendored
@ -32,6 +32,8 @@ static enum env_location env_get_default_location(void)
|
||||
return ENVL_EEPROM;
|
||||
else if IS_ENABLED(CONFIG_ENV_IS_IN_FAT)
|
||||
return ENVL_FAT;
|
||||
else if IS_ENABLED(CONFIG_ENV_IS_IN_EXT4)
|
||||
return ENVL_EXT4;
|
||||
else if IS_ENABLED(CONFIG_ENV_IS_IN_FLASH)
|
||||
return ENVL_FLASH;
|
||||
else if IS_ENABLED(CONFIG_ENV_IS_IN_MMC)
|
||||
|
30
env/ext4.c
vendored
30
env/ext4.c
vendored
@ -46,9 +46,9 @@ static int env_ext4_save(void)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
part = blk_get_device_part_str(EXT4_ENV_INTERFACE,
|
||||
EXT4_ENV_DEVICE_AND_PART,
|
||||
&dev_desc, &info, 1);
|
||||
part = blk_get_device_part_str(CONFIG_ENV_EXT4_INTERFACE,
|
||||
CONFIG_ENV_EXT4_DEVICE_AND_PART,
|
||||
&dev_desc, &info, 1);
|
||||
if (part < 0)
|
||||
return 1;
|
||||
|
||||
@ -57,16 +57,19 @@ static int env_ext4_save(void)
|
||||
|
||||
if (!ext4fs_mount(info.size)) {
|
||||
printf("\n** Unable to use %s %s for saveenv **\n",
|
||||
EXT4_ENV_INTERFACE, EXT4_ENV_DEVICE_AND_PART);
|
||||
CONFIG_ENV_EXT4_INTERFACE,
|
||||
CONFIG_ENV_EXT4_DEVICE_AND_PART);
|
||||
return 1;
|
||||
}
|
||||
|
||||
err = ext4fs_write(EXT4_ENV_FILE, (void *)&env_new, sizeof(env_t));
|
||||
err = ext4fs_write(CONFIG_ENV_EXT4_FILE, (void *)&env_new,
|
||||
sizeof(env_t));
|
||||
ext4fs_close();
|
||||
|
||||
if (err == -1) {
|
||||
printf("\n** Unable to write \"%s\" from %s%d:%d **\n",
|
||||
EXT4_ENV_FILE, EXT4_ENV_INTERFACE, dev, part);
|
||||
CONFIG_ENV_EXT4_FILE, CONFIG_ENV_EXT4_INTERFACE, dev,
|
||||
part);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -84,9 +87,9 @@ static int env_ext4_load(void)
|
||||
int err;
|
||||
loff_t off;
|
||||
|
||||
part = blk_get_device_part_str(EXT4_ENV_INTERFACE,
|
||||
EXT4_ENV_DEVICE_AND_PART,
|
||||
&dev_desc, &info, 1);
|
||||
part = blk_get_device_part_str(CONFIG_ENV_EXT4_INTERFACE,
|
||||
CONFIG_ENV_EXT4_DEVICE_AND_PART,
|
||||
&dev_desc, &info, 1);
|
||||
if (part < 0)
|
||||
goto err_env_relocate;
|
||||
|
||||
@ -95,16 +98,19 @@ static int env_ext4_load(void)
|
||||
|
||||
if (!ext4fs_mount(info.size)) {
|
||||
printf("\n** Unable to use %s %s for loading the env **\n",
|
||||
EXT4_ENV_INTERFACE, EXT4_ENV_DEVICE_AND_PART);
|
||||
CONFIG_ENV_EXT4_INTERFACE,
|
||||
CONFIG_ENV_EXT4_DEVICE_AND_PART);
|
||||
goto err_env_relocate;
|
||||
}
|
||||
|
||||
err = ext4_read_file(EXT4_ENV_FILE, buf, 0, CONFIG_ENV_SIZE, &off);
|
||||
err = ext4_read_file(CONFIG_ENV_EXT4_FILE, buf, 0, CONFIG_ENV_SIZE,
|
||||
&off);
|
||||
ext4fs_close();
|
||||
|
||||
if (err == -1) {
|
||||
printf("\n** Unable to read \"%s\" from %s%d:%d **\n",
|
||||
EXT4_ENV_FILE, EXT4_ENV_INTERFACE, dev, part);
|
||||
CONFIG_ENV_EXT4_FILE, CONFIG_ENV_EXT4_INTERFACE, dev,
|
||||
part);
|
||||
goto err_env_relocate;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user