On 7/9/21 4:44 AM, AKASHI Takahiro wrote:
On Tue, Jul 06, 2021 at 05:05:19PM -0600, Simon Glass wrote:
Hi,

At present U-Boot avoids the concept of 'opening' a file. Being in a
bootloader environment, it is normally better to take the action
immediately and avoid any caching, for example, since there is no
background task to clean up afterwards.

Having said that, the concept of a file is quite useful, for example
to write the output of a command to a file, or to open a file and read
it a line at a time.

Another case has come to light in that EFI wants to access files using
a file handle. This currently uses parallel data structures and does
not map very well in U-Boot.

Not having a file descriptor slows down file operation because for each
individual access to a file we

* read the partition table
* look up the file in the directory structure

If you only use the 'load' command, this does not matter because there
is only a single read. But in the UEFI sub-system we use multiple API calls:

* open the volume
* open the file
* read the file size (for buffer allocation)
* read the file

The file descriptors in the UEFI sub-system only hold device, partition
ID, file path.


Finally, partitions has a similar issue, where defining them as a
device can have benefits, e.g. to specify the device to use directly,
rather than with the 'type dev:part' approach, perhaps providing them
in the devicetree, etc.

For the above reasons, I propose that we implement, as an option,
support for files and partitions within driver model.

With partitions as devices we will have to read the partition table only
once when the block device is probed. - For the UEFI sub-system we need
all block devices to be probed before calling the UEFI binary (e.g. GRUB).


+1

# Nobody has commented yet :)

Regarding a "file (or file descriptor)", we have already implemented
the same concept in efi_loader. So technically, it won't be a hard-work.
Regarding "partitions as udevice," I have posted an experimental
patch [1]. So it must also be feasible.

Our UEFI file descriptor is not helpful because it does not buffer the
relevant data to speed up file access. E.g. for the FAT driver a file
descriptor could buffer some information from the directory entry (file
attributes, dates) and some from the FAT table (assigned extends).


One of my concerns is what benefit end users may enjoy.

Improved performance.

Best regards

Heinrich


-Takahiro Akashi

[1] https://lists.denx.de/pipermail/u-boot/2019-February/357937.html
     https://lists.denx.de/pipermail/u-boot/2019-February/357934.html

Regards,
Simon

Reply via email to