
On Fri, Mar 12, 2021 at 01:32:50PM +0900, AKASHI Takahiro wrote: [...]
My understanding is that we have:
kernel path,end(0xff), VenMedia(), /* no end node here */ initrd1, end(0x01), initrd2, end(0xff)
No, the structure is added in cmd/efidebug.c code. It's created with efi_dp_append_instance() on
- const struct efi_initrd_dp id_dp
- file path of initrd
which will create: kernel path,end(0xff), VenMedia(), end(0x01), initrd1, end(0x01), initrd2, end(0xff)
What is the difference between end(0xff) and end(0x01)?
0xff is a subtype of 'end the entire device path', while 0x01 is an 'end of instance of a device path and start a new device path'
If the first argument of a load option is a list of device paths, I would expect the format would look like: kernel path,end(0xff), VenMedia(INITRD),initrd1 path,end(0xff), VenMedia(INITRD),initrd2 path,end(0xff),
so that VenMedia can work as an identify of the succeeding path. Is it simple enough, isn't it?
It's essentially the same thing. It has an effect on the EFI spec and how you interpret it, but honestly it feels as an implementation detail to me, since none of those are standardized anyway.
In fact what you are saying was part of my proposal in the original mail (check proposal 1.)
Anyway the difference between the two is that what I coded looks like this: FilePathList[0] -> kernel FilePathList[1] -> initrd1 - initrdn
while whe other is FilePathList[0] -> kernel FilePathList[1] -> initrd1 FilePathList[2] -> initrd2 FilePathList[n] -> initrdn
If we ever manage to wire in the DTBs in there as well it may look like:
FilePathList[0] -> kernel FilePathList[1] -> initrd1 - initrdn FilePathList[2] -> dtb1 - dtbn
Vs
FilePathList[0] -> kernel FilePathList[1] -> initrd1 FilePathList[2] -> initrd2 FilePathList[3] -> dtb1 FilePathList[n] -> initrdn FilePathList[n+1] -> dtb2
What is the semantics? Which do you want to do? a) boot one of combinations: 1.kernel+initrd1+dtb1, or 2.kernel+initrd2+dtb2 b) boot kernel + (initrd1 + initrd2) + (dtb1 + dtb2)
I assume you meant (a). In that case, how can you specify (a-1) or (a-2) at boot time?
Is there any clear description about that? (I"m simply asking here.)
it's b) if you want different combinations of kernel/initrds (as described in a) you can add another Boot#### variable.
So let's assume you got three boot options Boot0000, Boot0001 and Boot0002
Boot0000 efi_load_options: kernel1 + (initrd1 + initrd2) + (dtb1 + dtb2). The bootloader will concat initrd1+initrd2 when the kernel requests it. Similar behavior can be coded for dtb before installing the table.
Boot0001: kernel1 + initrd1 + dtb1 Load a kernel with a single initrd and dtb.
Boot0002: kernel2 + initrd2 + dtb2 ditto.
Hope that's clear now
Cheers /Ilias
-Takahiro Akashi
-Takahiro Akashi
I know I originally proposed the one you have, but it seemed cleaner adding an extra instance between VenMedia and the first initrd.
Please, document the structure.
Sure
Best regards
Heinrich
Thanks /Ilias
[1] https://lists.linaro.org/pipermail/boot-architecture/2021-February/001686.ht...
Cheers /Ilias