EFI, nitghmares and Linux

You know, EFI/UEFI is the new magical stuffs that one day visa replace the BIOS and do nice things in UEFI mode, no more legacy. Maybe you already had heard something about that, mainly that new Win8 and Security Boot.

But, let’s talk a little about EFI, a truly little, :P.

These days I need to play with EFI in Linux and dude it was not a nice thing. First because the material about how to play with EFI/UEFI and linux is poor or almost impossible to find out there in web. Yep, I found of lot specs by Intel talking about EFI and UEFI specs , ok. But I really wanted to find more material, more practical material.

So, just let talk about my Study of Case. In my Kernel I’m trying to grab a physical address that is an EFI_MEMORY_RUNTIME range. It’s means that it needs to be mapped in runtime. This address or efi runtime service neither a boot service, and here the things becomes a little bit trick and complicated. The biggest problem is that I need to run that physical address since it is an address to a function in EFI space, but into that function I have some mysterious access to another physical address, what makes me unable to map that address to a virtual and use it nice and clean. (I already did it and fall in a unable access page)

Now I really need to run it in physical space using some EFI trick, but is also now that my Odyssey starts. In any place in web I could found any good material or any little example of how to do that. Ok, that I’m trying to do is insane and maybe impossible or a nice party hard.

In EFI we/I found that efi_phy_prelog (thanks some god, in linux we have a little bit of efi files), that seems allow that a piece of physical code/address can run between it and efi_phys_epilog. But of course that does not work for me in my tests =).

The problem: Run a physical function/physical address into the kernel space in physical mode using some trick EFI or other else magical thing.

Solution: Try to put the whole map to this function in kernel table, when I say whole I really want to say that, include that physical address that is into the black box function.

Hope solution: EFI could me drive to this physical mode and run my code without all theses tricks and painful things.

Frustration: none in linux-efi list could help me/us in that adventure time through EFI and linux experience.

If you want to know more about EFI/UEFI take a look in that and be happy or cry.

If you already play with something like that =) feel free to give me clues, tips, any thing!