What I would like would be to completely tame the compilation process, which is too complicated for people that are not firmware developers, maybe taking advantage of those GNU EFI tools which are used to compile ELILO.
This is my guess, because I never had the EFILDR and EFILDR16 images with me. Only the EFILDR20 that Keshav compiled (call it the law of the least effort, or the principle of minimum energy...).
I'm convinced that if you take the first 512 or maybe 4096 bytes of those three files, the rest of the files are byte for byte equal.
Compiled files compressed with tar and (xz -9) as on 13-JUN-2011 , the (DUET_EMUVARIABLE_BUILD.tar.xz)/FV/Efildr20 is same as Efildr20 in EFI_DUET and ditto for FSVARIABLE build.
@migle: All the Efildr files plus the relevant scripts copied into the dir for you to see.
My build process :-
1) Set up symlinks outside (OUTER_DIR) the edk2 and other tianocore git checkout dirs - https://github.com/s.../my_symlinks.sh
2) Then apply https://github.com/s...Makefiles.patch into EDK2 root dir - not all the changes are needed for DuetPkg, some of them are for OvmfPkg (QEMU and VirtualBox UEFI firmware), but those changes are untested.
For now I maintain the patch in the form of a separate git branch keshav_pr in the edk2 git repo so my duet compile script simply checks out that branch before compile, instead of applying the patch like normally needed.
3) Run (OUTER_DIR)/duet_x64_edk2_linux_compile_setup.sh ( https://github.com/s...ompile_setup.sh ) which sources https://github.com/s..._duet_common.sh which in turn sources https://github.com/s...ocore_common.sh .
See the scripts on how the compile process occurs. Important info - I compile in Archlinux x86_64 system with gcc-multilib 4.6 (mostly latest snapshot - Archlinux is bleeding-edge like), and Archlinux uses default python to python3, so i temporarily re symlink python2 into python for the compile process to continue. Also with -Werror compile fails in gcc 4.6, that is removed in CORRECT_WERROR() in tianocore_common.sh .
4) duet_x64_edk2_linux_compile_setup.sh calls http://tianocore.git...ld64.sh;hb=HEAD which automates most of the compile process. No need for mingw or mingw-w64. Although it can also be compiled in Windows with VS2008 or VS2010, I am more comfortable in linux due to the ability to automate the task using bash scripts.
5) DuetPkg/build64.sh simply builds only the FirmwareVolume (DUET_EMUVARIABLE_BUILD.tar.xz)/FV/DUETEFIMAINFV.Fv file (don't know what that means exactly).
DuetPkg/PostBuild.sh ( http://tianocore.git...uild.sh;hb=HEAD ) then creates the actual Efildr files using the pre-compiled ASM Bootsector files from DuetPkg/BootSector/bin ( http://tianocore.git...bc0c4fe;hb=HEAD )
6) DuetPkg/PostBuild.sh also creates the memdisk file i include in the other two repos in github by calling DuetPkg/CreateBootDisk.sh in the very end ( http://tianocore.git...Disk.sh;hb=HEAD ). I also added a https://github.com/s..._memdisk_old.sh file to my scripts to do this separately if the precompiled files are already available which may optionally be called in post_duet_x64_compile.sh (which I will describe later).
I tried to do the same memdisk but with BootDuet instead of edk2's bootsectors in https://github.com/s..._memdisk_new.sh but have not succeeded sop far due to device naming assumptions in srs5694's duet-install which do not work for a superfloppy loop device.
7) If the above compile succeeds and the Efildr files are generated successfully the i manually run https://github.com/s..._x64_compile.sh which copies the files ot the relevant local location of the github repos, commits the changes with the DATE as the commit messages. I push the changes to github manually though.
The main reason sometimes Efildr files are not generated are due to some filesize restriction hardcoded in http://tianocore.git...nPage.c;hb=HEAD (mainly #define EFI_PAGE_BASE_OFFSET_IN_LDR 0x70000 ). This file is called in DuetPkg/PostBuild.sh for X64 firmware alone.
I had to disable some modules in http://tianocore.git...X64.dsc;hb=HEAD (file that includes modules to be compiled) and http://tianocore.git...Pkg.fdf;hb=HEAD (file that defines modules that should go into FV image) . See the UDK_EDK2_DuetPkg_Changes_to_Makefiles.patch patch for the changes I made to those files. If someone know what GenPage exactly does and can circumvent the filesize restriction I can include more modules like floppy (right nor the Efildr file will not recognize a floppy disk drive (hardware) once loaded, this restriction does not apply to loading Efildr from a floppy disk using BootDuet).
For all these scripts checkout https://github.com/s...y_Shell_Scripts . Hope this helps.
Also gnu-efi http://sourceforge.n...ojects/gnu-efi/ headers which ELILO uses, are a very minimal subset of efi-toolkit http://sourceforge.n...tle=EFI_Toolkit project which was active when EDK1 was used. Now EDK2 is one big integrated UEFI development environment which is much more updated and follow the latest Spec version. http://tianocore.git...=StdLib;hb=HEAD is the EDK2 equivalent of efi-toolkit.