On 11/23/16 21:01, Michael Zimmermann wrote: > Laszlo, > > can you explain the problems with putting GPL code in the fdf?
No. I'm not a lawyer. I just repeated what I heard / read elsewhere, and provided a link. Personally I wouldn't try distributing such combinations, just to be on the safe side. For work, I would contact RH Legal if I wanted to to this, and follow their instructions. > afaik every efi file is like a small self-contained application and > shouldn't the UEFI API's be excluded from derived work like the linux > kernel's system call table? No clue. :) Thanks Laszlo > On Wed, Nov 23, 2016 at 8:50 PM, Laszlo Ersek <ler...@redhat.com> wrote: >> On 11/22/16 22:31, Rod Smith wrote: >>> On 11/22/2016 01:25 PM, Pete Batard wrote: >>>> On 2016.11.22 17:16, Marcin Wojtas wrote: >>>>> There's no GRUB, platform simply boots to the Shell. >>>> >>>> I think there may be some confusion. >>>> >>>> All the drivers we linked you to are pure UEFI drivers. It doesn't >>>> matter if they were a port from GRUB or something else, the code was >>>> converted to work as a standalone UEFI driver. Especially you don't need >>>> to have GRUB running or anything. You can just use the "load" command in >>>> the shell to load the driver, and then access the file system. >>>> >>>> I believe you should be able to download any of the ext binary drivers >>>> mentioned and use them in your shell right away to access your file >>>> system from it. >>> >>> Yes, but it sounds like Marcin may want to embed the ext4fs driver in a >>> custom EFI build. AFAIK, none of the drivers in question were designed >>> with that in mind; however, the VirtualBox project has incorporated >>> ISO-9660 and HFS+ drivers, both of which are built on the same framework >>> (rEFIt's) as rEFInd's drivers, into its own firmware. Thus, Marcin might >>> be able to look at the VirtualBox code and use whatever techniques or >>> glue it uses to incorporate something else. (I can't point to specific >>> files, though.) The rEFInd drivers might be easiest to build in this >>> way, but that's just a guess. >> >> Any valid EFI binary can be built into edk2 platforms easily. As an example, >> I recommend looking at >> >> EdkShellBinPkg/FullShell/FullShell.inf >> >> and the following portions from OvmfPkg/OvmfPkgX64.fdf: >> >> INF RuleOverride = BINARY EdkShellBinPkg/FullShell/FullShell.inf >> ... >> >> [Rule.Common.UEFI_DRIVER.BINARY] >> FILE DRIVER = $(NAMED_GUID) { >> DXE_DEPEX DXE_DEPEX Optional |.depex >> PE32 PE32 |.efi >> UI STRING="$(MODULE_NAME)" Optional >> VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) >> } >> [Rule.Common.UEFI_APPLICATION.BINARY] >> FILE APPLICATION = $(NAMED_GUID) { >> PE32 PE32 |.efi >> UI STRING="$(MODULE_NAME)" Optional >> VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) >> } >> >>> >>> Note, however, that all of the drivers referenced so far in this thread >>> are licensed under the GPL. Thus, building an EFI in this way would >>> cause the EFI as a whole to be GPL-licensed. >> >> Yes. >> >> Also, as far as I'm aware, OpenSSL and GPL don't mix, so a firmware binary >> that combined edk2's OpenSSL-based Secure Boot stack and GPL drivers might >> be undistributable. (It would be fine for in-house use.) >> >> https://people.gnome.org/~markmc/openssl-and-the-gpl.html >> >> There's another option (and while it requires initial setup on the >> end-user's side, it doesn't require constant fiddling): copy the >> stand-alone, GPL-licensed UEFI_DRIVER binary to a small, separate VFAT >> filesystem, then create a Driver#### option that points to it. >> >> (At least with edk2 and OVMF, the driver options are dispatched between >> BeforeConsole and AfterConsole, and OVMF's AfterConsole calls >> EfiBootManagerConnectAll(). The result is that filesystems recognized by the >> drivers loaded from the small VFAT partition would all be bound, and would >> become available for booting off of.) >> >> This VFAT + Driver#### setup could even be done by customized OS installers, >> without user interaction. >> >> Now I understand that the point might be to eliminate a VFAT partition >> altogether, but after the initial driver installation, it could become >> read-only from the OS runtime POV as well, and the real boot loader stuff >> could reside on ext2. >> >> Separately, a small note on ext4 (because you mention it above). I seem to >> recall a filesystem expert colleague of mine advise *against* using >> journaled filesystems for booting with e.g. grub2. The argument goes (if I >> recall right), XFS is considered to be in clean state if the data has made >> it to the final location *or* the persistent journal. When you cleanly >> unmount (or remount r/o) and shut down, the journal will be flushed to the >> final location, so a boot loader that doesn't know about the journal will >> read consistent data. However, if you crash *without* data loss, then part >> of the data might be in the journal only, and only clients that can read the >> journal will see consistent data. >> >>> This might or might not be >>> an issue, depending on what the point of the exercise is. >>> >>> Of course, a standalone driver might be perfectly acceptable, too. I've >>> seen options in some EFIs to load drivers at start time, but I've never >>> gotten them to work. (I haven't tried very hard.) If nothing else, a >>> small driver-loading program could be written and set as the first boot >>> option. >> >> Newer firmware might also support SysPrep#### options for such applications >> (although firmware that supports SysPrep#### would arguably get Driver#### >> right as well). >> >> Invoking the same logic / app from a regular boot option, and exiting with >> success, might or might not chain to the next boot option automatically. For >> example, in "MdeModulePkg/Universal/BdsDxe/BdsEntry.c", edk2 has >> >> // >> // If the boot via Boot#### returns with a status of EFI_SUCCESS, >> platform firmware >> // supports boot manager menu, and if firmware is configured to boot in >> an >> // interactive mode, the boot manager will stop processing the BootOrder >> variable and >> // present a boot manager menu to the user. >> // >> >> I guess invariably exiting with failure could ensure chaining. >> >>> >>> Marcin wrote: >>> >>>> I also found this: >>>> https://sourceforge.net/p/cloverefiboot/code/HEAD/tree/FileSystems/VBoxFsDxe/ >>> >>> FWIW, that's a fork of the rEFInd code. I'd not seen it before now; the >>> Clover developers haven't bothered to upstream their changes. (I >>> maintain rEFInd.) >>> >>> It's still not clear to me why you want this driver, Marcin. If you want >>> to load a Linux kernel directly, without using GRUB, rEFInd, or some >>> other tool, you can simply put the kernel(s) on a FAT filesystem. >> >> Yes, if the kernel was built with the EFI stub, it can be launched as a UEFI >> application. >> >> Furthermore, arm and arm64 kernels parse the "initrd=..." command line >> parameter in the EFI stub, and can load the initrd from the same filesystem >> (using the UEFI drivers) where the kernel image was loaded from. The >> simplest (maybe only?) use case is to provide just a filename (no pathname >> separators) with "initrd=", and then the file will be loaded from the same >> directory as the kernel, IIRC. >> >> This enables a development style where one >> - sets up one boot option, pointing to the kernel image (with the EFI stub) >> as the binary to launch, >> - stores "initrd=..." in the boot option's LoadOptions field, >> - boots the system, modifies and rebuilds the kernel, >> - installs the kernel and the initrd in the exact same spot as before (under >> the same pathnames on the ESP), >> - reboots. >> >>> This >>> is a common approach among Arch Linux users; they mount the ESP at /boot >>> and it works pretty well. Some distributions assume that /boot supports >>> links or other features that aren't available with FAT, though, so maybe >>> this wouldn't work as well for you, but it's worth considering. >>> >> >> Thanks >> Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel