[PATCH 4/6] build: Add support to make bootloader images

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Feb 28 07:44:52 UTC 2024


On 28.02.24 06:48, Chris Johns wrote:
> Hi,
> 
> Is this to allow BSP ready output to be created from the build system?

Yes, this is the goal.

> 
> If it is will the details be exported in the pkgconfig file and made available
> for users building applications in a consistent and easy to use way?

Application build systems can query the tool using the RTEMS_MKIMAGE 
package configuration varible, for example:

   pkg-config --variable=RTEMS_MKIMAGE 
${prefix}/lib/pkgconfig/${ARCH}-${BSP_NAME}.pc

If the BSP does not provide a tool, then the variable RTEMS_MKIMAGE is 
set to "false".

It could help to export also EXEEXT and BOOT_IMAGE_EXTENSION in the 
package configuration file. For RTEMS 6, we should have a look how our 
package configuration support can be used to build applications on some 
commonly used build systems. We are currently not able to produce build 
images.

> 
> Is this output created along side the ELF file?

Yes.

> 
> Does this approach handle all BSPs that need this?

The BSP can use Python, so I would say yes.

> 
> Will you be converting all BSPs that need this type of support?

I will add support for the BSPs using U-Boot.

> 
> Thanks
> Chris
> 
> On 28/2/2024 2:15 am, Sebastian Huber wrote:
>> Add a new build item type to provide optional BSP-specific tools to make
>> bootloader images.  The tools are installed as Python scripts in:
>>
>>    ${prefix}/bin/rtems-mkimage-${ARCH}-${BSP_NAME}.py
>>
>> Application build systems can query the tool using the RTEMS_MKIMAGE package
>> configuration varible, for example:
>>
>>    pkg-config --variable=RTEMS_MKIMAGE ${prefix}/lib/pkgconfig/${ARCH}-${BSP_NAME}.pc
>>
>> If the BSP does not provide a tool, then the variable RTEMS_MKIMAGE is set to
>> "false".
>>
>> Update #4272.
>> ---
>>   spec/build/bsps/bspopts.yml              |  2 ++
>>   spec/build/bsps/optpkgmkimage.yml        | 19 ++++++++++
>>   spec/build/bsps/pkgconfig.yml            |  1 +
>>   spec/build/cpukit/cpuopts.yml            |  4 +++
>>   spec/build/cpukit/optbootimageext.yml    | 17 +++++++++
>>   spec/build/cpukit/optbuildbootimages.yml | 16 +++++++++
>>   wscript                                  | 45 ++++++++++++++++++++++--
>>   7 files changed, 102 insertions(+), 2 deletions(-)
>>   create mode 100644 spec/build/bsps/optpkgmkimage.yml
>>   create mode 100644 spec/build/cpukit/optbootimageext.yml
>>   create mode 100644 spec/build/cpukit/optbuildbootimages.yml
>>
>> diff --git a/spec/build/bsps/bspopts.yml b/spec/build/bsps/bspopts.yml
>> index 734292f421..74fe6d17f9 100644
>> --- a/spec/build/bsps/bspopts.yml
>> +++ b/spec/build/bsps/bspopts.yml
>> @@ -33,6 +33,8 @@ links:
>>     uid: optldflagsbsp
>>   - role: build-dependency
>>     uid: optmakelegacy
>> +- role: build-dependency
>> +  uid: optpkgmkimage
>>   - role: build-dependency
>>     uid: optprintexcpt
>>   - role: build-dependency
>> diff --git a/spec/build/bsps/optpkgmkimage.yml b/spec/build/bsps/optpkgmkimage.yml
>> new file mode 100644
>> index 0000000000..00d9a0171f
>> --- /dev/null
>> +++ b/spec/build/bsps/optpkgmkimage.yml
>> @@ -0,0 +1,19 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-string: null
>> +- substitute: null
>> +- env-assign: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: HAVE_MKIMAGE
>> +  value: $${prefix}/bin/rtems-mkimage-${ARCH}-${BSP_NAME}.py
>> +- enabled-by: true
>> +  value: 'false'
>> +description: ''
>> +enabled-by: true
>> +format: '{}'
>> +links: []
>> +name: PKGCONFIG_MKIMAGE
>> +type: build
>> diff --git a/spec/build/bsps/pkgconfig.yml b/spec/build/bsps/pkgconfig.yml
>> index afaffbbf0f..e1cdc9a70e 100644
>> --- a/spec/build/bsps/pkgconfig.yml
>> +++ b/spec/build/bsps/pkgconfig.yml
>> @@ -20,6 +20,7 @@ content: |
>>     RTEMS_MAJOR=${__RTEMS_MAJOR__}
>>     RTEMS_MINOR=${__RTEMS_MINOR__}
>>     RTEMS_REVISION=${__RTEMS_REVISION__}
>> +  RTEMS_MKIMAGE=${PKGCONFIG_MKIMAGE}
>>   
>>     Name: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}
>>     Version: ${RTEMS_VERSION}
>> diff --git a/spec/build/cpukit/cpuopts.yml b/spec/build/cpukit/cpuopts.yml
>> index 1d28ace552..bdf8fc2f66 100644
>> --- a/spec/build/cpukit/cpuopts.yml
>> +++ b/spec/build/cpukit/cpuopts.yml
>> @@ -75,6 +75,10 @@ links:
>>     uid: optcoverageldflags
>>   - role: build-dependency
>>     uid: optnocoverageldflags
>> +- role: build-dependency
>> +  uid: optbootimageext
>> +- role: build-dependency
>> +  uid: optbuildbootimages
>>   - role: build-dependency
>>     uid: optversion
>>   target: cpukit/include/rtems/score/cpuopts.h
>> diff --git a/spec/build/cpukit/optbootimageext.yml b/spec/build/cpukit/optbootimageext.yml
>> new file mode 100644
>> index 0000000000..c9347ffba8
>> --- /dev/null
>> +++ b/spec/build/cpukit/optbootimageext.yml
>> @@ -0,0 +1,17 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-string: null
>> +- env-assign: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: true
>> +  value: .img
>> +description: |
>> +  Defines the file extension of boot images.
>> +enabled-by: true
>> +format: '{}'
>> +links: []
>> +name: BOOT_IMAGE_EXTENSION
>> +type: build
>> diff --git a/spec/build/cpukit/optbuildbootimages.yml b/spec/build/cpukit/optbuildbootimages.yml
>> new file mode 100644
>> index 0000000000..12328b006d
>> --- /dev/null
>> +++ b/spec/build/cpukit/optbuildbootimages.yml
>> @@ -0,0 +1,16 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-boolean: null
>> +- env-enable: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: true
>> +  value: false
>> +description: |
>> +  If this option is enabled, then boot images for the test programs are built.
>> +enabled-by: true
>> +links: []
>> +name: BUILD_BOOT_IMAGES
>> +type: build
>> diff --git a/wscript b/wscript
>> index e43ae8ba3e..c6cfad147a 100755
>> --- a/wscript
>> +++ b/wscript
>> @@ -197,6 +197,15 @@ def make_tar_info_reproducible(info):
>>       return info
>>   
>>   
>> +def make_image(bld, target):
>> +    if not target.endswith(".norun.exe"):
>> +        if bld.env.BUILD_TOOL_MKIMAGE:
>> +            image = os.path.splitext(target)[0] + bld.env.BOOT_IMAGE_EXTENSION
>> +            bld(rule="${BUILD_TOOL_MKIMAGE} ${SRC} ${TGT}",
>> +                source=target,
>> +                target=image)
>> +
>> +
>>   class Item(object):
>>   
>>       def __init__(self, uid, data):
>> @@ -590,6 +599,30 @@ class ConfigFileItem(Item):
>>           self.install_target(bld)
>>   
>>   
>> +class MakeImageItem(Item):
>> +
>> +    def __init__(self, uid, data):
>> +        super(MakeImageItem, self).__init__(uid, data)
>> +
>> +    def do_configure(self, conf, cic):
>> +        content = self.substitute(conf, self.data["content"])
>> +        f = conf.bldnode.make_node(conf.env.VARIANT + "/bin/mkimage.py")
>> +        f.parent.mkdir()
>> +        f.write(content)
>> +        # 493 == 0755
>> +        f.chmod(493)
>> +        file_path = f.abspath()
>> +        conf.env.BUILD_TOOL_MKIMAGE = file_path
>> +        conf.env.append_value("cfg_files", file_path)
>> +        conf.env.append_value("ENABLE", "HAVE_MKIMAGE")
>> +
>> +    def do_build(self, bld, bic):
>> +        bld.install_as("${PREFIX}/bin/rtems-mkimage-" + bld.env.ARCH + "-" +
>> +                       bld.env.BSP_NAME + ".py",
>> +                       "bin/mkimage.py",
>> +                       chmod=493)
>> +
>> +
>>   class ConfigHeaderItem(Item):
>>   
>>       def __init__(self, uid, data):
>> @@ -745,6 +778,7 @@ class TestProgramItem(Item):
>>           )
>>   
>>       def do_build(self, bld, bic):
>> +        target = self.get(bld, "target")
>>           bld(
>>               cflags=bic.cflags,
>>               cppflags=bic.cppflags,
>> @@ -756,9 +790,10 @@ class TestProgramItem(Item):
>>               source=self.data["source"],
>>               start_files=True,
>>               stlib=self.data["stlib"],
>> -            target=self.get(bld, "target"),
>> +            target=target,
>>               use=bic.objects + bic.use,
>>           )
>> +        make_image(bld, target)
>>   
>>   
>>   class AdaTestProgramItem(TestProgramItem):
>> @@ -770,14 +805,16 @@ class AdaTestProgramItem(TestProgramItem):
>>           objs = []
>>           for s in self.data["source"]:
>>               objs.append(self.cc(bld, bic, s))
>> +        target = self.get(bld, "target")
>>           self.gnatmake(
>>               bld,
>>               bic,
>>               self.data["ada-object-directory"],
>>               objs,
>>               self.data["ada-main"],
>> -            self.data["target"],
>> +            target,
>>           )
>> +        make_image(bld, target)
>>   
>>   
>>   class OptionItem(Item):
>> @@ -1161,6 +1198,9 @@ class ScriptItem(Item):
>>           script = self.data["do-build"]
>>           if script:
>>               exec(script)
>> +        target = self.data.get("target", None)
>> +        if target is not None:
>> +            make_image(bld, self.substitute(bld, target))
>>   
>>   
>>   class ConfigItemContext(object):
>> @@ -1284,6 +1324,7 @@ def load_items(ctx, specs):
>>           "test-program": TestProgramItem,
>>           "group": GroupItem,
>>           "library": LibraryItem,
>> +        "mkimage": MakeImageItem,
>>           "objects": ObjectsItem,
>>           "option": OptionItem,
>>           "script": ScriptItem,

-- 
embedded brains GmbH & Co. KG
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list