Jump to content

Compiling the Intel EFI Sample Implementation


daefiman
 Share

22 posts in this topic

Recommended Posts

I have the beta two version of Visual Studio 2005 .NET, and am trying to compile the Intel EFI Sample Implementation 1.10 for the IA-32EMB architecture. I have modified the build scripts to work with the newest Visual Studio, as they only officially support VC6/7/7.1 (and 2005 -> VC8), but have run into difficulties when trying to link some of the objects.

 

Below is the output of the build system, and if anyone could help, I would appreciate it. I cannot use the pre-built floppy versions, as I have no floppy drive (and the floppy image bootsector does not support FAT32, which is the filesystem of my boot partition, onto which I hope to install this EFI implementation).

 

E:\EFI-Framework\BUILD\ia-32emb>build vc8

************************************************************************
*							 E F I  1.1							   *
*																	  *
*				   Extensible Firmware Interface					  *
*					   Sample Implementation						  *
*																	  *
************************************************************************
EFI_SOURCE=E:\EFI-Framework
EFI_MSVCTOOLPATH=C:\Program Files\Microsoft Visual Studio 8\VC
EFI_MASMPATH=E:\EFI-Framework\Tools\Ia32\MASM611
EFI_DEBUG=YES
EFI_DEBUG_CLEAR_MEMORY=YES
EFI_BOOTSHELL=YES
EFI_LIBPATH=C:\Program Files\Microsoft Visual Studio 8\VC\lib
EFI_PSDKPATH=C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK

!!! Current environment being used: VC 8 !!!


E:\EFI-Framework\BUILD\ia-32emb>nmake

Microsoft (R) Program Maintenance Utility Version 8.00.50215.44
Copyright (C) Microsoft Corporation.  All rights reserved.

"E:\EFI-Framework\build\tools\bin\VcCheck"
type E:\EFI-Framework\Corefw\Fw\Platform\BuildTip\IA-32Emb\Banner.c > E:\EFI-Framework\Corefw\Fw\Platform\BuildTip\IA-32Emb\Banner.xxx
del E:\EFI-Framework\Corefw\Fw\Platform\BuildTip\IA-32Emb\Banner.c
rename E:\EFI-Framework\Corefw\Fw\Platform\BuildTip\IA-32Emb\Banner.xxx banner.c
"E:\EFI-Framework\build\tools\bin\genmake"
Processing corefw\fw\efi  
Processing corefw\fw\efi\inc  
Processing corefw\fw\inc  
Processing corefw\fw\platform\bootmgr\default  
Processing corefw\fw\platform\bootmgr\maint  
Processing corefw\fw\platform\buildtip\bios32  
Processing corefw\fw\platform\buildtip\ia-32emb  
Processing corefw\fw\platform\buildtip\inc  
Processing corefw\fw\platform\buildtip\nt32  
Processing corefw\fw\platform\buildtip\sal64  
Processing corefw\fw\platform\drivers\biosint\bioskeyboard  
Processing corefw\fw\platform\drivers\biosint\biossnp16  
Processing corefw\fw\platform\drivers\biosint\biosvga  
Processing corefw\fw\platform\drivers\biosint\biosvgaminiport  
Processing corefw\fw\platform\drivers\biosint\disk  
Processing corefw\fw\platform\inc  
Processing corefw\fw\platform\lib  
Processing corefw\fw\platform\pldriver  
Processing corefw\fw\platform\pldriver\biosint  
Processing corefw\fw\platform\pldriver\cache  
Processing corefw\fw\platform\pldriver\cdrom  
Processing corefw\fw\platform\pldriver\cpu_interrupt  
Processing corefw\fw\platform\pldriver\cpu_timer  
Processing corefw\fw\platform\pldriver\defio  
Processing corefw\fw\platform\pldriver\efildr  
Processing corefw\fw\platform\pldriver\govirtual  
Processing corefw\fw\platform\pldriver\internalshell  
Processing corefw\fw\platform\pldriver\interruptcontroller  
Processing corefw\fw\platform\pldriver\interruptcontroller\8259  
Processing corefw\fw\platform\pldriver\legacyboot  
Processing corefw\fw\platform\pldriver\nulldefio  
Processing corefw\fw\platform\pldriver\nvram  
Processing corefw\fw\platform\pldriver\reset  
Processing corefw\fw\platform\pldriver\sal  
Processing corefw\fw\platform\pldriver\stall  
Processing corefw\fw\platform\pldriver\stall\8253  
Processing corefw\fw\platform\pldriver\time  
Processing corefw\fw\platform\pldriver\time\dallas1287  
Processing corefw\fw\platform\pldriver\timer  
Processing corefw\fw\platform\pldriver\tpl  
Processing corefw\fw\platform\pldriver\unicode  
Processing corefw\fw\platform\pldriver\unicode\english  
Processing corefw\fw\platform\pldriver\watchdog  
Processing edk  
Processing edk\drivers\atapipassthru  
Processing edk\drivers\bis\basecode  
Processing edk\drivers\bis\inc  
Processing edk\drivers\bis\oasis\inc  
Processing edk\drivers\bis\oasis\inc\intel  
Processing edk\drivers\bis\oasis\src\addins\intel\cssmcl  
Processing edk\drivers\bis\oasis\src\addins\intel\cssmcsp  
Processing edk\drivers\bis\oasis\src\addins\intel\cssmcsp\intelcsp\csm_bis  
Processing edk\drivers\bis\oasis\src\addins\intel\cssmcsp\tal  
Processing edk\drivers\bis\oasis\src\addins\intel\cssmvl  
Processing edk\drivers\bis\oasis\src\fwk\cssm  
Processing edk\drivers\bis\oasis\src\fwk\port  
Processing edk\drivers\bis\oasis\src\fwk\util\ber_der\r1_1  
Processing edk\drivers\bis\oasis\src\fwk\util\ber_der\r1_1\inc  
Processing edk\drivers\bis\oasis\src\icl  
Processing edk\drivers\bis\oasis\src\icl\include  
Processing edk\drivers\bis\oasis\src\integrity  
Processing edk\drivers\bis\oasis\src\integrity\inc  
Processing edk\drivers\cirruslogic5430  
Processing edk\drivers\console\conplatform  
Processing edk\drivers\console\consplitter  
Processing edk\drivers\console\graphicsconsole  
Processing edk\drivers\console\terminal  
Processing edk\drivers\debugport  
Processing edk\drivers\debugsupport  
Processing edk\drivers\decompress  
Processing edk\drivers\diskio  
Processing edk\drivers\ebc  
Processing edk\drivers\filesystem\fat  
Processing edk\drivers\ide  
Processing edk\drivers\isabus  
Processing edk\drivers\isafloppy  
Processing edk\drivers\isaserial  
Processing edk\drivers\partition  
Processing edk\drivers\pcatisaacpi  
Processing edk\drivers\pcatisaacpibios  
Processing edk\drivers\pcatpcirootbridge  
Processing edk\drivers\pcibus  
Processing edk\drivers\pcivgaminiport  
Processing edk\drivers\ps2keyboard  
Processing edk\drivers\ps2mouse  
Processing edk\drivers\pxebc  
Processing edk\drivers\pxedhcp4  
Processing edk\drivers\scsibus  
Processing edk\drivers\scsidisk  
Processing edk\drivers\serialmouse  
Processing edk\drivers\snp32_64  
Processing edk\drivers\undi  
Processing edk\drivers\usb\uhci  
Processing edk\drivers\usb\usbbot  
Processing edk\drivers\usb\usbbus  
Processing edk\drivers\usb\usbcbi\cbi0  
Processing edk\drivers\usb\usbcbi\cbi1  
Processing edk\drivers\usb\usbkb  
Processing edk\drivers\usb\usbmassstorage  
Processing edk\drivers\usb\usbmouse  
Processing edk\drivers\vgaclass  
Processing edk\drivers\winntthunk\blockio  
Processing edk\drivers\winntthunk\console  
Processing edk\drivers\winntthunk\serialio  
Processing edk\drivers\winntthunk\simplefilesystem  
Processing edk\drivers\winntthunk\uga  
Processing edk\drivers\winntthunk\winntbusdriver  
Processing edk\drivers\winntthunk\winntpcirootbridge  
Processing edk\guid  
Processing edk\include  
Processing edk\lib\eficommonlib  
Processing edk\lib\efidriverlib  
Processing edk\lib\include  
Processing edk\lib\print  
Processing edk\lib\print\unicode  
Processing edk\protocol  
Processing inc  
Processing inc\protocol  
Processing lib  
Processing shell  
Processing shell\attrib  
Processing shell\bcfg  
Processing shell\cls  
Processing shell\comp  
Processing shell\cp  
Processing shell\date  
Processing shell\debug  
Processing shell\dmpstore  
Processing shell\dumpbs  
Processing shell\edit  
Processing shell\eficompress  
Processing shell\efidecompress  
Processing shell\err  
Processing shell\getmtc  
Processing shell\hexedit  
Processing shell\inc  
Processing shell\iomod  
Processing shell\lib  
Processing shell\load  
Processing shell\loadbmp  
Processing shell\loadpcirom  
Processing shell\ls  
Processing shell\mem  
Processing shell\memmap  
Processing shell\mkdir  
Processing shell\mode  
Processing shell\mv  
Processing shell\newshell  
Processing shell\pci  
Processing shell\reset  
Processing shell\rm  
Processing shell\setsize  
Processing shell\shellenv  
Processing shell\stall  
Processing shell\time  
Processing shell\touch  
Processing shell\type  
Processing shell\ver  
Processing shell\vol  
Make files generated
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Lib\Makefile													all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Edk\Lib\EfiCommonLib\Makefile								   all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Edk\Lib\EfiDriverLib\Makefile								   all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Edk\Lib\Print\Makefile										  all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Edk\Protocol\Makefile										   all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Edk\Guid\Makefile											   all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Corefw\Fw\Platform\Lib\makefile								 all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Corefw\Fw\Efi\Makefile										  all
"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe" -nologo -f Output\Corefw\Fw\Platform\BootMgr\Default\Makefile					 all
link output\Null.obj /NOLOGO /MACHINE:X86 /SUBSYSTEM:CONSOLE /NODEFAULTLIB /INCREMENTAL:NO /MAP /OPT:REF /DRIVER /ALIGN:32  /DEBUG  E:\EFI-Framework\BUILD\ia-32emb\output\corefw\fw\platform\bootmgr\default\default.lib E:\EFI-Framework\BUILD\ia-32emb\output\lib\lib.lib E:\EFI-Framework\BUILD\ia-32emb\output\Corefw\Fw\Platform\Lib\Lib.lib E:\EFI-Framework\BUILD\ia-32emb\output\Edk\Protocol\Protocol.lib /ENTRY:InitializeBootManager /OUT:bin\bootmgr.dll
default.lib(load.obj) : error LNK2019: unresolved external symbol ___security_cookie referenced in function _BmLocateHandleByDiskSignatureAndPartition
default.lib(var.obj) : error LNK2001: unresolved external symbol ___security_cookie
default.lib(default.obj) : error LNK2001: unresolved external symbol ___security_cookie
lib.lib(print.obj) : error LNK2001: unresolved external symbol ___security_cookie
default.lib(load.obj) : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function _BmLocateHandleByDiskSignatureAndPartition
default.lib(var.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
default.lib(default.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
lib.lib(print.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
lib.lib(efirtlib.obj) : error LNK2019: unresolved external symbol _memset referenced in function _RtZeroMem
bin\bootmgr.dll : fatal error LNK1120: 3 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.exe"' : return code '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.exe"' : return code '0x2'
Stop.

 

This wasn't from a clean build, but the results are the same nonetheless, and there are no errors or warnings outputted prior to those above even with a clean build.

Link to comment
Share on other sites

I don't know yet whether the Sample is complete, and will not be testing the Apple EFI firmware, as I do not own a copy of OS X with the firmware on. Currently, I am concentrating on installing (and fixing the above problems) the Intel Implementation on a FAT32 partition. If anyone could help, that would be great, as after, I will look at the TianoCore implementation. I'll still look at that version if the Intel one fails to work. I have both downloaded.

 

If I can get hold of the Apple firmware legally, then I will gladly help out. Perhaps I'll download Boot Camp and take a look at that.

Link to comment
Share on other sites

Currently, I am concentrating on installing (and fixing the above problems) the Intel Implementation on a FAT32 partition.

I assume that you know that the TianoCore has a "Enhanced FAT-Driver" project which is open source, but requires registration.

 

If I can get hold of the Apple firmware legally, then I will gladly help out.

 

You can legally download the EFI firmware from Apple. Here is the latest (update 1.0 for Boot Camp) version for the Mac Mini:

 

http://www.apple.com/support/downloads/mac...reupdate10.html

 

This includes the original EFI firmware for all three Intel Macs:

 

http://www.apple.com/support/downloads/fir...ationcdv10.html

 

If anyone could help...

 

I am sorry that I do not program with Visual Studio, but I am sure that you will figure out how to compile the EFI implementations soon. Please post instruction when you do. Thanks again for working on this.

Link to comment
Share on other sites

Well, atm I'm looking at the Intel implementation, and it seems - having looked a bit at the makefiles - that it supports FAT32. I'm probably going to install my copy of Visual Studio 6, ancient though it is, since VS 2005 doesn't like me.

 

@cyclonefr: I don't want people to get expectant and then find I haven't managed to get anything done. My main aim is not to be, as it has seemed until now, like some people who promise an Intel WiFi driver. Oh, and, yes - I am building an implementation for the regular, legacy PC.

 

@bofors: Thanks for clarifying the legality of Boot Camp. I'll look into it now.

Link to comment
Share on other sites

Update:

 

I have installed VS 6, and have successfully compiled the implementation for BIOS32 and IA-32EMB. The former uses legacy BIOS calls for I/O, and the latter does without and uses the EFI drivers; it's designed for embedded systems (hence the EMB suffix), but should work with all IA-32 devices, like our PCs.

 

However, both these systems leave me in the same situation as the binaries provided with the implementation by Intel. I copy the fat32 bs32.com and efildr20, which should load up the framework from the \EFI, directory to the root of my boot partition, set GRUB and the NTLDR to load bs32.com and pass through control, but with no success. All the machine does is hang on execution; pun not really intended.

 

Looks like I'll have to use the TianoCore EDK, as without a floppy drive, it seems that the Intel implementation is unusable. If anyone wants to suggest what to do, they need to grab the sample implementation, and set up VS6 as described in the release notes.

 

I'll start using Bochs or Qemu for debugging, I think. How, though, does one get Qemu to boot off a partition rather than an image?

 

Update2: Looks like I'll have to use the Intel Sample Implementation, as the TianoCore EDK does not provide a build tip for either BIOS32 or IA-32EMB (nor their equivalents), just NT32. I'll have to rumage around in the Intel bootsector code to see what's going on...

 

Update3 (wrong): Seems the system cannot find the Efildr20 file on boot, and so pulls an interrupt 3. This interrupt, as far as I can see, causes the CPU to "break", and stop execution. If someone wants to correct that, I'd be glad. The bs32.asm file denotes EFILDR20 as the filename, not Efildr20. Perhaps the bs32.com file, which GRUB/NTLDR loads, is case-sensitive. Since the bootsector can only be one sector long, I am reluctant to modify it. I have renamed the file, and I hope that will work...

Link to comment
Share on other sites

Update:

 

I have installed VS 6, and have successfully compiled the implementation for BIOS32 and IA-32EMB. The former uses legacy BIOS calls for I/O, and the latter does without and uses the EFI drivers; it's designed for embedded systems (hence the EMB suffix), but should work with all IA-32 devices, like our PCs.

 

Question: Is VS 6, the only way to compile this from Intel? Is there a way to build this using GCC or the Intel compilers?

 

thanks

Link to comment
Share on other sites

cyclonefr, not quite. I have compiled some modified source code - in the hope that it will boot far enough to print debug messages. The Intel Sample Framework has compiled in this form with Visual C++ 6, but I have not been able to boot it from my FAT32 partition using GRUB or the NTLDR. Moreover, I have no floppy drive to test the floppy drive solution, but - even so - that is unwieldy and even slower than the hd option. I can't really see why the boot code isn't working - I did study OS development (I couldn't grasp much for the life of me) for a time; however, I have never worked with hard drive booting, or filesystems other than FAT12 on floppies. I may have to rewrite the bootsector code, with aid from some tutorial, and see if that works.

Link to comment
Share on other sites

I'm going to be using VMWare to play around with EFI. I want to use a virtual drive so I don't have to completely repartition my drive.

 

I thought that EFI partitions the harddrive in a different way and cannot access harddrives partitioned in a regular fashion. Is this correct? I read something about this on the Intel EFI page.

Link to comment
Share on other sites

I was running the standard intel implementation (the provided binary) through VMWARE and its unstable as hell. I continue to get errors everytime I run EFI programs. Sometimes they will run, but usually I get a "can't be found" error. I managed to partition a HD, but I can't get hte formatting program to run yet....

Link to comment
Share on other sites

Sorry if i ask stupid things but wouldnt be easyer to get somewhere or make an EFI bootloader which would load efi? Like an executable... and then efi loads NTLDR or grub or lilo whatever...

Im not a programmer so sorry if im shooting in the dark :)

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...
  • 1 month later...

I come upon this thread while searching for something else, why isn't it under macefix86? I have compiled the intel implementation under VC8 and it boots from my fat32 memory stick. But you have to make some modification on some make files to do it.

Link to comment
Share on other sites

  • 5 months later...
  • 9 months later...

Sorry to bring up an old thread. Bad me...

 

But i really need the "EFI Sample Implementation," because Intel stopped seeding it. I would greatly appreciate it if anyone can PM me the download link, or send it directly to my email: mods.29a @ gmail. com (please remove spaces).

 

Thanks very much in advance. I'm looking forward to anyone's reply :P

Link to comment
Share on other sites

 Share

×
×
  • Create New...