4.3. Adding Binary Only Files

Sometimes a few binary files have to be added into the root filesystem. Or - to be more precise - some files, that do not need to be built in any way.

On the other hand, sometimes files should be included that are not covered by any open source license and so, should not be shipped in the source code format.

Add Binary Files File by File

Doing to on a file by file base can happen by just using the install_copy macro in the targetinstall stage in our own customized rules file.

@$(call install_copy, binary_example, 0, 0, 0644, \
   </path/to/some/file/>ptx_logo.png, \
   /example/ptx_logo.png)

It copies the file ptx_logo.png from some location to target’s root filesystem. Refer world/get, world/extract, world/prepare, world/compile, world/install for further information about using the install_copy macro.

The disadvantage of this method is: if we want to install more than one file, we need one call to the install_copy macro per file. This is even harder if not only a set of files is to be installed, but a whole directory tree with files instead.

Add Binary Files via an Archive

If a whole tree of files is to be installed, working with a tar based archive could make life easier. In this case the archive itself provides all the required information the files are needing to be installed in a correct manner:

  • the file itself and its name
  • the directory structure and the final location of every file in this structure
  • user and group ID on a per file base
@$(call install_archive, binary_example, -, -, \
   </path/to/an/>archive.tgz, /)

Refer install_archive for further information about using the install_archive macro.

Using an archive can be useful to install parts of the root filesystem that are not covered by any open source license. Its possible to ship the binaries within the regular BSP, without the need for their sources. However it is possible for the customer to re-create everything required from the BSP to get their target up and running again.

Another use case for the archive method could be the support for different development teams. One team provides a software component in the archive format, the other team does not need to build it but can use it in the same way than every other software component.

Creating a Rules File

Let PTXdist create one for us.

$ ptxdist newpackage file

ptxdist: creating a new 'file' package:

ptxdist: enter package name.......: my_binfiles
ptxdist: enter version number.....: 1
ptxdist: enter package author.....: My Name <me@my-org.com>
ptxdist: enter package section....: rootfs

Now two new files are present in the BSP:

  1. rules/my_binfiles.in The template for the menu
  2. rules/my_binfiles.make The rules template

Both files now must be customized to meet our requirements. Due to the answer rootfs to the “enter package section” question, we will find the new menu entry in:

Root Filesystem --->
    < > my_binfiles (NEW)

Enabling this new entry will also run our stages in rules/my_binfiles.make the next time we enter:

$ ptxdist go