When building IIPs the following is a normal workflow:
For each IIP do the following:
There a number of things to consider when dividing your things into one or more IIPs:
Different parts of what you have built may have different requirements on the architecture of the IP-STB. Some parts may be for a specific processor (same as toolchain) while other parts may work on all kinds of IP-STBs. It may then be a good idea to create two different IIPs, one holding platform independant scripts and XML files, and one holding the platform specific binaries and libraries.
It is desirable to be able to use the IIPs in different configurations. All IIPs should be "atomic" to make sure that you only get what you want when installing an IIP in a boot image, i.e. they should only contain one part that can work on its own. Don't put several applications into one IIP.
It is however possible to use IIP parameters to only install parts of an IIP. It can then be a good idea to gather things with common characteristics into one IIP. The kreatv-option-streamclients is a good example of such an IIP. It it is almost never desirable to have all possible stream clients available in one boot image, but it would not be a good idea to have 14 different IIPs either.
In some cases the order in which parts are installed is important. Then put the different parts in different IIPs.
A special feature of the IIP concept called finalization can also be used to make an IIP install after all normal IIPs. The finalization IIP has the complete rootdisk to work on.
The kreatv-option-harddrive IIP has a dependency to kreatv-option-usb. The USB support is however only needed if IIP parameter usb is defined for kreatv-option-harddrive. We do not want unused stuff in our rootdisk. This is solved by having harddrive IIP installation script writing a temporary file in the rootdisk build directory. This file is then read by kreatv-finalize-harddrive IIP installation script which takes care of removing the USB support if it is not wanted.