On Fri, Mar 27, 2020 at 07:33:24PM +0200, Nandor Han wrote: > On 2020-03-27 17:11, Zach Booth wrote: > >On Fri, Mar 27, 2020 at 3:29 AM Nandor Han <[email protected]> wrote: > >> > >>FIT format is very versatile allowing various combination of booting > >>sequences. In the same time different U-Boot boot stages can use FIT > >>blobs to pack various binaries (e.g. SPL supports reading U-Boot from a > >>FIT blob). Because of the allowed level of customization, the generation > >>of a FIT blob using a fixed image tree source, becomes challenging and > >>increase the level of complexity where different configurations and > >>combinations are needed. > >> > >>This bbclass will know how to generate a FIT blob, leaving the mechanics > >>of the process (dependencies, task order...) to be handled by the users > >>of the bbclass. In the same time will allow to separate the knowledge of > >>the FIT format leaving the user code cleaner and more readable. > >> > >>Signed-off-by: Nandor Han <[email protected]> > > > >This class looks very useful, but I did have a question. How would you > >account for creating nodes dynamically? One use case of this would be > >adding a DT node for each reference in KERNEL_DEVICETREE. Would that > >functionality be expected to go in the recipe including this class or > >the class itself? > > > > Thanks Zack for feedback. Like I mentioned in one of Rickard's > answer, I'm planning to update the `kernel-fitimage.bbclass` to use > this class. > > In my local repo I have already a class that does what you're saying. > > e.g > ``` > ... > 24 python do_generate_fit_image() { > 25 import os.path > 26 > 27 device_trees = (d.getVar("KERNEL_DEVICETREE").split()) > 28 kernel_key_path = > '{path}'.format(path=d.getVar("SECURITY_DIR_KEYS_RD") or "") > 29 conf_signature = (d.getVar("CONF_NODE_CONF1") or "") > 30 image_name = "" > 31 mkimage_opts = "" > 32 > 33 for dtb in device_trees: > 34 d.setVarFlag("IMAGE_NODE_FDT", "data", > '/incbin/("./arch/{arch}/boot/dts/{dtb}")'.format( > 35 arch=d.getVar("ARCH"), dtb=dtb)) > 36 d.setVarFlag("IMAGE_NODE_FDT", "description", dtb) > 37 > 38 if os.path.exists(kernel_key_path): > 39 image_name = > "kernel-{dtb_name}{suffix}".format(dtb_name=os.path.splitext(dtb)[0], > suffix=".rdkeys") > 40 mkimage_opts = d.getVar("FIT_IMAGE_MKIMAGE_OPTS_SIGNED") > 41 d.setVar("FIT_IMAGE_UBOOT_MKIMAGE_OPTS", ("-k {key} > -r {extra}".format( > 42 key=kernel_key_path, extra=mkimage_opts))) > 43 generate_fit_image(image_name, d) > 44 > 45 if not conf_signature: > 46 d.delVarFlag("CONF_NODE_CONF1", "signature") > 47 > 48 mkimage_opts = d.getVar("FIT_IMAGE_MKIMAGE_OPTS_UNSIGNED") > 49 d.setVar("FIT_IMAGE_UBOOT_MKIMAGE_OPTS", > "{extra}".format(extra=mkimage_opts)) > 50 image_name = > "kernel-{dtb_name}{suffix}".format(dtb_name=os.path.splitext(dtb)[0], > suffix=".unsigned") > 51 generate_fit_image(image_name, d) > 52 > 53 if not conf_signature: > 54 d.setVarFlag("CONF_NODE_CONF1", "signature", > conf_signature) > 55 } > ... > ``` > > The code above will generate a separate FIT blob for every device > tree declared in KERNEL_DEVICETREE. However this functionality
So, no multiple device trees in a single FIT image? No multiple configurations, ramdisks, etc? > overlaps with `kernel-fitimage` and my target is to keep this class > as simple as possible and refactor `kernel-fitimage` to use the > `fit_image` class. The code above will go in `kernel-fitimage`. > > Later on I'm planning to add a different class that can be use to > generate U-Boot FIT blobs, which can be used by SPL. > > So this is only the first step :) > > >Thanks, > >Zach > > > > <snip> > > Nandor >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#136820): https://lists.openembedded.org/g/openembedded-core/message/136820 Mute This Topic: https://lists.openembedded.org/mt/72583032/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
