Sure, the FSx: names are created by the shell. So before the shell loads, there is no Shell protocol, so no mapping names. That means that the StdLib implementation statically linked with a UEFI driver will not find the Shell protocol and will not be able to match any volume names (FSx or consistent mapping or any user-created mappings), but the rest of the device path rules should apply. So, for example \PciRoot(0)\Pci(0,31)\Usb(0,0)\Mbr()\BootX64.efi could work, right? Those are the types of device paths that a UEFI driver might find in the BootXXXX variables and want to use.
Tim -----Original Message----- From: Carsey, Jaben [mailto:[email protected]] Sent: Wednesday, July 06, 2016 2:02 PM To: Tim Lewis <[email protected]>; [email protected] Cc: [email protected]; Michael Zimmermann <[email protected]>; Daryl McDaniel ([email protected]) <[email protected]>; Carsey, Jaben <[email protected]> Subject: RE: [edk2] StdLib usage for drivers? Tim, Good catch. I did not consider HII stuff. If you use a UEFI Shell Spec defined "consistent map name", it works without the shell since that is a 1:1 conversion with DevicePath. If you use a Shell map name, then it can try, but there is no guarantee that enumerations are right. Using FS0: based mapping in a driver is very scary to me. -Jaben > -----Original Message----- > From: Tim Lewis [mailto:[email protected]] > Sent: Wednesday, July 06, 2016 1:58 PM > To: Carsey, Jaben <[email protected]>; [email protected] > Cc: [email protected]; Michael Zimmermann > <[email protected]>; Daryl McDaniel > ([email protected]) <[email protected]> > Subject: RE: [edk2] StdLib usage for drivers? > Importance: High > > Jaben -- > > I can certainly recall instances where drivers that publish HII setup > pages load things from the disk (such as when checking for specific file > names). > > I also seem to recall that the original EDK shell library was designed > to that volume names were simply ignored if the shell protocol was not > present. This is essentially what the Shell APIs do, right? They just > convert mapping names into device path snippets. > > Tim > > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Carsey, Jaben > Sent: Wednesday, July 06, 2016 1:53 PM > To: [email protected] > Cc: Carsey, Jaben <[email protected]>; [email protected]; > Michael Zimmermann <[email protected]>; Daryl McDaniel (edk2- > [email protected]) <[email protected]> > Subject: Re: [edk2] StdLib usage for drivers? > > The thing that I am trying to figure out is what LibC APIs is really > needed by the driver? > > UEFI Drivers are not supposed to do things like FILE I/O, so who cares > if they would fail if they were called… > > Sidenote: I think that daShell.c is only used when you ask LibC for > things that come from the shell… > > This snippet makes standard APIs point to shell specific ones… > LibC/Uefi/Devices/UefiShell/daShell.c:814: Stream->Abstraction.fo_close = > &da_ShellClose; > LibC/Uefi/Devices/UefiShell/daShell.c:815: Stream->Abstraction.fo_read = > &da_ShellRead; > LibC/Uefi/Devices/UefiShell/daShell.c:816: Stream->Abstraction.fo_write = > &da_ShellWrite; > LibC/Uefi/Devices/UefiShell/daShell.c:818: Stream->Abstraction.fo_poll = > &da_ShellPoll; > LibC/Uefi/Devices/UefiShell/daShell.c:820: Stream->Abstraction.fo_stat = > &da_ShellStat; > LibC/Uefi/Devices/UefiShell/daShell.c:821: Stream->Abstraction.fo_ioctl = > &da_ShellIoctl; > LibC/Uefi/Devices/UefiShell/daShell.c:822: > Stream->Abstraction.fo_delete = &da_ShellDelete; > LibC/Uefi/Devices/UefiShell/daShell.c:823: > Stream->Abstraction.fo_rmdir = &da_ShellRmdir; > LibC/Uefi/Devices/UefiShell/daShell.c:824: > Stream->Abstraction.fo_mkdir = &da_ShellMkdir; > LibC/Uefi/Devices/UefiShell/daShell.c:825: > Stream->Abstraction.fo_rename = &da_ShellRename; > LibC/Uefi/Devices/UefiShell/daShell.c:826: Stream->Abstraction.fo_lseek = > &da_ShellSeek; > > > From: [email protected] [mailto:[email protected]] > Sent: Wednesday, July 06, 2016 1:48 PM > To: Carsey, Jaben <[email protected]> > Cc: Michael Zimmermann <[email protected]>; Marvin Häuser > <[email protected]>; [email protected]; edk2- > [email protected] > Subject: Re: [edk2] StdLib usage for drivers? > Importance: High > > > On Jul 6, 2016, at 1:39 PM, Carsey, Jaben > <[email protected]<mailto:[email protected]>> wrote: > > It works for libs. If you specify a specific LibraryClass > implementation, it will not add a second of that library class. > > Side note: what if you turn off AutoInitialize PCD for the shell lib? > That would get rid of your main issue (the constructor ASSERT)… then > we can see what other issues you have. > > > This seems like the set of library APIs that would be needed (and one > usage of gEfiShellProtocol->SetCurDir()). > > ~/work/src/edk2/StdLib(master)>git grep Shell -- *.c > LibC/Main/Main.c:20:#include <Library/ShellCEntryLib.h> > LibC/Main/Main.c:130:ShellAppMain ( LibC/StdLib/Environs.c:23:#include > <Library/ShellLib.h> > LibC/StdLib/Environs.c:155: OpStat = ShellExecute( &MyHandle, gMD- > >UString, FALSE, NULL, &CmdStat); > LibC/StdLib/Environs.c:167: are determined by the underlying UEFI Shell > implementation. > LibC/StdLib/Environs.c:181: EfiEnv = ShellGetEnvironmentVariable(gMD- > >UString); > LibC/StdLib/Environs.c:248: HostName = ShellGetEnvironmentVariable ( > UName ); > LibC/StdLib/Environs.c:254: Status = ShellSetEnvironmentVariable ( > UName, UValue, TRUE ); > LibC/StdLib/Environs.c:265: Status = ShellSetEnvironmentVariable ( > UName, UValue, FALSE ); > LibC/Uefi/Devices/UefiShell/daShell.c:2: Abstract device driver for > the UEFI Shell-hosted environment. > LibC/Uefi/Devices/UefiShell/daShell.c:4: In a Shell-hosted > environment, this is the driver that is called > LibC/Uefi/Devices/UefiShell/daShell.c:21:#include > <Library/ShellLib.h> > LibC/Uefi/Devices/UefiShell/daShell.c:40:/** EFI Shell specific > operations for close(). > LibC/Uefi/Devices/UefiShell/daShell.c:50:da_ShellClose( > LibC/Uefi/Devices/UefiShell/daShell.c:54: EFIerrno = ShellCloseFile( > (SHELL_FILE_HANDLE *)&Fp->devdata); > LibC/Uefi/Devices/UefiShell/daShell.c:61:/** EFI Shell specific > operations for deleting a file or directory. > LibC/Uefi/Devices/UefiShell/daShell.c:71:da_ShellDelete( > LibC/Uefi/Devices/UefiShell/daShell.c:77: Status = ShellDeleteFile( > (SHELL_FILE_HANDLE *)&filp->devdata); > LibC/Uefi/Devices/UefiShell/daShell.c:86:/** EFI Shell specific > operations for setting the position within a file. > LibC/Uefi/Devices/UefiShell/daShell.c:97:da_ShellSeek( > LibC/Uefi/Devices/UefiShell/daShell.c:113: Status = ShellSetFilePosition( > FileHandle, 0xFFFFFFFFFFFFFFFFULL); > LibC/Uefi/Devices/UefiShell/daShell.c:117: Status = ShellGetFilePosition( > FileHandle, (UINT64 *)&CurPos); > LibC/Uefi/Devices/UefiShell/daShell.c:128: Status = ShellSetFilePosition( > FileHandle, (UINT64)(CurPos + offset)); > LibC/Uefi/Devices/UefiShell/daShell.c:131: Status = ShellGetFilePosition( > FileHandle, (UINT64 *)&CurPos); > LibC/Uefi/Devices/UefiShell/daShell.c:161:da_ShellMkdir( > LibC/Uefi/Devices/UefiShell/daShell.c:177: Status = ShellCreateDirectory( > NewPath, &FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:179: FileInfo = ShellGetFileInfo( > FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:180: Status = RETURN_ABORTED; // > In case ShellGetFileInfo() failed > LibC/Uefi/Devices/UefiShell/daShell.c:184: Status = ShellSetFileInfo( > FileHandle, FileInfo); > LibC/Uefi/Devices/UefiShell/daShell.c:187: > (void)ShellCloseFile(&FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:199:/** EFI Shell specific > operations for reading from a file. > LibC/Uefi/Devices/UefiShell/daShell.c:212:da_ShellRead( > LibC/Uefi/Devices/UefiShell/daShell.c:224: BufSize = > (ssize_t)da_ShellSeek(filp, *offset, SEEK_SET); > LibC/Uefi/Devices/UefiShell/daShell.c:233: Status = ShellReadFile( > FileHandle, (UINTN *)&BufSize, Buffer); > LibC/Uefi/Devices/UefiShell/daShell.c:250:/** EFI Shell specific > operations for writing to a file. > LibC/Uefi/Devices/UefiShell/daShell.c:263:da_ShellWrite( > LibC/Uefi/Devices/UefiShell/daShell.c:286: BufSize = > (ssize_t)da_ShellSeek(filp, Position, How); > LibC/Uefi/Devices/UefiShell/daShell.c:295: Status = ShellWriteFile( > FileHandle, (UINTN *)&BufSize, (void *)Buffer); > LibC/Uefi/Devices/UefiShell/daShell.c:312:/** EFI Shell specific > operations for getting information about an open file. > LibC/Uefi/Devices/UefiShell/daShell.c:324:da_ShellStat( > LibC/Uefi/Devices/UefiShell/daShell.c:338: FileInfo = > ShellGetFileInfo( FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:374:/** EFI Shell specific > operations for low-level control of a file or device. > LibC/Uefi/Devices/UefiShell/daShell.c:386:da_ShellIoctl( > LibC/Uefi/Devices/UefiShell/daShell.c:399: FileInfo = > ShellGetFileInfo( FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:427: Status = > ShellSetFileInfo(FileHandle, FileInfo); > LibC/Uefi/Devices/UefiShell/daShell.c:446:/** EFI Shell specific > operations for opening a file or directory. > LibC/Uefi/Devices/UefiShell/daShell.c:459:da_ShellOpen( > LibC/Uefi/Devices/UefiShell/daShell.c:462: int DevInstance, > /* Not > used by Shell */ > LibC/Uefi/Devices/UefiShell/daShell.c:511: !!!!!!!!! Change this to > use > ShellSetFileInfo() to actually truncate the file > LibC/Uefi/Devices/UefiShell/daShell.c:516: Status = ShellIsFile( WPath ); > LibC/Uefi/Devices/UefiShell/daShell.c:544: // Call the EFI Shell's > Open function > LibC/Uefi/Devices/UefiShell/daShell.c:545: Status = ShellOpenFileByName( > WPath, &FileHandle, OpenMode, Attributes); > LibC/Uefi/Devices/UefiShell/daShell.c:592:da_ShellPoll( > LibC/Uefi/Devices/UefiShell/daShell.c:622:/** EFI Shell specific > operations for renaming a file. > LibC/Uefi/Devices/UefiShell/daShell.c:633:da_ShellRename( > LibC/Uefi/Devices/UefiShell/daShell.c:653: OldFileInfo = > ShellGetFileInfo( > FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:668: Status = > ShellSetFileInfo(FileHandle, NewFileInfo); > LibC/Uefi/Devices/UefiShell/daShell.c:695:/** EFI Shell specific > operations for deleting directories. > LibC/Uefi/Devices/UefiShell/daShell.c:705:da_ShellRmdir( > LibC/Uefi/Devices/UefiShell/daShell.c:721: FileInfo = > ShellGetFileInfo(FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:727: FreePool(FileInfo); // Free > up > the buffer from ShellGetFileInfo() > LibC/Uefi/Devices/UefiShell/daShell.c:729: Status = ShellFindFirstFile( > FileHandle, &FileInfo); > LibC/Uefi/Devices/UefiShell/daShell.c:733: Status = > ShellFindNextFile( > FileHandle, FileInfo, &NoFile); > LibC/Uefi/Devices/UefiShell/daShell.c:744: /* Count == 99 and > FileInfo is > allocated if ShellFindNextFile failed. > LibC/Uefi/Devices/UefiShell/daShell.c:745: ShellFindNextFile has > freed > FileInfo itself if it sets NoFile TRUE. > LibC/Uefi/Devices/UefiShell/daShell.c:748: free(FileInfo); // Free > buffer > from ShellFindFirstFile() > LibC/Uefi/Devices/UefiShell/daShell.c:752: Status = ShellDeleteFile( > &FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:775: ShellCloseFile( > &FileHandle); > LibC/Uefi/Devices/UefiShell/daShell.c:783:/** Construct an instance of > the abstract Shell device. > LibC/Uefi/Devices/UefiShell/daShell.c:797:__ctor_DevShell( > LibC/Uefi/Devices/UefiShell/daShell.c:814: Stream->Abstraction.fo_close = > &da_ShellClose; > LibC/Uefi/Devices/UefiShell/daShell.c:815: Stream->Abstraction.fo_read = > &da_ShellRead; > LibC/Uefi/Devices/UefiShell/daShell.c:816: Stream->Abstraction.fo_write = > &da_ShellWrite; > LibC/Uefi/Devices/UefiShell/daShell.c:818: Stream->Abstraction.fo_poll = > &da_ShellPoll; > LibC/Uefi/Devices/UefiShell/daShell.c:820: Stream->Abstraction.fo_stat = > &da_ShellStat; > LibC/Uefi/Devices/UefiShell/daShell.c:821: Stream->Abstraction.fo_ioctl = > &da_ShellIoctl; > LibC/Uefi/Devices/UefiShell/daShell.c:822: > Stream->Abstraction.fo_delete = &da_ShellDelete; > LibC/Uefi/Devices/UefiShell/daShell.c:823: > Stream->Abstraction.fo_rmdir = &da_ShellRmdir; > LibC/Uefi/Devices/UefiShell/daShell.c:824: > Stream->Abstraction.fo_mkdir = &da_ShellMkdir; > LibC/Uefi/Devices/UefiShell/daShell.c:825: > Stream->Abstraction.fo_rename = &da_ShellRename; > LibC/Uefi/Devices/UefiShell/daShell.c:826: Stream->Abstraction.fo_lseek = > &da_ShellSeek; > LibC/Uefi/Devices/UefiShell/daShell.c:828: Node = __DevRegister(NULL, > NULL, &da_ShellOpen, Stream, 1, sizeof(GenericInstance), O_RDWR); > LibC/Uefi/Devices/UefiShell/daShell.c:835:/** Destructor for > previously constructed EFI Shell device instances. > LibC/Uefi/Devices/UefiShell/daShell.c:844:__dtor_DevShell( > LibC/Uefi/SysCalls.c:20:#include <Library/ShellLib.h> > LibC/Uefi/SysCalls.c:605: The EFI ShellOpenFileByName() function is used to > perform the low-level > LibC/Uefi/SysCalls.c:618: The only valid flag combinations for > ShellOpenFileByName() are: > LibC/Uefi/SysCalls.c:990: The fstat() function is implemented using the > ShellGetFileInfo() > LibC/Uefi/SysCalls.c:1314: Cwd = ShellGetCurrentDir(NULL); > LibC/Uefi/SysCalls.c:1338: - EPERM: Operation not supported > with > this Shell version. > LibC/Uefi/SysCalls.c:1351: /* Old Shell does not support Set Current > Dir. */ > LibC/Uefi/SysCalls.c:1352: if(gEfiShellProtocol != NULL) { > LibC/Uefi/SysCalls.c:1353: Cwd = ShellGetCurrentDir(NULL); > LibC/Uefi/SysCalls.c:1362: Status = gEfiShellProtocol->SetCurDir(NULL, > UnicodePath); > PosixLib/GetPass/GetPass.c:14:#include <Library/ShellLib.h> > PosixLib/GetPass/GetPass.c:30: ReturnString = > ShellFileHandleReturnLine (gEfiShellParametersProtocol->StdIn, > &Ascii); > > Thanks, > > Andrew Fish > > > > From: Michael Zimmermann [mailto:[email protected]] > Sent: Wednesday, July 06, 2016 1:32 PM > To: Carsey, Jaben > <[email protected]<mailto:[email protected]>> > Cc: Andrew Fish <[email protected]<mailto:[email protected]>>; Marvin > Häuser > <[email protected]<mailto:[email protected]>>; > [email protected]<mailto:[email protected]>; edk2- > [email protected]<mailto:[email protected]> > Subject: Re: [edk2] StdLib usage for drivers? > Importance: High > > > You can have different libs and different flags per driver. You use > > the {} > syntax on the INF file in the components section. This is already > done in the Shell.DSC to control PCDs separating the ShellLib when > used for the shell compared to ShellLib used for shell applications. > > Thanks for clearing that up. Looks like I totally misunderstood how > the {} syntax works. > Does this only work for Applications/Drivers or for Libraries too so > you don't have to do this for every driver? > > I prefer fixing the behavior at build time over implementing a > fallback because it would be weird if the application behaves totally > different depending on if you start it via the BDS or from the Shell. > > Thanks > Michael > > On Wed, Jul 6, 2016 at 10:20 PM, Carsey, Jaben > <[email protected]<mailto:[email protected]>> wrote: > Andrew, > > Note: The ShellLib is not part of the shell spec. The ShellProtocol > and ShellParametersProtocol are. The current ShellLib is designed to > facilitate porting and writing of apps for the shell. The porting > will become obsolete over time as we encounter fewer and fewer EDKShell apps. > > That does’t mean that your conclusion is wrong. We could make a > different ShellLib that is not actually dependent on the shell. > > > Michael, > > You can have different libs and different flags per driver. You use > the {} syntax on the INF file in the components section. This is > already done in the Shell.DSC to control PCDs separating the ShellLib > when used for the shell compared to ShellLib used for shell applications. > > > -Jaben > > > > From: Michael Zimmermann > [mailto:[email protected]<mailto:[email protected]>] > Sent: Wednesday, July 06, 2016 1:13 PM > To: Andrew Fish <[email protected]<mailto:[email protected]>> > Cc: Marvin Häuser > <[email protected]<mailto:[email protected]>>; > [email protected]<mailto:[email protected]>; Carsey, Jaben > <[email protected]<mailto:[email protected]>>; edk2- > [email protected]<mailto:[email protected]> > Subject: Re: [edk2] StdLib usage for drivers? > Importance: High > > Andrew, > > the problem with multiple library instances is that this does only > work globally and it gets in your way if you need different versions of a > dependent library. > > In our case, Applications/Drivers only depend on LibC, an LibC then > depends on ShellLib which means we'd have to create another LibC > instance which depends on another version of ShellLib. > > In other words: you can't use the same Library with different build > options in different drivers built by the same DSC. You'd have to > create a renamed .inf with different build options which you can't do > because your driver doesn't depend directly on that lib. > > Thanks > Michael > > On Wed, Jul 6, 2016 at 9:55 PM, Andrew Fish > <[email protected]<mailto:[email protected]>> wrote: > > On Jul 6, 2016, at 12:44 PM, Michael Zimmermann > <[email protected]<mailto:[email protected]>> wrote: > > Andrew, > > sry for not reasing the Shell Spec but I think you can answer this faster. > Does the Spec prevent implementing such a 'pure-EFI' fallback by > default so we can use the same ShellLib globally? > > > Michael, > > If I remember correctly the Shell Spec specifies how the shell > functions and what protocols it produces that other code can depend on. > > and follow-up question: Libraries are not compiled multiple times > right? so If I would specify additional CFLAGs these would only be > used to build your package and not for the libraríes you are using right? > > > The edk2 has the concept of library instances. The DSC file for the > platform picks the instance of the library for the Module Type. > Basically ShellLib.h would be the public API and ShellLib is the > library class. The library class is the public API and it is names in > the [Defines] section of the libraries INF file via LIBRARY_CLASS =. > The build system is smart enough to only build the libraries that are > actually being used. > > For example this would be the line in the DSC: > ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf > > And you could change it to: > ShellLib | AltPathToUefiShellLib/AltUefiShellLib.inf > > The upside to all this is the same reason we introduced the concept of > library classes in the 1st place, you can change the behavior of the > StdLib without modifying any of the code in the standard lib. This > would be a good way to experiment and if you get it working I guess it > could get added to the StdLib at some point as an alternate way to build it. > > Thanks, > > Andrew Fish > > If that's correct then we should stay away from changing ShellLib's > behavior using cflags in your DSC because it would prevent building > both shell and efi users of ShellLib with one DSC file. > > Thanks, > Michael > > On Wed, Jul 6, 2016 at 9:25 PM, Andrew Fish > <[email protected]<mailto:[email protected]>> wrote: > > > On Jul 4, 2016, at 11:17 AM, Marvin Häuser > <[email protected]<mailto:[email protected]>> > wrote: > > > > Daryl, Jaben, > > > > As you are the package maintainers of StdLib, could you please > > comment > on the situation? > > If modifications to have StdLib working for drivers are welcome, I > > would > offer my help in cleaning up the existing stuff and/or write my own > patches, though of course there is little point if there is no > reaction from the reviewers. > > If it is of any interest, I want to write a shim library for > > Capstone and would > prefer not to have three copies of Std functions in my tree (StdLib, > CryptoPkg > (SSL) and Capstone), but rather an improved StdLib that works for all. > > > > Thanks to those who have offered alternative solutions, but I prefer > > to keep it ‚clean‘ and have the libraries shipping with EDK2 work. > > :) > > > > Marvin, > > It looks like the StdLib has a dependency on the ShellLib and ShellCEntryLib. > One option would be to implement a new instance of the ShellLib and > the ShellCEntryLib that don't depend on the Shell. You can get a > template of how to do file operations from > here:https://github.com/tianocore/edk2/blob/master/EmbeddedPkg/Librar > y/EfiFileLib/EfiFileLib.c > > You would have a couple of options. You good go with the EfiFileLib > volume synatax, you could just do pure EFI (unclear how to specify a > volume (driver letter)). You could also just add code to fallback if > you can't find the shell protocols to due more pure EFI stuff. That > way you don't need to modify the StdLib just how you build the StdLib from > the DSC. > > For example you could implement the functions in the ShellLib that the > StdLib requires and use something like the EfiFileLib to make it > easier. I think ShellCEntryLib would just be a copy > ofhttps://github.com/tianocore/edk2/tree/master/MdePkg/Library/UefiAp > plicationEntryPoint > > Thanks, > > Andrew Fish > > > Regards, > > Marvin. > > > > From: Michael Zimmermann > > [mailto:[email protected]<mailto:[email protected]>] > > Sent: Thursday, June 23, 2016 5:32 AM > > To: Marvin Häuser > > <[email protected]<mailto:[email protected]>> > > Cc: [email protected]<mailto:[email protected]>; > > [email protected]<mailto:[email protected]> > > Subject: Re: [edk2] StdLib usage for drivers? > > > > well for the patch to go upstream it would have to get improved a lot. > > I've tried to implement this in a way that doesn't need a different > > dsc but > the problem is that ShellLib's constructor ASSERT's if it can't find > the shell protocol and removing that would probably be against the spec's. > > > > Also it appears that the StdLib maintainers are kinda busy because > > most of > the StdLib patches I've sent to this mailing list didn't get reviewed. > > > > Thanks > > Michael > > > > On Wed, Jun 22, 2016 at 10:37 PM, Marvin Häuser > <[email protected]<mailto:[email protected]><ma > ilto:[email protected]<mailto:[email protected]>> > > wrote: > > Hey Michael, > > > > Thank you for your input! This looks interesting. > > Maybe it would be a good idea to provide the libraries that depend > > on Shell (in master) with functions that call ASSERT (FALSE); for > > drivers? I do not need file I/O, so I think your modifications might > > work out well for me. Would be very nice of course if such changes > > found their way upstream. :) > > > > And thank you very much for your comment as well, Andrew! It makes > sense that StdLib is primarily targeted at porting console > applications to UEFI Shell. > > > > Regards, > > Marvin. > > > > From: Michael Zimmermann > > > [mailto:[email protected]<mailto:[email protected]><ma > il > > to:[email protected]<mailto:[email protected]>>] > > Sent: Wednesday, June 22, 2016 10:28 PM > > To: Marvin H?user > > > <[email protected]<mailto:[email protected]><ma > ilto: > > [email protected]<mailto:[email protected]>>> > > Cc: > > [email protected]<mailto:[email protected]><mailto:edk2- > > de [email protected]<mailto:[email protected]>> > > Subject: Re: [edk2] StdLib usage for drivers? > > > > In my fork of edk2 I've added support for using StdLib without the Shell. > > It's quite hacky(setenv/getenv are stubs, no File IO and maybe other > > things > hidden by linker GC and me not using all features). > > > > But depending on which StdLib features you need this can work pretty > good. > > > > here's the commit that does the magic: > > > https://github.com/efidroid/edk2/commit/bf7a296718486bafaf774ea8bcf187 > > c162c3c167 > > > > and this is how you convert a Shell project to a NonShell one: > > > https://github.com/efidroid/uefi_apps_EFIDroidUi/commit/23f0fa08108b8f > > 852564fae733c6a7bce62e2070 > > > > as you can see it works by using StdLib with different > > libraries/cflags so you > have to compile your driver separately if there are other modules > which need the normal StdLib. > > > > Thanks > > Michael > > > > On Wed, Jun 22, 2016 at 9:38 PM, Marvin H?user > <[email protected]<mailto:[email protected]><ma > ilto:[email protected]<mailto:[email protected]>> > <mailto:[email protected]<mailto:[email protected] > m><mailto:[email protected]<mailto:Marvin.Haeuser@outlook. > com>>>> wrote: > > Dear EDK2 developers, > > > > For an experimental project, I'm currently attempting to write a > > library > wrapper for the disassembler library 'Capstone' in a similar manner to > CryptoPkg's OpensslLib. As most C libraries, it also depends on the > standard headers, which are not provided by 'stock' EDK2. My first > guess has been to use StdLib, though its description states: > > 'Due to the execution environment built by the StdLib component, > execution as a UEFI driver can cause system stability issues.' > > > > Inspecting OpensslLib I discovered that CryptoPkg deploys its own > > include > files for StdLib. Though, from your experience, what are the issues > with using StdLibPkg with DXE/UEFI drivers? It might be nice to reduce > duplicate code, though I honestly don't know anything about StdLibPkg > and its implementation and would be thankful for some insight on that manner. > > > > Thank you in advance for your time! > > > > Regards, > > Marvin. > > _______________________________________________ > > edk2-devel mailing list > > [email protected]<mailto:[email protected]><mailto:edk2- > > de > > [email protected]<mailto:[email protected]>><mailto:edk2-devel@ > > li > > sts.01.org<mailto:[email protected]><mailto:[email protected]. > > org<mailto:[email protected]>>> > > https://lists.01.org/mailman/listinfo/edk2-devel > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected]<mailto:[email protected]><mailto:edk2- > > de [email protected]<mailto:[email protected]>> > > https://lists.01.org/mailman/listinfo/edk2-devel > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected]<mailto:[email protected]> > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

