RFC: Devices for files and partitions

Heinrich Schuchardt xypron.glpk at gmx.de
Fri Jul 9 07:27:45 CEST 2021


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



More information about the U-Boot mailing list