mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
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>
This commit is contained in:
parent
c98ac3487e
commit
985fa93e61
1 changed files with 5 additions and 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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue