diff options
author | Holger Dengler <dengler@linutronix.de> | 2017-08-30 18:38:52 +0200 |
---|---|---|
committer | Heiko Schocher <hs@denx.de> | 2017-09-12 10:08:05 +0200 |
commit | 985fa93e61706a78fad130b006aefa1c098145de (patch) | |
tree | f8f2d4c1714c7fc3790ad84610e80196c9915030 /cmd/ubi.c | |
parent | c98ac3487e413c71e5d36322ef3324b21c6f60f9 (diff) |
cmd: set filesize variable in ubi read
After a successful read of a UBI volume, the variable filesize is set
to the number of read bytes. To boot linux with a raw initramfs/initrd,
you must specify the exact size of the initramfs/initrd image in boot
command. If the initramfs/inird is read from UBI volume, $filesize is
required to access the number of read bytes.
Example:
ubi read ${loadaddr} kernelvol
ubi read ${fdtaddr} dtbvol
ubi read ${initrd_addr} initrdvol
bootz ${loadaddr} ${initrd_addr}:${filesize} ${fdt_addr}
Signed-off-by: Holger Dengler <dengler@linutronix.de>
Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'cmd/ubi.c')
-rw-r--r-- | cmd/ubi.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -334,6 +334,7 @@ int ubi_volume_read(char *volume, char *buf, size_t size) unsigned long long tmp; struct ubi_volume *vol; loff_t offp = 0; + size_t len_read; vol = ubi_find_volume(volume); if (vol == NULL) @@ -373,6 +374,7 @@ int ubi_volume_read(char *volume, char *buf, size_t size) tmp = offp; off = do_div(tmp, vol->usable_leb_size); lnum = tmp; + len_read = size; do { if (off + len >= vol->usable_leb_size) len = vol->usable_leb_size - off; @@ -398,6 +400,9 @@ int ubi_volume_read(char *volume, char *buf, size_t size) len = size > tbuf_size ? tbuf_size : size; } while (size); + if (!size) + env_set_hex("filesize", len_read); + free(tbuf); return err; } |