ChorusOS 4.0 Introduction explains how to configure the ChorusOS operating system with the configurator command, or by using the ews graphical tool. With both configuration tools, you can statically configure the features, tunables and environment variables. Once the system configuration has been altered, rebuild a new system image.
It is strongly advised that you use the ews graphical tool, particularly if you are not familiar with the configurator command, as the ews graphical tool ensures the ChorusOS system integrity.
This chapter explains how to implement the features and tunables managed by the mkmk tool.
Features control the list of modules linked to build an actor. The list of object files used to link an actor is calculated from the values of the features values.
Tunables provide a way of changing the values of integers used in the actor. There is no recompilation of the source files. Values are taken into account when the actor is linked.
Only components built with the mkmk tool can implement features and tunables. Features and tunables apply to configurable actors in which the ChorusOS kernel itself is included.
Configuration files are all expressed in eXtensible Markup Language (XML). This provides a structured and organized view of the various configuration options of the ChorusOS system. See ChorusOS 4.0 Introduction for a description of the XML configuration language, as used in the ChorusOS system.
To add a tunable (my_tunable) to the IOM component, an integer named my_tunable needs to be written in an IOM source file, as follows:
extern int my_tunable;You will configure this integer using the external name iom.my.tunable. The default value for my_tunable is 0.
To add the tunable to the XML source configuration file for the IOM component, go to the directory containing the IOM configuration files:
host% cd <src_dir>/iom/conf/mkconfig
To add the iom.my.tunable, modify two files, iom_rule.xml and iom_action.xml.
The iom_rule.xml file contains the description of the configurable entities as features and tunables, and their associated dependency.
The iom_action.xml file contains the internal implementation rules for management of features and tunables and provides the interface with the mkmk environment.
<tunable name="iom.my.tunable"> <description> My Tunable </description> <int> <const>0</const> </tunable>
This definition includes the external name, a description field that will be accessible through the ews configuration tool, and a default value. All tunable values are integers; the default value is 0 in this example.
Include the standard rule used for the management of the IOM tunables in iom_action.xml:
<setting name="iom.tunables"> <condition><ifdef name="iom.my.tunable"></condition> <value index="size"> <vstring>my_tunable iom.my.tunable ${iom.my.tunable}</vstring> </value> </setting>
iom.my.tunable is the external name of the tunable and my_tunable is the corresponding integer declaration in the source code.
Update the configuration in the build directory and build the new system image. As you modified XML configuration files in the source directory, you must propagate these changes back to the work directory. Remove the corresponding XML files and run make xml.
host% cd <work_dir> host% rm conf/mkconfig/iom_rule.xml conf/mkconfig/iom_action.xml host% make xml
Set your tunable and check that it is now visible in the configuration:
host% configurator -set myiom.my.tunable=0x12345 host% configurator -list tunables | grep my myiom.my.tunable:'0x12345'
Build the new system image and check that the tunable is in the IOM actor:
host% make build host% powerpc-elf-nm image/RAM/chorus/bin/N_iom | grep my_ a00b44f0 D my_tunable a00b44f0: 00 01 23 45 .long 0x12345
A module is source code which implements a feature. Create a file test.c as shown for the creation of bye.c in the mkmk tutorial in Chapter 5, Creating a ChorusOS Component. The module may be created so that it will (or will not) be present in the IOM component. This depends on the value of the feature MY_TEST. By default, the module will not be included in the IOM component, as explained below.
To create the test module, carry out the following steps:
Create the test.df production file for the test module:
host% cd <src_dir>/iom/src/os/iom/sys/test
Create a test.df file containing:
MODULES=module_test
The module named module_test will contain any object files present in the directory and subdirectories. The module is a collection of object files, in this example, it will only contain test.o.
To add the feature in the XML source configuration file for the IOM component, go to the directory containing the IOM configuration files:
host% cd <src_dir>/iom/conf/mkconfig
In order to add the MY_TEST feature, modify both of the iom_rule.xml and iom_action.xml files. Include the definition of the feature in XML in the iom_rule.xml file:
<feature name="MY_TEST"> <description> My Feature </description> <bool> <false> </feature>
The definition includes the name of the feature, a description field and a value. Both the description field and the value will be accessible through the ews configuration tool. In this example, the value is a boolean value, false by default. As the default value is false, the module will not appear in the IOM component. Include the standard rule used for the management of the IOM features in the iom_action.xml file:
<setting name="iom.modules"> <description>module_test</description> <condition> <var name="MY_TEST"> </condition> <value index="size"> <const>module_test</const> </value> </setting>
MY_TEST is the external name of the feature, module_test is the corresponding module managed by the mkmk tool.
Rebuild the IOM component:
host% make mkmk host% make depend host% make
Update the configuration in the build directory and build the new system image:
host% cd <work_dir> host% rm conf/mkconfig/iom_rule.xml conf/mkconfig/iom_action.xml host% make xml host% make build
As the newly created test module is set to FALSE by default, you will not find the definition of my_tunable by running:
host% powerpc-elf-nm image/RAM/chorus/bin/N_iom | grep my_
In order to configure the MY_TEST feature, type:
host% configurator -set MY_TEST=true
and the test module will be integrated.
XML files used during ChorusOS system generation are copied to the conf directory, so that they can be modified using the configurator command or the ews graphical tool. A component that adds new XML files must have rules to execute these files in its Makefile.bin file. For instance, the Makefile.bin of the IOM component contains:
IOM_XML = iom.xml iom_rule.xml iom_action.xml xml:: DEVTOOLS.all $(IOM_DIR)/exports.lst sh $(DEVTOOLS_DIR)/cpxml $(BUILD_DIR)/conf/mkconfig $(IOM_DIR)/conf/mkconfig $(IOM_XML)
In this example, the XML files have to be copied from the IOM merged tree, so the XML target depends on $(IOM_DIR)/exports.lst (which is produced by mkmerge during the IOM merge). The cpxml command acts as a wrapper around cp.
The conf/ChorusOS.xml file includes, directly or indirectly, all the XML files used during the ChorusOS system generation. This file is generated automatically. As the inclusion order of XML files is important, the generation of conf/ChorusOS.xml uses the XML0, XML1, XML2 and XML3 make variables in that order. In other words, files in XML0 are included in ChorusOS.xml, before files in XML1.
For instance, the Makefile.bin of the IOM component contains:
XML3 += mkconfig/iom.xml
For further information on XML files, see Chapter 7, XML Syntax.