[ipxe-devel] UEFI SCT patch
Alexandre Rames
arames at solarflare.com
Tue Sep 18 15:30:30 UTC 2012
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.
>
> * daniel reply: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.
>> 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.
>> 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.)
>>
>> 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/20120918/ee8603ab/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: load_drv.png
Type: image/png
Size: 12692 bytes
Desc: not available
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120918/ee8603ab/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: drivers.png
Type: image/png
Size: 14702 bytes
Desc: not available
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120918/ee8603ab/attachment-0001.png>
More information about the ipxe-devel
mailing list