[ipxe-devel] UEFI SCT patch

Alexandre Rames arames at solarflare.com
Wed Sep 19 10:30:20 UTC 2012


Update:
Sorry but I cannot send the HelloWorld.efi file. It won't go through our 
mail filters. So you'll need to compile it yourself.
You could also try with a Shell.efi binary available already precompiled 
from EDK2 instead. Once you try downloading and booting it make sure you 
correctly identify if you are in the downloaded shell or your native 
shell (behaviour of the 'exit' command).

On 18/09/12 17:12, Daniel Li wrote:
> Hi Alexandre,
> Please see inline reply again,I am sorry to bother you so long,thank 
> you so much.
> ------------------
> Best Regards,
> Daniel Li
>
>
> ------------------ Original ------------------
> *From: * "Alexandre Rames"<arames at solarflare.com>;
> *Date: * Tue, Sep 18, 2012 11:30 PM
> *To: * "Daniel Li"<354225989 at qq.com>;
> *Cc: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
> *Subject: * Re: [ipxe-devel] UEFI SCT patch
>
> See inlined answers.
>
> On 18/09/12 12:37, Daniel Li wrote:
>> Hi Alexandre ,
>> Thanks for your greate helpful reply,could you help me answer the 
>> following questions?
>>
>> I think the answers to your first three points should interest you, 
>> in particular the 3rd.
>>
>> Alexandre
>>
>> On 15/09/12 16:46, Daniel Li wrote:
>>> Hi Alexandre,
>>> Thanks for your helpful reply,After review your attach file,I am 
>>> very very exicted,and then has some questions,could you help to 
>>> answer again?
>>> 1.I can't found the file sfc9000.c in the ipxe project,what is the 
>>> use of this document?Is a new driver and could you tell me the 
>>> driver support machine,if you can send the file to me will best?
>> sfc9000 and similar files are code files for our NIC, equivalent to 
>> other NIC specific files in src/drivers/net. You can totally ignore that.
>> *daniel reply:I still can't detect network device Although i built 
>> special file like make -C src bin-x86_64-efi/82545em.efidrv,so i want 
>> to know what your have fixed ipxe code?did you fix the file efi_pci.c 
>> code?*
> My patch does not touch this file.
>>> 2.You said you can successfully PXE boot On a real UEFI machine,did 
>>> you used the ipxe project?Did you run under uefi enviroment?could 
>>> you tell me the machine and your made script?which command has been 
>>> run?what method do you use to create image?as i know,if you run 
>>> "chain" or "sanboot" command under uefi shell,you should create a 
>>> uefi image format?
>> I used the iPXE based UEFI driver for my NIC. The PXE utility is part 
>> of the host machine's software, accessible through the boot manager 
>> (F1 menu on boot on my machine).
>> So it seems this differs from the way you are trying to pxe boot. 
>> Have you checked if your machine provides such a utility via the boot 
>> manager? Note that if it does you need to make sure the driver is 
>> loaded before starting it.
>> c*You said you use "**The PXE utility is part of the host machine's 
>> software",I think the pxe utility is supported by legacy bios?Why did 
>> you still need built a ipxe based uefi?Did you netwok boot via ipxe 
>> based uefi enviroment?Could you share your step to me?example how 
>> config pxe server or how config pxe client.*
> I used the host machine's UEFI based PXE utility, that uses the UEFI 
> driver I built for my NIC.
> The only change to the pxe server from a normal setup is to provide a 
> UEFI file that the client can boot (see also answer below).
> I don't have to configure anything on the client.
> *>>daniel:1.Your machine builtin uefi base pxe utility?could you tell 
> me your machine?i will get it and test,i can't find any thinkpad 
> machine builtin uefi pxe.*
I am testing on an IBM blade server with one of my company's NIC 
(www.solarflare.com). I very strongly advise you NOT to buy any such 
infrastructure simply for testing UEFI!
> *                 2.Could you send me this UEFI file that the client 
> can boot or how can i make this uefi file,i have replace the 
> bootx64.efi to pxelinux.0,but still can't network boot.*
As mentioned previously, modify and build the HelloWorld example from 
EDK2 <http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK2>.
I attached an *X64* version you can try. Copy it next to your pxelinux.0 
file, update the filename in your dhcpd.confconfiguration file on your 
server to point to the helloworld, and restart necessary services (fully 
restarting the server works as well). Then try the procedure that 
allowed you to successfully download and attempt booting.
>
>>> 3.Your attach show that the *.efi which your built can detected the 
>>> network device,but after my bin-x86_64-efi/82579lm.efidrv can't 
>>> detect network device,as i know,the network device of my Thinkpad 
>>> T420 machine is intel.
>> I detailed in my first email a procedure which I think can be used to 
>> spot which uefi driver to use with your card.
>> I mentioned 82579lm.efidrv because you listed a device with "computer 
>> vendor is 8086,device id is 1502".
>> I can't see a matching device in the output of 'pci' you attached, so 
>> 82579lm.efidrv is probably not what you need.
>>
>> From the output of your 'pci' command attached, I found (following 
>> the procedure in my first email):
>> ipxe/src/drivers/net $ grep -RHIin "8086" . | grep -i "100f"
>> ./intel.c:844:    PCI_ROM ( 0x8086, 0x100f, "82545em", "82545EM 
>> (Copper)", 0 ),
>>
>> *So you probably need to build this one:**
>> **$ make -C src bin-x86_64-efi/**82545em.efidrv*
>>
>> *And then do check from your uefi that the driver is loaded and is 
>> managing a device.**
>> **See my first email and (in your uefi shell) 'drivers -?'**  and 
>> 'devices -?'**. (*The 'drivers' command has a column listing the 
>> number of devices managed by the drivers.)
>>
>> *
>>  daniel reply:I still can't detected network device although i built 
>> the file like " $ make -C src bin-x86_64-efi/82545em.efidrv ",could 
>> you help to built a general built like " $ make -C src 
>> bin-x86_64-efi/ipxe.efidrv " and then test on your machine and send 
>> the log to me?I guess it succeed too.*
> Building a driver with
> $ make -C ../../src bin-x86_64-efi/ipxe.efidrv DEBUG=efi_pci
> and loading the it works fine. See attached screenshots.
> *>>daniel:Maybe the problem was occured because the  edk version?what 
> do you think?could you tell me your edk version?*
>>> 4.As i know ,the return error code EFI_UNSUPPORTED was showed when 
>>> call efi_create->openprotocol?(), because the controller handle is 
>>> not in the pci hand list.
>> I don't really understand what you mean by . Anyway if your device is 
>> not managed by your driver it seems normal that the procedure stops 
>> at one point. I'd be concerned about that only if it persists after 
>> your driver successfully manages your device.
>> * daniel reply:I think you are right,"I'd be concerned about that 
>> only if it persists after your driver successfully manages your 
>> device."?Do you know how i can debug it.
>> *
> You'll have to work it out! Use debug/print statements and follow the 
> code.
>>
>>> 5.PCI_vm_windows7_x64_under_uefishell.txt was created when i run 
>>> command "pci" under uefi shell.
>> See answer to 3).
>>> 6.snponly_boot_failed_under_uefishell.jpg when I run under command:
>>> fs0:snponly.efi
>>>       ipxe:chain http://boot.ipxe.org/demo/boot.php
>> I guess you need to load the correct driver before trying to start 
>> snponly.efi
>>> *daniel reply:If i used the snponly.efi under uefi enviroment,i can 
>>> download the image,but i can't boot into the image ,because the 
>>> image is not uefi format?Did you remote boot **succeed via **pxe 
>>> network boot under uefi?*
> I am starting to wonder now: if you manage to download the image is 
> your driver working?!
> Have you tried to change the configuration of your PXE server to 
> provide a simple uefi application? For example a UEFI shell or a UEFI 
> helloworld (see edk2 MdeModulePkg/Application... wrap the print 
> "hello" in a loop to make sure you have time to see it on the screen.)
> *>>daniel:1.Yes,if I built snponly.efi(the command is make 
> bin-x64-efi/snponly.efi),it can download image via network protocol.*
Then see the instructions in the answer to your previous question.
> *              2.As we know,legacy pxe server should include key file 
> pxelinux.0(NBP),i think uefi pxe server should include uefi file for 
> NBP like pxelinux.0,but I can't built a uefi file like pxelinux.0 so 
> far.Where did you get this file?Could you share your method that how 
> config your uefi pxe server?*
I so far tested that I could download and boot manually created UEFI 
files like the HelloWorld attached. If you can do that refer to some 
other documentation on the internet on how to configure a PXE server for 
UEFI.
>>>
>>> 5.Could you help to review two attach documents and point out my 
>>> mistakes?
>>> Thanks for your great greate support.
>> As pointed before try in order:
>> - building the correct driver
>> - load it from the uefi shell and CHECK that it manages your device.
>> - then try pxe booting or other snp utilities.
>>>
>>>
>>>
>>> ------------------
>>> Best Regards,
>>> Daniel Li
>>
>> Alexandre
>>>
>>>
>>> ------------------ Original ------------------
>>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>>> *Date: * Fri, Sep 14, 2012 05:04 PM
>>> *To: * "Daniel Li"<354225989 at qq.com>;
>>> *Cc: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>>> *Subject: * Re: [ipxe-devel] UEFI SCT patch
>>>
>>> For info I attached a screenshot of the driver loading. It was 
>>> compiled with
>>> DEBUG=efi_init,efi_snp,efi_pci,efi_driver_health,netdevice,sfc9000
>>>
>>> On 14/09/12 09:59, Alexandre Rames wrote:
>>>> Hello Daniel,
>>>>
>>>>
>>>>
>>>> On 13/09/12 14:48, Daniel Li wrote:
>>>>> Hi Alexandre,
>>>>> Thanks for your quickly reply.Did you built a *.efi and detected 
>>>>> device under uefi enviroment?Did you network boot succeed?
>>>>
>>>> Yes. I can detect my pci device (UEFI 'pci' command), and load the 
>>>> driver. On a real UEFI machine I can successfully PXE boot.
>>>>
>>>> I am not sure if that makes a difference with your command I see in 
>>>> the screenshot, but I use a command like
>>>> fs0:\> load <driver name>.efidrv
>>>> to load the driver. Not a simple invocation of a *.efi file.
>>>> From what I mentioned in my previous email yours may be:
>>>> ipxe/src $ ls bin-x86_64-efi/*.efidrv
>>>> bin-x86_64-efi/82579lm.efidrv
>>>> Check the output of 'pci' in your UEFI shell (see previous email).
>>>>
>>>>> I have debug this issue more than one week,but i can't find the 
>>>>> root cause,my deubg information like following figure.
>>>>> The call flow is 
>>>>> efipci_supported()->efipci_create()->OpenProtocol(),unfortunately,OpenProtocol 
>>>>> return EFI_UNSUPPORTED error code and the log is "EFIPCI device 
>>>>> 0x3dbf5398 is not a PCI device",I think ipxe can't enum the pci 
>>>>> device.Could you tell me the right step or ut pass machine. I get 
>>>>> the faile result after boot ipxe via uefi shell on Thinkpad T420 
>>>>> and VMare 8.0,it's network device is intel.
>>>> If the steps I described previously don't work you may try to 
>>>> better undestrand why EFI_UNSUPPORTED is returned. Check the 
>>>> parameters provided to OpenProtocol; maybe list the protocols 
>>>> available on your handle.
>>>>> BTW,Could you tell me whether ipxe is supported in uefi 
>>>>> enviroment,if not,could you tell me your plan.
>>>> I don't really understand the question here. You can compile a UEFI 
>>>> driver for you card if it is supported in iPXE.
>>>>>
>>>>> ------------------
>>>>>
>>>>> ------------------
>>>>> Best Regards,
>>>>> Daniel Li
>>>> Alexandre
>>>>>
>>>>>
>>>>> ------------------ Original ------------------
>>>>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>>>>> *Date: * Thu, Sep 13, 2012 08:39 PM
>>>>> *To: * "Daniel Li"<354225989 at qq.com>;
>>>>> *Cc: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>>>>> *Subject: * Re: [ipxe-devel] UEFI SCT patch
>>>>>
>>>>> My patch will potentially fix some errors reported by SCT 
>>>>> <http://www.uefi.org/specs/>. It probably won't fix your problem.
>>>>>
>>>>> I have little experience with UEFI or iPXE, but here are a few 
>>>>> suggestions:
>>>>>
>>>>> The commands you listed don't work for me, and I could not find 
>>>>> matching vendor / device id for the first 3 devices you mention:
>>>>> $ cd <ipxe_repo>/src/
>>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2000
>>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2001
>>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2625
>>>>>
>>>>> I could build a efi-driver for the last device your mention:
>>>>>
>>>>> Commands:
>>>>> $ cd <ipxe_repo>/src/
>>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 1502
>>>>> gives me:
>>>>> ./intel.c:926:    PCI_ROM ( 0x8086, 0x1502, "82579lm", "82579LM", 0 )
>>>>>
>>>>> So I could build your UEFI driver with the command:
>>>>> $ make bin-x86_64-efi/82579lm.efidrv -j6
>>>>> (replace efidrv with efirom to build a rom)
>>>>>
>>>>>
>>>>> I am wondering if your other devices are supported. Maybe the way 
>>>>> I am looking for devices is not appropriate though.
>>>>>
>>>>> Here is an example procedure to load the driver built previously 
>>>>> (very verbose).
>>>>>
>>>>> cd to the filesystem
>>>>> > fs0:
>>>>> Check that your device exist. Here look for your device 0x8086, 0x1502
>>>>> > pci
>>>>> Check what drivers are loaded. Write down the index of the last 
>>>>> driver loaded.
>>>>> > drivers
>>>>> List devices. Write down the index of the last device
>>>>> > devices
>>>>> Load your driver manually (this is the file compiled previously)
>>>>> > load driver\82579lm.efidrv
>>>>> Now check if your driver is loaded
>>>>> > drivers
>>>>> and if your device is present.
>>>>> > devices
>>>>>
>>>>> If that does not work maybe try to enable debug in some iPXE files.
>>>>> For example:
>>>>> make bin-x86_64-efi/82579lm.efidrv -j6 DEBUG=intel,efi_snp,efi_init
>>>>> Enabling debug in files related to your device may give you some 
>>>>> useful info.
>>>>>
>>>>> Hope this helps,
>>>>>
>>>>> Alexandre
>>>>>
>>>>> On 13/09/12 12:54, Daniel Li wrote:
>>>>>> Hi Alexandre,
>>>>>> Could you tell me which issue was be fixed by your patch?
>>>>>>
>>>>>> I have some issue like following about ipxe with uefi,I think you 
>>>>>> are good well with uefi.
>>>>>>
>>>>>> Our product will import ipxe,but efi file can't found network 
>>>>>> device,I built efi file according to the below steps.
>>>>>>
>>>>>> 1.I have undef PXE_STACK and PXE_MENU in src\config\general.h.
>>>>>>
>>>>>> 2.Built EFI version as vendor/product specific:
>>>>>>
>>>>>> $ make bin-x86-64/10222000.efi bin-x86-64/10222001.efi 
>>>>>> bin-x86-64/10222625.efi.(computer vendor is 1022 ,device id is 2001).
>>>>>>
>>>>>> $make bin-x86-64-efi/80861502(computer vendor is 8086,device id 
>>>>>> is 1502).
>>>>>>
>>>>>> 3.insert usb drive and enter uefi shell.
>>>>>>
>>>>>> 4.fs0:
>>>>>>
>>>>>> 5.run above efi file.
>>>>>>
>>>>>> 6.All commands are Show the tip "No more network devices".
>>>>>>
>>>>>>
>>>>>> ------------------
>>>>>> Best Regards,
>>>>>> Daniel Li
>>>>>>
>>>>>>
>>>>>> ------------------ Original ------------------
>>>>>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>>>>>> *Date: * Thu, Sep 13, 2012 06:15 PM
>>>>>> *To: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>>>>>> *Subject: * [ipxe-devel] UEFI SCT patch
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I recently started working on our UEFI driver, and some of my 
>>>>>> changes
>>>>>> may be useful for iPXE upstream.
>>>>>>
>>>>>> So here is a first patch dealing with NIC independent code. Can 
>>>>>> you have
>>>>>> a look and let me know if it needs some modifications.
>>>>>> It includes:
>>>>>>   - changes to be more UEFI compliant and pass SCT tests (most 
>>>>>> changes
>>>>>> in efi_snp.c)
>>>>>>   - initial support for the driver health protocol
>>>>>>   - initial support for the firmware management protocol
>>>>>>
>>>>>> You'll probably want to verify the additional checks for UEFI 
>>>>>> versions:
>>>>>>   - I added the DRIVER_EFI_SUPPORTED_VERSION protocol, as 
>>>>>> required by
>>>>>> the UEFI spec.
>>>>>> " Provides information about the version of the EFI specification 
>>>>>> that a
>>>>>> driver is following. This
>>>>>> protocol is required for EFI drivers that are on PCI and other 
>>>>>> plug in
>>>>>> cards. "
>>>>>> - In efi_init.c I added a check for a minimal version of UEFI 
>>>>>> required
>>>>>> to use the driver. I am not sure you want to keep that.
>>>>>>
>>>>>>
>>>>>> Alexandre
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120919/61d89403/attachment.htm>


More information about the ipxe-devel mailing list