I'm sorry, ofc it is supported, it was just some size error.(my fault)

Thanks
Michael

On Thu, Jul 21, 2016 at 3:51 AM, Gao, Liming <[email protected]> wrote:

> Michael:
>
>  I have no comments on your patch. I am curious what build error when you
> specify BlockSize.
>
>
>
> Thanks
>
> Liming
>
> *From:* edk2-devel [mailto:[email protected]] *On Behalf Of
> *Michael Zimmermann
> *Sent:* Wednesday, July 20, 2016 11:57 PM
> *To:* Gao, Liming <[email protected]>
> *Cc:* [email protected] <[email protected]>; Andrew Fish <
> [email protected]>
> *Subject:* Re: [edk2] Generated *.FV is bigger than it's contents
>
>
>
> > FV also supports BlockSize and NumBlocks. You can specify them to other
>
> value, for example BlockSize = 0x8000. If NumBlocks is not specified, GenFv
> will calculate the required FV size and divide BlockSize to get NumBlocks.
> It does not, It gives me an build error. I didn't check the FDF spec, but
> edk2's FDF parser doesn't support it from what I can see in the source
> code.
> For me it doesn't matter though because I don't think I have to set the
> size of the FV
>
> > If your purpose is to generate FV image only, you can remove FD section.
> The required Flash PCD can be set to its value in [Defines] section of FDF
> file. For example:
> Why didn't I see this solution? too simple :P thx.
>
> so, I currently have this (working) patch to generate the small FV and
> making the FD/FV drivers happy. Any suggestions on that or does it look
> good to you?
>
> Thanks
> Michael
>
> =================================
>
> diff --git a/LittleKernelPkg.fdf b/LittleKernelPkg.fdf
> index 4de69e1..0ad9756 100644
> --- a/LittleKernelPkg.fdf
> +++ b/LittleKernelPkg.fdf
> @@ -26,35 +26,10 @@
>
> [Defines]
> !include $(WORKSPACE)/Build/EFIDROID/LittleKernelPkg.fdf.inc
> -
> -[FD.LittleKernelPkg_EFI]
> -BaseAddress = $(FD_BASE)|gArmTokenSpaceGuid.PcdFdBaseAddress # The base
> address of the Firmware in NOR Flash.
> -Size = 0x00200000|gArmTokenSpaceGuid.PcdFdSize # The size
> in bytes of the FLASH Device
> -ErasePolarity = 1
> -
> -# This one is tricky, it must be: BlockSize * NumBlocks = Size
> -BlockSize = 0x00001000
> -NumBlocks = 0x200
> -
> -0x00000000|0x00200000
> -gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
> -FV = FVMAIN_COMPACT
> +SET gArmTokenSpaceGuid.PcdFdBaseAddress = $(FD_BASE)
> +SET gArmTokenSpaceGuid.PcdFdSize = 0x00400000
> +SET gArmTokenSpaceGuid.PcdFvBaseAddress = $(FD_BASE)
> +SET gArmTokenSpaceGuid.PcdFvSize = 0x00400000
>
>
>
> ################################################################################
> @@ -189,6 +164,7 @@ FvNameGuid =
> 411ffc75-2138-44b9-874c-d2c91fa78e91
> }
>
> [FV.FVMAIN_COMPACT]
> +FvBaseAddress = $(FD_BASE)
> FvAlignment = 8
> ERASE_POLARITY = 1
> MEMORY_MAPPED = TRUE
>
> On Wed, Jul 20, 2016 at 5:27 PM, Gao, Liming wrote:
>
> > Michael:
> > FV also supports BlockSize and NumBlocks. You can specify them to other
> > value, for example BlockSize = 0x8000. If NumBlocks is not specified,
> GenFv
> > will calculate the required FV size and divide BlockSize to get
> NumBlocks.
> >
> > If your purpose is to generate FV image only, you can remove FD
> > section. The required Flash PCD can be set to its value in [Defines]
> > section of FDF file. For example:
> >
> > [Defines]
> > SET gArmTokenSpaceGuid.FvMainCompactBaseAddress = 0xFFF00000
> >
> > [FV.FvMainCompact]
> > BlockSize = 0x8000
> > NumBlocks = 0x80
> > FvBaseAddress = 0xFFC00000
> > ...
> >
> > Thanks
> > Liming
> > From: edk2-devel [mailto:[email protected]
> <[email protected]>] On Behalf Of
> > Michael Zimmermann
> > Sent: Tuesday, July 19, 2016 2:20 PM
> > To: Andrew Fish
> > Cc: [email protected]
> > Subject: Re: [edk2] Generated *.FV is bigger than it's contents
> >
> > ok this is what's happening (in comparison to keeping FVMAIN_COMPACT in
> the
> > FD):
> > - the generated FVMAIN_COMPACT doesn't have the options EFI_BASE_ADDRESS
> > and EFI_NUM_BLOCKS, EFI_BLOCK_SIZE is 0x1
> > - this missing base causes FfsRebase to just return(I can actually see
> that
> > in the binary, because there are WAY more differences than just the reset
> > vector)
> > - since FfsRebase returned without doing anything, mArm is still false.
> > This line didn't get executed:
> >
> >
> https://github.com/tianocore/edk2/blob/master/BaseTools/Source/C/GenFv/GenFvInternalLib.c#L3380
> > - since mArm is false, UpdateArmResetVectorIfNeeded is not getting called
> >
> > as you can see there are two problems:
> > - no rebase
> > - caused by that, all the ARM specific handling like the reset vector
> > doesn't happen
> >
> > Now, FV's support the 'FvBaseAddress' flag, after setting that I indeed
> get
> > a relocated binary, with a correct reset vector.
> >
> > so, what I did, apart from setting the base address in the Fv section is
> > removing this line to not include the Fv in the FD:
> > 'FV = FVMAIN_COMPACT'
> > Is this the correct way or is there more to it? I guess I have to keep
> all
> > the surrounding lines for generating the FD because it produces Pcd's
> > like PcdFdBaseAddress which are needed right?
> >
> > Thanks for your help,
> > Michael
> >
> > On Mon, Jul 18, 2016 at 11:54 PM, Andrew Fish wrote:
> >
> > >
> > > On Jul 18, 2016, at 2:25 PM, Michael Zimmermann
> > > wrote:
> > >
> > > If I do that the file is as small as possible(yay), but not bootable
> > > anymore, i.e. the first 4 bytes are 0 instead of the instruction which
> > > jumps past the DOS header.
> > >
> > >
> > > The 1st 16-bytes of the FV header are defined to be a zero vector. This
> > > allows space for code that resets low, and is patched by the build
> tools.
> > >
> > >
> > >
> >
> https://github.com/tianocore/edk2/blob/master/BaseTools/Source/C/GenFv/GenFvInternalLib.c#L2050
> > >
> > > It looks like GenFv will patch the start of the FV with a jmp to the
> > > _ModuleEntryPoint (The entry point in the PE/COFF header) of the SEC or
> > > PeiCore if they exist in the FV?
> > >
> > > You can poke around in that area to figure out why the patch did not
> > > happen.
> > >
> > > Thanks,
> > >
> > > Andrew Fish
> > >
> > > Thanks
> > > Michael
> > >
> > > On Mon, Jul 18, 2016 at 11:00 PM, Andrew Fish wrote:
> > >
> > >>
> > >> > On Jul 18, 2016, at 1:42 PM, Michael Zimmermann <
> > >> [email protected]> wrote:
> > >> >
> > >> > > For example This statement in the [FD.MEMFD] section will cause
> this
> > >> region of the FLASH to get padded out if the FV is smaller than
> 0xA00000
> > >> >
> > >> > that seems to be the problem because the Size in the FV header is
> set
> > >> to that value and the file FVMAIN_COMPACT.Fv always has that size.
> > >> >
> > >> > of course I could just make it smaller, but in this case I'd have to
> > >> adjust it to the current size and increase it every time I need more
> > space
> > >> to fix the build error.
> > >> > It would be easier to just be able to remove the 0xFF padding for
> the
> > >> FV, or at least have a clean way to remove it afterwards by external
> > tools.
> > >> >
> > >> > to make things easier I'll link my source here:
> > >> >
> > >>
> >
> https://github.com/efidroid/uefi_edk2packages_LittleKernelPkg/blob/master/LittleKernelPkg.fdf
> > >> <
> > >>
> >
> https://github.com/efidroid/uefi_edk2packages_LittleKernelPkg/blob/master/LittleKernelPkg.fdf
> > >> >
> > >> >
> > >>
> > >> What is the size of the FVMAIN_COMPACT if you don't place it in the
> FD?
> > >>
> > >> Thanks,
> > >>
> > >> Andrew Fish
> > >>
> > >> > Thanks
> > >> > Michael
> > >> >
> > >> >
> > >> > On Mon, Jul 18, 2016 at 10:03 PM, Andrew Fish <mailto:
> <%0b>> >> [email protected]>> wrote:
> > >> >
> > >> > > On Jul 18, 2016, at 9:07 AM, Michael Zimmermann <
> > >> [email protected] > wrote:
> > >> > >
> > >> > >
> > >> > > I don't need/use XIP or relocation(would the latter make a
> > difference
> > >> > > anyway?).
> > >> > >
> > >> > > Also the difference between FD and FV seems to be terminology
> only,
> > >> because
> > >> > > YOURPLATFORM.fd has the same checksum as FVMAIN_COMPACT.Fv.
> > >> > >
> > >> > > What I successfully tested as a workaround is reading
> > >> > > EFI_FV_TAKEN_SIZE from FVMAIN_COMPACT.Fv.map and strip the file to
> > >> that
> > >> > > size.
> > >> > > That seems to work, but I'm not sure if it's exact, because there
> > are
> > >> still
> > >> > > a few 0xff bytes left and I'm not sure if these really are for
> > >> aligning the
> > >> > > size only.
> > >> > >
> > >> >
> > >> > Michael,
> > >> >
> > >> > The FD is a collection of FVs and Data regions output by the build
> > >> system. If all you have is an FV you should just use that. You can
> > reduce
> > >> the padding by setting the BlockSize smaller. The FvAlignment value
> > >> (commonly 16) would be a good value to try. Any padding after that is
> > >> coming from the FD creation:
> > >> >
> > >>
> > https://github.com/tianocore/edk2/blob/master/OvmfPkg/OvmfPkgX64.fdf#L91
> > >>
> > >> >
> > >> >
> > >> > 0x100000|0xA00000
> > >> >
> > >>
> >
> gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize
> > >> > FV = DXEFV
> > >> >
> > >> > For example This statement in the [FD.MEMFD] section will cause this
> > >> region of the FLASH to get padded out if the FV is smaller than
> 0xA00000
> > >> >
> > >> > The FV will start with an EFI_FIRMWARE_VOLUME_HEADER,
> > >>
> >
> https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Pi/PiFirmwareVolume.h#L105
> > >> <
> > >>
> >
> https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Pi/PiFirmwareVolume.h#L105
> > >
> > >> , so you can programmatically figure out how big it is if you need to
> > copy
> > >> it.
> > >> >
> > >> > Thanks,
> > >> >
> > >> > Andrew Fish
> > >> >
> > >> > > Thanks
> > >> > > Michael
> > >> > >
> > >> > > On Mon, Jul 18, 2016 at 5:28 PM, Andrew Fish <[email protected]
> <[email protected]%0b>
> > >> > wrote:
> > >> > >
> > >> > >>
> > >> > >>> On Jul 17, 2016, at 11:02 PM, Michael Zimmermann <
> > >> > >> [email protected] > wrote:
> > >> > >>>
> > >> > >>>
> > >> > >>> Hi,
> > >> > >>>
> > >> > >>> I noticed that the size of YOURPLATFORM.fd always equals the
> size
> > >> > >> specified
> > >> > >>> in your fdf
> > >> > >>> i.e. 4MB for 'Size = 0x00400000|gArmTokenSpaceGuid.PcdFdSize'.
> > >> > >>>
> > >> > >>> I don't know much about the case where this gets flashed to a
> nand
> > >> and
> > >> > >>> executed in place, but when using edk2 on a ARM PrePi device
> with
> > >> edk2
> > >> > >>> loaded into RAM, this looks like a huge waste of storage memory
> > and
> > >> > >> loading
> > >> > >>> time to me.
> > >> > >>>
> > >> > >>> So, is it really important to have multiple MB(depending of you
> fv
> > >> size
> > >> > >>> ofc) of 0xff appended to the firmware or is there a fdf option
> or
> > >> > >>> post-compilation tool to remove this?
> > >> > >>>
> > >> > >>
> > >> > >> The YOURPLATFORM.fd is a Flash Device (.fd) and thus there is an
> > >> > >> assumption it is a fixed size. If you want a flexible size you
> can
> > >> use an
> > >> > >> FV. Are you dependent on relocating the code so it can XIP? Is
> that
> > >> what if
> > >> > >> forcing the use of an FD?
> > >> > >>
> > >> > >> Just trying to figure out if what you are really asking for is
> the
> > >> ability
> > >> > >> to relocate an FV that is only as big as required? Maybe that is
> an
> > >> FD,
> > >> > >> maybe not?
> > >> > >>
> > >> > >> Short term if your FD is just a single FV you can use a PCD to
> know
> > >> the
> > >> > >> size and only copy that much data to the RAM. You would have to
> > >> manually
> > >> > >> pick an FD size that did not waist too much storage.
> > >> > >>
> > >> > >> Thanks,
> > >> > >>
> > >> > >> Andrew Fish
> > >> > >>
> > >> > >>> Thanks
> > >> > >>> Michael
> > >> > >>> _______________________________________________
> > >> > >>> edk2-devel mailing list
> > >> > >>> [email protected]
> > >> > >>>
> > >> > >>
> > >>
> >
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.01.org_mailman_listinfo_edk2-2Ddevel&d=CwICAg&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=4sdzHKz0eU1vXqaUySVmyA&m=Kr0PunsxtwGLmV7IsSEodsro5Wwu2oRxRh1L7fFpt3w&s=FXzJ7wYg-xu4aJ-6YGBqB4GTUNMVu1W9h8mqqf864YQ&e
> =
> > >> <
> > >>
> >
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.01.org_mailman_listinfo_edk2-2Ddevel&d=CwICAg&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=4sdzHKz0eU1vXqaUySVmyA&m=Kr0PunsxtwGLmV7IsSEodsro5Wwu2oRxRh1L7fFpt3w&s=FXzJ7wYg-xu4aJ-6YGBqB4GTUNMVu1W9h8mqqf864YQ&e
> =
> > >> >
> > >> > >>
> > >> > >>
> > >> > > _______________________________________________
> > >> > > edk2-devel mailing list
> > >> > > [email protected]
> > >> > >
> > >>
> >
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.01.org_mailman_listinfo_edk2-2Ddevel&d=CwICAg&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=4sdzHKz0eU1vXqaUySVmyA&m=GBYUQYXoyDqknWeJcI64xlIkHnhnVmabgBV1ABmDeZs&s=QSUxiPKjBWf7bkI3IIL0E8JliL4vuwEWURFyB2oQQ0E&e
> =
> > >> <
> > >>
> >
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.01.org_mailman_listinfo_edk2-2Ddevel&d=CwICAg&c=Hw-EJUFt2_D9PK5csBJ29kRV40HqSDXWTLPyZ6W8u84&r=4sdzHKz0eU1vXqaUySVmyA&m=GBYUQYXoyDqknWeJcI64xlIkHnhnVmabgBV1ABmDeZs&s=QSUxiPKjBWf7bkI3IIL0E8JliL4vuwEWURFyB2oQQ0E&e
> =
> > >> >
> > >> >
> > >> >
> > >>
> > >> _______________________________________________
> > >> 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
> > _______________________________________________
> > 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
>
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to