Hello Laszlo,

That was it!
Thank you very much.

After I've called
> connect
in the Shell the Disk I/O protocol got installed properly and I could access
the data in the image.
Now I'm integrating the gBS->ConnectController() call right after installing
the Block I/O protocol on the image.
I think after that it should work in the Shell out of the box.

Regards,
Michael

-----Ursprüngliche Nachricht-----
Von: Laszlo Ersek [mailto:[email protected]] 
Gesendet: Dienstag, 17. Dezember 2013 16:32
An: [email protected]
Cc: Michael Lorer
Betreff: Re: [edk2] Problem creating bootable memory mapped disk space

On 12/17/13 15:47, Michael Lorer wrote:
> Hello,
> 
>  
> 
> Short information on what I want to do:
> 
> During UEFI boot I’m downloading a small complete partition image 
> (including a MBR and a bootmanager) and place that image in allocated 
> runtime space.
> 
> After that I want to start the bootmanger inside of that image.
> 
>  
> 
> What I’m doing so far:
> 
> // Here we are in the middle of a UEFI boot during DXE phase and way 
> before runtime just after all necessary network protocols were installed.
> 
>  
> 
> // We have sucessfully downloaded a small HDD parition Image 
> (including a MBR and a boot loader)
> 
> // That images resides in runtime memory I have a pointer to and I 
> know the size of the image.
> 
>  
> 
> // Now we're doing the following steps:
> 
> Status = pBS->InstallMultipleProtocolInterfaces(
> 
>                            &gImageHandle,
> 
>                            &EfiComponentNameProtocolGuid,
> &RomDiskComponentName,       //Initialize driver NAME protocol
> 
>                            NULL
> 
>                            );
> 
>  
> 
> // Setting up all variables for a Memory Map device path structure as 
> mentioned in UEFI spec here.
> 
> Status = pBS->InstallMultipleProtocolInterfaces(
> 
>                            &gImageHandle,
> 
>                            &RomDiskDevicePathGuid,
> pRomDiskDevicePathProtocol,         //Initialize device PATH protocol
> 
>                            NULL
> 
>                            );
> 
>  
> 
> // And as a last step we're setting up the EFI_BLOCK_IO_MEDIA 
> structure and do:
> 
> Status = pBS->InstallMultipleProtocolInterfaces(
> 
>                           &gImageHandle,
> 
>                            &RomDiskBlockIoProtocolGuid,
> &RomDiskBlockIoProtocol,       //Initialize BLOCKIO protocol
> 
>                            NULL
> 
>                            );
> 
>  
> 
> That is working fine so far. After the DXE phase I can find the 
> BlockIO protocol as blk0 in my UEFI Shell. If I do
> 
> Ø  dblk blk0
> 
> I can see the correct content of my partition image.
> 
>  
> 
> But what I’m missing now is that there is no Disk I/O protocol 
> installed up on my Block I/O protocol.
> 
> Regarding UEFI specification 12.7 I thought that the 
> EFI_DISK_IO_PROTOCOL is automatically installed on all available Block 
> I/O protocols.
> 
> Any clue why that is not done in that case? And what I can do about it?

I think you need to call gBS->ConnectController() so that the rest of the
driver stack is recursively installed on top of BlockIo. Normally, BDS code
issues such calls.

Laszlo


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to