diff options
Diffstat (limited to 'documentation/dev-manual/dev-manual-common-tasks.xml')
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index be95c0f405..7f796fc037 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -4007,6 +4007,159 @@ | |||
4007 | </section> | 4007 | </section> |
4008 | </section> | 4008 | </section> |
4009 | 4009 | ||
4010 | <section id='openembedded-kickstart-plugins'> | ||
4011 | <title>Plugins</title> | ||
4012 | |||
4013 | <para> | ||
4014 | Plugins allow <filename>wic</filename> functionality to | ||
4015 | be extended and specialized by users. | ||
4016 | This section documents the plugin interface, which is | ||
4017 | currently restricted to source plugins. | ||
4018 | </para> | ||
4019 | |||
4020 | <para> | ||
4021 | Source plugins provide a mechanism to customize | ||
4022 | various aspects of the image generation process in | ||
4023 | <filename>wic</filename>, mainly the contents of | ||
4024 | partitions. | ||
4025 | The plugins provide a mechanism for mapping values | ||
4026 | specified in <filename>.wks</filename> files using the | ||
4027 | <filename>‐‐source</filename> keyword to a | ||
4028 | particular plugin implementation that populates a | ||
4029 | corresponding partition. | ||
4030 | </para> | ||
4031 | |||
4032 | <para> | ||
4033 | A source plugin is created as a subclass of | ||
4034 | <filename>SourcePlugin</filename>. | ||
4035 | The plugin file containing it is added to | ||
4036 | <filename>scripts/lib/mic/plugins/source/</filename> to | ||
4037 | make the plugin implementation available to the | ||
4038 | <filename>wic</filename> implementation. | ||
4039 | For more information, see | ||
4040 | <filename>scripts/lib/mic/pluginbase.py</filename>. | ||
4041 | </para> | ||
4042 | |||
4043 | <para> | ||
4044 | Source plugins can also be implemented and added by | ||
4045 | external layers. | ||
4046 | As such, any plugins found in a | ||
4047 | <filename>scripts/lib/mic/plugins/source/</filename> | ||
4048 | directory in an external layer are also made | ||
4049 | available. | ||
4050 | </para> | ||
4051 | |||
4052 | <para> | ||
4053 | When the <filename>wic</filename> implementation needs | ||
4054 | to invoke a partition-specific implementation, it looks | ||
4055 | for the plugin that has the same name as the | ||
4056 | <filename>‐‐source</filename> parameter given to | ||
4057 | that partition. | ||
4058 | For example, if the partition is set up as follows: | ||
4059 | <literallayout class='monospaced'> | ||
4060 | part /boot --source bootimg-pcbios ... | ||
4061 | </literallayout> | ||
4062 | The methods defined as class members of the plugin | ||
4063 | having the matching <filename>bootimg-pcbios.name</filename> | ||
4064 | class member are used. | ||
4065 | </para> | ||
4066 | |||
4067 | <para> | ||
4068 | To be more concrete, here is the plugin definition that | ||
4069 | matches a | ||
4070 | <filename>'‐‐source bootimg-pcbios'</filename> usage, | ||
4071 | along with an example | ||
4072 | method called by the <filename>wic</filename> implementation | ||
4073 | when it needs to invoke an implementation-specific | ||
4074 | partition-preparation function: | ||
4075 | <literallayout class='monospaced'> | ||
4076 | class BootimgPcbiosPlugin(SourcePlugin): | ||
4077 | name = 'bootimg-pcbios' | ||
4078 | |||
4079 | @classmethod | ||
4080 | def do_prepare_partition(self, part, ...) | ||
4081 | </literallayout> | ||
4082 | If the subclass itself does not implement a function, a | ||
4083 | default version in a superclass is located and | ||
4084 | used, which is why all plugins must be derived from | ||
4085 | <filename>SourcePlugin</filename>. | ||
4086 | </para> | ||
4087 | |||
4088 | <para> | ||
4089 | The <filename>SourcePlugin</filename> class defines the | ||
4090 | following methods, which is the current set of methods | ||
4091 | that can be implemented or overridden by | ||
4092 | <filename>‐‐source</filename> plugins. | ||
4093 | Any methods not implemented by a | ||
4094 | <filename>SourcePlugin</filename> subclass inherit the | ||
4095 | implementations present in the | ||
4096 | <filename>SourcePlugin</filename> class. | ||
4097 | For more information, see the | ||
4098 | <filename>SourcePlugin</filename> source for details: | ||
4099 | </para> | ||
4100 | |||
4101 | <para> | ||
4102 | <itemizedlist> | ||
4103 | <listitem><para><emphasis><filename>do_prepare_partition()</filename>:</emphasis> | ||
4104 | Called to do the actual content population for a | ||
4105 | partition. | ||
4106 | In other words, the method prepares the final | ||
4107 | partition image that is incorporated into the | ||
4108 | disk image. | ||
4109 | </para></listitem> | ||
4110 | <listitem><para><emphasis><filename>do_configure_partition()</filename>:</emphasis> | ||
4111 | Called before | ||
4112 | <filename>do_prepare_partition()</filename>. | ||
4113 | This method is typically used to create custom | ||
4114 | configuration files for a partition (e.g. syslinux or | ||
4115 | grub configuration files). | ||
4116 | </para></listitem> | ||
4117 | <listitem><para><emphasis><filename>do_install_disk()</filename>:</emphasis> | ||
4118 | Called after all partitions have been prepared and | ||
4119 | assembled into a disk image. | ||
4120 | This method provides a hook to allow finalization of a | ||
4121 | disk image, (e.g. writing an MBR). | ||
4122 | </para></listitem> | ||
4123 | <listitem><para><emphasis><filename>do_stage_partition()</filename>:</emphasis> | ||
4124 | Special content-staging hook called before | ||
4125 | <filename>do_prepare_partition()</filename>. | ||
4126 | This method is normally empty.</para> | ||
4127 | <para>Typically, a partition just uses the passed-in | ||
4128 | parameters (e.g. the unmodified value of | ||
4129 | <filename>bootimg_dir</filename>). | ||
4130 | However, in some cases things might need to be | ||
4131 | more tailored. | ||
4132 | As an example, certain files might additionally | ||
4133 | need to be taken from | ||
4134 | <filename>bootimg_dir + /boot</filename>. | ||
4135 | This hook allows those files to be staged in a | ||
4136 | customized fashion. | ||
4137 | <note> | ||
4138 | <filename>get_bitbake_var()</filename> | ||
4139 | allows you to access non-standard variables | ||
4140 | that you might want to use for this. | ||
4141 | </note> | ||
4142 | </para></listitem> | ||
4143 | </itemizedlist> | ||
4144 | </para> | ||
4145 | |||
4146 | <para> | ||
4147 | This scheme is extensible. | ||
4148 | Adding more hooks is a simple matter of adding more | ||
4149 | plugin methods to <filename>SourcePlugin</filename> and | ||
4150 | derived classes. | ||
4151 | The code that then needs to call the plugin methods uses | ||
4152 | <filename>plugin.get_source_plugin_methods()</filename> | ||
4153 | to find the method or methods needed by the call. | ||
4154 | Location is accomplished by filling up a dict with keys | ||
4155 | containing the method names of interest. | ||
4156 | On success, these will be filled in with the actual | ||
4157 | methods. | ||
4158 | Please see the <filename>wic</filename> | ||
4159 | implementation for examples and details. | ||
4160 | </para> | ||
4161 | </section> | ||
4162 | |||
4010 | <section id='openembedded-kickstart-wks-reference'> | 4163 | <section id='openembedded-kickstart-wks-reference'> |
4011 | <title>OpenEmbedded Kickstart (.wks) Reference</title> | 4164 | <title>OpenEmbedded Kickstart (.wks) Reference</title> |
4012 | 4165 | ||