Coarse-grained configuration of an eCos system means making changes that require pkgconf.tcl to be run again in an existing build tree. These changes include:
switching to a different target architecture
changing the target platform
changing the startup from RAM to ROM, or from ROM to RAM
disabling or enabling a package
changing the version of a package
Whenever pkgconf.tcl generates or updates a build tree it leaves a file pkgconf.sav at the top level of the build tree. The next time that pkgconf.tcl is run it is only necessary to specify what should change relative to the last time.
Suppose that the build tree was first created using the following command line:
$ tclsh BASE_DIR/pkgconf.tcl --target=mn10300 --platform=stdeval1
To change the target architecture to PowerPC, the following command would be needed:
$ tclsh BASE_DIR/pkgconf.tcl --target=powerpc
This will select the default platform for the PowerPC architecture, which is a Cogent board. To switch to the PowerPC simulator instead:
$ tclsh BASE_DIR/pkgconf.tcl --platform=sim
It is not necessary to specify the PowerPC architecture again since this has not changed. Next, to switch back to the Cogent board but use the non-default ROM startup:
$ tclsh BASE_DIR/pkgconf.tcl --platform=cogent --startup=rom
As the target architecture or platform changes, hardware-related packages such as the HAL packages and device drivers will be added to and removed from the configuration as appropriate.
To remove any package from the current configuration, use the --disable argument:
$ tclsh BASE_DIR/pkgconf.tcl --disable-uitron
You can disable multiple packages using multiple --disable arguments, for example:
$ tclsh BASE_DIR/pkgconf.tcl --disable-uitron --disable-libm
If this turns out to have been a mistake then you can reenable one or more packages with the --enable argument:
$ tclsh BASE_DIR/pkgconf.tcl --enable-libm
When a package is disabled pkgconf.tcl will clean up the build and install trees to some extent. In particular, it will make sure that there is no trace of the disabled packages left in the target library, and that all of the disabled package's header files are removed from the install tree. If any part of the application still tried to use a disabled package then this will result in a (hopefully) self-explanatory error message. However, when a package is disabled, pkgconf.tcl will not delete any files in the build tree that you may have edited, in particular it will not delete the header files that are used for fine-grained configuration.
Changing the desired version for a package is also straightforward.
$ tclsh BASE_DIR/pkgconf.tcl --kernel-version=ss19981130
The output from pkgconf.tcl contains full information about the target, platform, startup, and all the packages that are in the system. To find out what is in a build tree without changing the current settings, run pkgconf.tcl without passing any additional arguments:
$ tclsh BASE_DIR/pkgconf.tcl
If a build tree is changed so often that it cannot easily be restored to a sensible state by incremental changes, use the special argument --defaults. This tells pkgconf.tcl to ignore the current state of the build tree completely and use default settings for everything. However, there is no default setting for the target architecture so this must be specified explicitly:
$ tclsh BASE_DIR/pkgconf.tcl --defaults --target=mn10300
Using --defaults is not quite as drastic as deleting the entire contents of the build tree. In particular, it will not cause the fine-grained configuration header files in the build tree to be deleted, since you may have edited these and it would be annoying if the configuration system deleted them.