summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorHolger Dengler <dengler@linutronix.de>2017-08-30 18:38:52 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-06-06 13:11:24 +0200
commitd507d86f8fbd51611fff18eb487d836243c0e7c5 (patch)
tree845d6a345a3d8446db5a7c1309159aee37e7d203 /cmd
parent9b02ad9e5d6ec207d26b25488c07b2fa13572730 (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> (cherry picked from commit 985fa93e61706a78fad130b006aefa1c098145de) [backported to 2016.11] Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/ubi.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/cmd/ubi.c b/cmd/ubi.c
index 7d0d7e7a80..3dc4cae277 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -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)
+ setenv_hex("filesize", len_read);
+
free(tbuf);
return err;
}