Add a new section discussing plugins, taken directly from the corresponding wic help section.
Signed-off-by: Tom Zanussi <tom.zanu...@linux.intel.com> --- .../dev-manual/dev-manual-common-tasks.xml | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index c4c3d9f..c3df8b3 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml @@ -3916,6 +3916,164 @@ </section> </section> + <section id='openembedded-kickstart-plugins'> + <title>Plugins</title> + + <para> + Plugins allow <filename>wic</filename> functionality to + be extended and specialized by users. This section + documents the plugin interface, which is currently + restricted to 'source' plugins. + </para> + + <para> + 'Source' plugins provide a mechanism to customize + various aspects of the image generation process in + <filename>wic</filename>, mainly the contents of + partitions. + </para> + + <para> + Source plugins provide a mechanism for mapping values + specified in <filename>.wks</filename> files using the + <filename>--source</filename> keyword to a particular + plugin implementation that populates a corresponding + partition. + </para> + + <para> + A source plugin is created as a subclass of + <filename>SourcePlugin</filename> (see + <filename>scripts/lib/mic/pluginbase.py</filename>) and + the plugin file containing it is added to + <filename>scripts/lib/mic/plugins/source/</filename> to + make the plugin implementation available to the + <filename>wic</filename> implementation. + </para> + + <para> + Source plugins can also be implemented and added by + external layers - any plugins found in a + <filename>scripts/lib/mic/plugins/source/</filename> + directory in an external layer will also be made + available. + </para> + + <para> + When the <filename>wic</filename> implementation needs + to invoke a partition-specific implementation, it looks + for the plugin that has the same name as the + <filename>--source</filename> param given to that + partition. For example, if the partition is set up like + this: + </para> + + <para> + <literallayout class='monospaced'> + part /boot --source bootimg-pcbios ... + </literallayout> + </para> + + <para> + then the methods defined as class members of the plugin + having the matching <filename>bootimg-pcbios + .name</filename> class member would be used. + </para> + + <para> + To be more concrete, here's the plugin definition that + would match a <filename>'--source + bootimg-pcbios'</filename> usage, along with an example + method that would be called by the + <filename>wic</filename> implementation when it needed + to invoke an implementation-specific + partition-preparation function: + </para> + + <para> + <literallayout class='monospaced'> + class BootimgPcbiosPlugin(SourcePlugin): + name = 'bootimg-pcbios' + + @classmethod + def do_prepare_partition(self, part, ...) + </literallayout> + </para> + + <para> + If the subclass itself doesn't implement a function, a + 'default' version in a superclass will be located and + used, which is why all plugins must be derived from + <filename>SourcePlugin</filename>. + </para> + + <para> + The <filename>SourcePlugin</filename> class defines the + following methods, which is the current set of methods + that can be implemented/overridden by + <filename>--source</filename> plugins. Any methods not + implemented by a <filename>SourcePlugin</filename> + subclass inherit the implementations present in the + <filename>SourcePlugin</filename> class (see the + <filename>SourcePlugin</filename> source for details): + </para> + + <para> + <itemizedlist> + <listitem><para><emphasis><filename>do_prepare_partition()</filename>:</emphasis> + Called to do the actual content population for a + partition. In other words, it 'prepares' the final + partition image which will be incorporated into the + disk image. </para></listitem> + + <listitem><para><emphasis><filename>do_configure_partition()</filename>:</emphasis> + Called before + <filename>do_prepare_partition()</filename>, typically + used to create custom configuration files for a + partition, for example syslinux or grub config files. + </para></listitem> + + <listitem><para><emphasis><filename>do_install_disk()</filename>:</emphasis> + Called after all partitions have been prepared and + assembled into a disk image. This provides a hook to + allow finalization of a disk image, for example to + write an MBR to it. </para></listitem> + + <listitem><para><emphasis><filename>do_stage_partition()</filename>:</emphasis> + Special content-staging hook called before + <filename>do_prepare_partition()</filename>, normally + empty. + <para> + Typically, a partition will just use the passed-in + parameters, for example the unmodified value of + <filename>bootimg_dir</filename>. In some cases, + however, things may need to be more tailored. As an + example, certain files may additionally need to be + taken from <filename>bootimg_dir + /boot</filename>. + This hook allows those files to be staged in a + customized fashion. Note that + <filename>get_bitbake_var()</filename> allows you to + access non-standard variables that you might want to + use for this. + </para> + </para></listitem> + </itemizedlist> + </para> + + <para> + This scheme is extensible - adding more hooks is a + simple matter of adding more plugin methods to + <filename>SourcePlugin</filename> and derived classes. + The code that then needs to call the plugin methods uses + <filename>plugin.get_source_plugin_methods()</filename> + to find the method(s) needed by the call; this is done + by filling up a dict with keys containing the method + names of interest - on success, these will be filled in + with the actual methods. Please see the implementation + for examples and details. + </para> + </section> + <section id='openembedded-kickstart-wks-reference'> <title>OpenEmbedded Kickstart (.wks) Reference</title> -- 1.8.3.1 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto