[Barrelfish-users] [Barrelfish] Hagfish kernel image structure and latest version
David Cock
david.cock at inf.ethz.ch
Fri Apr 16 21:09:52 CEST 2021
That's awesome, thanks. Feel free to submit a pull request.
David
On 16/4/21 8:20 pm, sebastian.scherbel at fau.de wrote:
> Hi,
>
> the problem is in update_memory_map_and_exit_boot_services(). The UEFI
> specification advises "If MapKey value is incorrect,
> ExitBootServices() returns EFI_INVALID_PARAMETER and GetMemoryMap()
> with ExitBootServices() must be called again."
>
> Attached is a patch in case anyone wants to use Hagfish on a similar
> system like the HPE Apollo 70 with American Megatrends Aptio V UEFI in
> the future.
>
> Regards Sebastian
>
> [0]
> https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf
> <https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf>
> (page 300)
> [1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202455
> <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202455>
>
> Am Donnerstag, 15. April 2021, 19:28:15 MESZ hat David Cock
> <david.cock at inf.ethz.ch> Folgendes geschrieben:
>
>
> I don't see anything that should cause a problem if you increase the
> value. Did you do a clean build after changing it? I don't quite
> trust the UEFI build system. What size did you set it to?
>
> David
>
> On 15/4/21 7:20 pm, David Cock wrote:
>>
>> That's a bit odd. It ought to be as simple as increasing the size of
>> the table - I don't think there's anything fundamental about it. I'm
>> pretty sure I just wanted to avoid dynamic allocation at that point
>> in the code. Let me have a look at it.
>>
>> David
>>
>> On 15/4/21 6:08 pm, sebastian.scherbel at fau.de
>> <mailto:sebastian.scherbel at fau.de> wrote:
>>> Hi,
>>>
>>> >The memory map is 17952B, but MEM_MAP_SIZE is 8192.
>>> > This is compile-time limit in Hagfish - please report this
>>> overflow, it's a bug.
>>>
>>> I have stumbled across a limitation in Hagfish. 8192B is not enough
>>> on a HPE Apollo 70 with 256 cores and 256 GB RAM and 374 entries of
>>> 48B each. I tried to just increase the value, but now I crash
>>> somewhere between exiting the UEFI boot services and jumping to my
>>> ELFs entrypoint. Without any output.
>>>
>>> Do you happen to have an educated guess what the problem could
>>> possibly be? I don't have a hardware debugger, unfortunately, which
>>> makes it somewhat challenging. And limits me to printk debugging.
>>>
>>> >We'd be happy to integrate a patch if you wanted to modify it.
>>> I'll do that after i have finished my project.
>>>
>>> Regards Sebastian
>>>
>>>
>>> Am Freitag, 12. März 2021, 12:08:39 MEZ hat David Cock
>>> <david.cock at inf.ethz.ch> <mailto:david.cock at inf.ethz.ch> Folgendes
>>> geschrieben:
>>>
>>>
>>> Sebastian
>>>
>>> It looks like what's going on is as Daniel described. Hagfish seems
>>> to use an API call (get_file_size) that's supported by EDK2, but not
>>> by many commercial offerings. I think it'd almost certainly be
>>> possible to update Hagfish such that it doesn't depend on it -
>>> something like preallocating a "reasonably-sized" buffer, and if it
>>> turns out it wasn't big enough trying again with a larger one. It's
>>> been a few years since I wrote this stuff, but I think you'll get
>>> back an EFI_BUFFER_TOO_SMALL if it was too small, and *BufferSize
>>> will be filled with the actual size so that you can reallocate the
>>> buffer. We'd be happy to integrate a patch if you wanted to modify it.
>>>
>>> David
>>>
>>> On 11/3/21 2:19 pm, Schwyn Daniel wrote:
>>>
>>> Hi Sebastian,
>>>
>>> David and I are both part of the Barrelfish core team at ETH so our
>>> setup is the same😉We do load Hagfish over PXE but as far as I know
>>> always directly with the PXE implementation in EDK2. Hagfish is
>>> theoretically designed to be flexible and cover as many EFI based
>>> boot environments as possible. In practice it’s only tested on the
>>> machines we have. Those are EDK2 based and the PXE implementation in
>>> there supports the two MTFTP opcodes we use. It should be possible
>>> to either implement support in iPXE or make Hagfish not use the
>>> get_file_size e.g. by allocating a large enough buffer and make sure
>>> the read_file doesn’t overflow it.
>>>
>>> Regards,
>>>
>>> Daniel
>>>
>>> *Von:*sebastian.scherbel at fau.de <mailto:sebastian.scherbel at fau.de>
>>> <sebastian.scherbel at fau.de> <mailto:sebastian.scherbel at fau.de>
>>> *Gesendet:* Mittwoch, 10. März 2021 16:38
>>> *An:* Schwyn Daniel <daniel.schwyn at inf.ethz.ch>
>>> <mailto:daniel.schwyn at inf.ethz.ch>
>>> *Cc:* barrelfish-users at lists.inf.ethz.ch
>>> <mailto:barrelfish-users at lists.inf.ethz.ch>
>>> *Betreff:* Re: AW: [Barrelfish-users] [Barrelfish] Hagfish kernel
>>> image structure and latest version
>>>
>>> Hi Daniel,
>>>
>>> thank you for your reply. That's what I already suspected.
>>>
>>> I'm waiting to hear back from David about his setup. He seemed quite
>>> sure that chainloading works, so I was a bit surprised that neither
>>> iPXE nor Grub did work for me on EDK2.
>>>
>>> Otherwise, I'll fix iPXE myself.
>>>
>>> Regards Sebastian
>>>
>>> Am Mittwoch, 10. März 2021, 10:59:48 MEZ hat Schwyn Daniel
>>> <daniel.schwyn at inf.ethz.ch <mailto:daniel.schwyn at inf.ethz.ch>>
>>> Folgendes geschrieben:
>>>
>>> Hi Sebastian,
>>>
>>> I have seen this error before with iPXE when I tried chainloading
>>> Hagfish with iPXE on top of U-Boot with EFI support. U-Boot’s EFI
>>> support is rather minimalistic so I’m not sure the cause was the
>>> same in my case. Looking at the iPXE source code though it looks to
>>> me as if it only supports the EFI_PXE_BASE_CODE_MTFTP_READ_FILE
>>> opcode while Hagfish also needs the
>>> EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE operation to allocate
>>> appropriately sized buffers for the files it wants to load.
>>>
>>> Regards,
>>>
>>> Daniel
>>>
>>> *Von:*Barrelfish-users <barrelfish-users-bounces at lists.inf.ethz.ch
>>> <mailto:barrelfish-users-bounces at lists.inf.ethz.ch>> *Im Auftrag von
>>> *sebastian.scherbel at fau.de <mailto:sebastian.scherbel at fau.de>
>>> *Gesendet:* Dienstag, 2. März 2021 22:56
>>> *An:* Cock David <david.cock at inf.ethz.ch
>>> <mailto:david.cock at inf.ethz.ch>>
>>> *Cc:* barrelfish-users at lists.inf.ethz.ch
>>> <mailto:barrelfish-users at lists.inf.ethz.ch>
>>> *Betreff:* Re: [Barrelfish-users] [Barrelfish] Hagfish kernel image
>>> structure and latest version
>>>
>>> Hello,
>>>
>>> >Hagfish definitely supports chainloading over PXE - that's exactly what it was
>>> designed for.
>>>
>>> Which bootloaders have you tested? What does your setup look like?
>>>
>>> I have tried:
>>>
>>> EDK2 -> iPXE -> Hagfish
>>>
>>> /iPXE> chain tftp://x.x.x.x/Hagfish_ETHZ.efi/
>>>
>>> /...
>>> Hagfish UEFI loader starting
>>> UEFI vendor: EDK II
>>> Hagfish loaded at 402D9000, size 147456B, by handle 41839B98
>>> Could not connect to shell or not enough parameters, assuming PXE boot.
>>> Connecting to the PXE service that loaded me.
>>> PXE loader at 403ED660, revision 10000, running
>>> Loading "hagfish.cfg.10.0.0.10"
>>> *Mtftp: Unsupported,
>>> file size: Unsupported*/
>>>
>>> EDK2 -> Grub2 -> Hagfish
>>>
>>> /grub> boot
>>> Status: 0x0000000E
>>> Failed to initialize ShellLib, aborting.
>>> Hagfish UEFI loader starting
>>> UEFI vendor: EDK II
>>> Hagfish loaded at 402DA000, size 147456B, by handle 41862A18
>>> Could not connect to shell or not enough parameters, assuming PXE boot.
>>> Connecting to the PXE service that loaded me.
>>> *OpenProtocol: Unsupported
>>> Failed to initialize loader: Load Error*/
>>>
>>> > The error there seems to be the UEFI implementation not supporting TFTP - did you
>>> compile it in?
>>>
>>> When I load Hagfish directly, everything works fine. On American
>>> Megatrends Aptio V and EDK2.
>>>
>>> Regards Sebastian
>>>
>>> Am Donnerstag, 28. Januar 2021, 16:36:02 MEZ hat David Cock
>>> <david.cock at inf.ethz.ch <mailto:david.cock at inf.ethz.ch>> Folgendes
>>> geschrieben:
>>>
>>> What you're seeing there is Hagfish trying to load its configuration
>>> file over TFTP as it's figured out that it was itself loaded over
>>> PXE. The README might be inconsistent wrt filenames - if in doubt,
>>> trust the code. Hagfish definitely supports chainloading over PXE -
>>> that's exactly what it was designed for.
>>>
>>> The error there seems to be the UEFI implementation not supporting
>>> TFTP - did you compile it in?
>>>
>>> David
>>>
>>> On 28/1/21 3:53 pm, sebastian.scherbel at fau.de
>>> <mailto:sebastian.scherbel at fau.de> wrote:
>>>
>>> Hello,
>>>
>>> sounds good. I have tried to chainload Hagfish after iPXE. However,
>>> loading of the cfg fails on QEMU and on the real hardware with the
>>> same error.
>>>
>>> /Hagfish UEFI loader starting
>>> UEFI vendor: American Megatrends
>>> Hagfish loaded at F951D000, size 143360B, by handle F6EA1D18
>>> Could not connect to shell or not enough parameters, assuming PXE boot.
>>> Connecting to the PXE service that loaded me.
>>> PXE loader at F5EE1840, revision 10000, running
>>> Loading "hagfish.cfg.A.B.C.D"*(shouldn't the cfg name be
>>> hafish.A.B.C.D.cfg according to the readme?)*
>>> *Mtftp: Unsupported, */
>>>
>>> */file size: Unsupported/*
>>>
>>> Is this a known bug? Is chainloading unsupported? Your setup is
>>> directly booting into Hagfish?
>>>
>>> Regards Sebastian
>>>
>>> Am Donnerstag, 28. Januar 2021, 14:03:36 MEZ hat David Cock
>>> <david.cock at inf.ethz.ch> <mailto:david.cock at inf.ethz.ch> Folgendes
>>> geschrieben:
>>>
>>> Sebastian,
>>>
>>> Hagfish is a custom loader for the Barrelfish CPU driver, which
>>> operates under a few unusual assumptions: Mainly, the CPU driver
>>> (kernel) itself is not self-relocating, but relies on the bootloader
>>> (Hagfish) to do the relocation for it.
>>>
>>> It would definitely be possible to modify Hagfish to load an
>>> arbitrary ELF, however. You'd have to make a few changes in the
>>> relocation code to not look for Barrelfish-specific segments and so
>>> on, but there's nothing particularly weird or non-standard about it.
>>>
>>> Hagfish is pretty static, and doesn't change much from version to
>>> version. We'll update the repository shortly (which we should have
>>> done together with the release). Feel free to ask more specific
>>> questions if you decide to use it - we're happy to help.
>>>
>>> David
>>>
>>> On 27/1/21 5:41 pm, sebastian.scherbel at fau.de
>>> <mailto:sebastian.scherbel at fau.de> wrote:
>>>
>>> Hello,
>>>
>>> I'm a CS student trying to port an research operating system from
>>> x86_64 to ARMv8 and stumbled across Hagfish.
>>>
>>> Hagfish should basically be able to load any ELF with its sections
>>> into memory with minor modifications? Or is there certain
>>> requirement for the kernel image structure that I didn't notice
>>> while reading your publication [1] and skimming the source code?
>>>
>>> The last commit in the public repository is from March 2017. But in
>>> the changelog of your last Barrelfish release from 2020 states
>>> "Update Hagfish to latest version". Have there been any bigger
>>> changes or improvements in the meantime?
>>>
>>> Regards Sebastian
>>>
>>> [0]
>>> https://lists.inf.ethz.ch/pipermail/barrelfish-users/2020-March/001597.html
>>> <https://lists.inf.ethz.ch/pipermail/barrelfish-users/2020-March/001597.html>
>>>
>>> [1] http://www.barrelfish.org/publications/TN-022-ARMv8.pdf
>>> <http://www.barrelfish.org/publications/TN-022-ARMv8.pdf>
>>>
>>> _______________________________________________
>>>
>>> Barrelfish-users mailing list
>>>
>>> Barrelfish-users at lists.inf.ethz.ch
>>> <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
>>> <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>>
>>> _______________________________________________
>>> Barrelfish-users mailing list
>>> Barrelfish-users at lists.inf.ethz.ch
>>> <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
>>> <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>>
>>> _______________________________________________
>>>
>>> Barrelfish-users mailing list
>>>
>>> Barrelfish-users at lists.inf.ethz.ch
>>> <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
>>> <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>>
>>> _______________________________________________
>>> Barrelfish-users mailing list
>>> Barrelfish-users at lists.inf.ethz.ch
>>> <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
>>> <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>>
>>>
>>> _______________________________________________
>>> Barrelfish-users mailing list
>>> Barrelfish-users at lists.inf.ethz.ch <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>>
>>> _______________________________________________
>>> Barrelfish-users mailing list
>>> Barrelfish-users at lists.inf.ethz.ch <mailto:Barrelfish-users at lists.inf.ethz.ch>
>>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>>
>> _______________________________________________
>> Barrelfish-users mailing list
>> Barrelfish-users at lists.inf.ethz.ch <mailto:Barrelfish-users at lists.inf.ethz.ch>
>> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users <https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users>
>
> _______________________________________________
> Barrelfish-users mailing list
> Barrelfish-users at lists.inf.ethz.ch
> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/barrelfish-users/attachments/20210416/14a4f7ea/attachment-0001.html>
More information about the Barrelfish-users
mailing list