diff options
| author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2013-12-21 08:49:03 -0600 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-01-02 13:16:12 +0000 |
| commit | 71460e5fc274467d5d59f4f45ccb298590f699e8 (patch) | |
| tree | ed105cefba3c8791b506cdf062d6662e4cc2a02f /documentation | |
| parent | 3ad993da1038c327c60da781315b748380228a7c (diff) | |
| download | poky-71460e5fc274467d5d59f4f45ccb298590f699e8.tar.gz | |
dev-manual: Integrated Hello World section into new writing recipe section
This change merged in the Hello World section as a summarizing
example section to the new "Writing a New Recipe" section.
(From yocto-docs rev: 79c858e1590e5ab4c56b19dc51b03e0e570b6209)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation')
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 465 |
1 files changed, 240 insertions, 225 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 717a453061..053df0f838 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -1146,6 +1146,12 @@ | |||
| 1146 | requires a recipe to define the component. | 1146 | requires a recipe to define the component. |
| 1147 | This section describes how to create, write, and test a new | 1147 | This section describes how to create, write, and test a new |
| 1148 | recipe. | 1148 | recipe. |
| 1149 | <note> | ||
| 1150 | For information on variables that are useful for recipes and | ||
| 1151 | for information about recipe naming issues, see the | ||
| 1152 | "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>" | ||
| 1153 | section of the Yocto Project Reference Manual. | ||
| 1154 | </note> | ||
| 1149 | </para> | 1155 | </para> |
| 1150 | 1156 | ||
| 1151 | <section id='new-recipe-overview'> | 1157 | <section id='new-recipe-overview'> |
| @@ -1163,6 +1169,16 @@ | |||
| 1163 | <title>Locate a Base Recipe</title> | 1169 | <title>Locate a Base Recipe</title> |
| 1164 | 1170 | ||
| 1165 | <para> | 1171 | <para> |
| 1172 | Before writing a recipe from scratch, it is often useful to | ||
| 1173 | check whether someone else has written one already. | ||
| 1174 | OpenEmbedded is a good place to look as it has a wider scope | ||
| 1175 | and range of packages. | ||
| 1176 | Because the Yocto Project aims to be compatible with | ||
| 1177 | OpenEmbedded, most recipes you find there should work for | ||
| 1178 | you. | ||
| 1179 | </para> | ||
| 1180 | |||
| 1181 | <para> | ||
| 1166 | Working from an existing recipe or a skeleton recipe is the | 1182 | Working from an existing recipe or a skeleton recipe is the |
| 1167 | best way to get started. | 1183 | best way to get started. |
| 1168 | Here are some points on both methods: | 1184 | Here are some points on both methods: |
| @@ -1204,6 +1220,42 @@ | |||
| 1204 | </para></listitem> | 1220 | </para></listitem> |
| 1205 | </itemizedlist> | 1221 | </itemizedlist> |
| 1206 | </para> | 1222 | </para> |
| 1223 | |||
| 1224 | <note> | ||
| 1225 | <para>When writing shell functions, you need to be aware of BitBake's | ||
| 1226 | curly brace parsing. | ||
| 1227 | If a recipe uses a closing curly brace within the function and | ||
| 1228 | the character has no leading spaces, BitBake produces a parsing | ||
| 1229 | error. | ||
| 1230 | If you use a pair of curly brace in a shell function, the | ||
| 1231 | closing curly brace must not be located at the start of the line | ||
| 1232 | without leading spaces.</para> | ||
| 1233 | <para>Here is an example that causes BitBake to produce a parsing | ||
| 1234 | error: | ||
| 1235 | <literallayout class='monospaced'> | ||
| 1236 | fakeroot create_shar() { | ||
| 1237 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
| 1238 | usage() | ||
| 1239 | { | ||
| 1240 | echo "test" | ||
| 1241 | ###### The following "}" at the start of the line causes a parsing error ###### | ||
| 1242 | } | ||
| 1243 | EOF | ||
| 1244 | } | ||
| 1245 | </literallayout> | ||
| 1246 | Writing the recipe this way avoids the error: | ||
| 1247 | <literallayout class='monospaced'> | ||
| 1248 | fakeroot create_shar() { | ||
| 1249 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
| 1250 | usage() | ||
| 1251 | { | ||
| 1252 | echo "test" | ||
| 1253 | ######The following "}" with a leading space at the start of the line avoids the error ###### | ||
| 1254 | } | ||
| 1255 | EOF | ||
| 1256 | } | ||
| 1257 | </literallayout></para> | ||
| 1258 | </note> | ||
| 1207 | </section> | 1259 | </section> |
| 1208 | 1260 | ||
| 1209 | <section id='new-recipe-naming-the-recipe'> | 1261 | <section id='new-recipe-naming-the-recipe'> |
| @@ -2036,89 +2088,32 @@ do_unpack unpacks the source, and S must be set | |||
| 2036 | section. | 2088 | section. |
| 2037 | </para> | 2089 | </para> |
| 2038 | </section> | 2090 | </section> |
| 2039 | </section> | ||
| 2040 | 2091 | ||
| 2041 | <section id='usingpoky-extend-addpkg'> | 2092 | <section id='new-recipe-testing-hello-world-example'> |
| 2042 | <title>Writing a Recipe to Add a Package to Your Image</title> | 2093 | <title>Hello World Example</title> |
| 2043 | |||
| 2044 | <para> | ||
| 2045 | Recipes let you define packages you can add to your image. | ||
| 2046 | Writing a recipe means creating a <filename>.bb</filename> file that sets some | ||
| 2047 | variables. | ||
| 2048 | For information on variables that are useful for recipes and for information about recipe naming | ||
| 2049 | issues, see the | ||
| 2050 | "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>" | ||
| 2051 | section of the Yocto Project Reference Manual. | ||
| 2052 | </para> | ||
| 2053 | |||
| 2054 | <para> | ||
| 2055 | Before writing a recipe from scratch, it is often useful to check | ||
| 2056 | whether someone else has written one already. | ||
| 2057 | OpenEmbedded is a good place to look as it has a wider scope and range of packages. | ||
| 2058 | Because the Yocto Project aims to be compatible with OpenEmbedded, most recipes | ||
| 2059 | you find there should work for you. | ||
| 2060 | </para> | ||
| 2061 | 2094 | ||
| 2062 | <para> | 2095 | <para> |
| 2063 | For new packages, the simplest way to add a recipe is to base it on a similar | 2096 | To help summarize how to write a recipe, this section provides |
| 2064 | pre-existing recipe. | 2097 | an example recipe that builds a single "Hello World!" package. |
| 2065 | The sections that follow provide some examples that show how to add standard | 2098 | </para> |
| 2066 | types of packages. | ||
| 2067 | </para> | ||
| 2068 | |||
| 2069 | <note> | ||
| 2070 | <para>When writing shell functions, you need to be aware of BitBake's | ||
| 2071 | curly brace parsing. | ||
| 2072 | If a recipe uses a closing curly brace within the function and | ||
| 2073 | the character has no leading spaces, BitBake produces a parsing | ||
| 2074 | error. | ||
| 2075 | If you use a pair of curly brace in a shell function, the | ||
| 2076 | closing curly brace must not be located at the start of the line | ||
| 2077 | without leading spaces.</para> | ||
| 2078 | <para>Here is an example that causes BitBake to produce a parsing | ||
| 2079 | error: | ||
| 2080 | <literallayout class='monospaced'> | ||
| 2081 | fakeroot create_shar() { | ||
| 2082 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
| 2083 | usage() | ||
| 2084 | { | ||
| 2085 | echo "test" | ||
| 2086 | ###### The following "}" at the start of the line causes a parsing error ###### | ||
| 2087 | } | ||
| 2088 | EOF | ||
| 2089 | } | ||
| 2090 | </literallayout> | ||
| 2091 | Writing the recipe this way avoids the error: | ||
| 2092 | <literallayout class='monospaced'> | ||
| 2093 | fakeroot create_shar() { | ||
| 2094 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
| 2095 | usage() | ||
| 2096 | { | ||
| 2097 | echo "test" | ||
| 2098 | ######The following "}" with a leading space at the start of the line avoids the error ###### | ||
| 2099 | } | ||
| 2100 | EOF | ||
| 2101 | } | ||
| 2102 | </literallayout></para> | ||
| 2103 | </note> | ||
| 2104 | 2099 | ||
| 2105 | <section id='usingpoky-extend-addpkg-singlec'> | 2100 | <section id='usingpoky-extend-addpkg-singlec'> |
| 2106 | <title>Single .c File Package (Hello World!)</title> | 2101 | <title>Single .c File Package (Hello World!)</title> |
| 2107 | 2102 | ||
| 2108 | <para> | 2103 | <para> |
| 2109 | Building an application from a single file that is stored locally (e.g. under | 2104 | Building an application from a single file that is stored locally (e.g. under |
| 2110 | <filename>files/</filename>) requires a recipe that has the file listed in | 2105 | <filename>files/</filename>) requires a recipe that has the file listed in |
| 2111 | the | 2106 | the |
| 2112 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> | 2107 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> |
| 2113 | variable. | 2108 | variable. |
| 2114 | Additionally, you need to manually write the <filename>do_compile</filename> and | 2109 | Additionally, you need to manually write the <filename>do_compile</filename> and |
| 2115 | <filename>do_install</filename> tasks. | 2110 | <filename>do_install</filename> tasks. |
| 2116 | The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> | 2111 | The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> |
| 2117 | variable defines the | 2112 | variable defines the |
| 2118 | directory containing the source code, which is set to | 2113 | directory containing the source code, which is set to |
| 2119 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'> | 2114 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'> |
| 2120 | WORKDIR</ulink></filename> in this case - the directory BitBake uses for the build. | 2115 | WORKDIR</ulink></filename> in this case - the directory BitBake uses for the build. |
| 2121 | <literallayout class='monospaced'> | 2116 | <literallayout class='monospaced'> |
| 2122 | DESCRIPTION = "Simple helloworld application" | 2117 | DESCRIPTION = "Simple helloworld application" |
| 2123 | SECTION = "examples" | 2118 | SECTION = "examples" |
| 2124 | LICENSE = "MIT" | 2119 | LICENSE = "MIT" |
| @@ -2137,32 +2132,32 @@ do_unpack unpacks the source, and S must be set | |||
| 2137 | install -d ${D}${bindir} | 2132 | install -d ${D}${bindir} |
| 2138 | install -m 0755 helloworld ${D}${bindir} | 2133 | install -m 0755 helloworld ${D}${bindir} |
| 2139 | } | 2134 | } |
| 2140 | </literallayout> | 2135 | </literallayout> |
| 2141 | </para> | 2136 | </para> |
| 2142 | 2137 | ||
| 2143 | <para> | 2138 | <para> |
| 2144 | By default, the <filename>helloworld</filename>, <filename>helloworld-dbg</filename>, | 2139 | By default, the <filename>helloworld</filename>, <filename>helloworld-dbg</filename>, |
| 2145 | and <filename>helloworld-dev</filename> packages are built. | 2140 | and <filename>helloworld-dev</filename> packages are built. |
| 2146 | For information on how to customize the packaging process, see the | 2141 | For information on how to customize the packaging process, see the |
| 2147 | "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application | 2142 | "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application |
| 2148 | into Multiple Packages</link>" section. | 2143 | into Multiple Packages</link>" section. |
| 2149 | </para> | 2144 | </para> |
| 2150 | </section> | 2145 | </section> |
| 2151 | 2146 | ||
| 2152 | <section id='usingpoky-extend-addpkg-autotools'> | 2147 | <section id='usingpoky-extend-addpkg-autotools'> |
| 2153 | <title>Autotooled Package</title> | 2148 | <title>Autotooled Package</title> |
| 2154 | <para> | 2149 | <para> |
| 2155 | Applications that use Autotools such as <filename>autoconf</filename> and | 2150 | Applications that use Autotools such as <filename>autoconf</filename> and |
| 2156 | <filename>automake</filename> require a recipe that has a source archive listed in | 2151 | <filename>automake</filename> require a recipe that has a source archive listed in |
| 2157 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and | 2152 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and |
| 2158 | also inherits Autotools, which instructs BitBake to use the | 2153 | also inherits Autotools, which instructs BitBake to use the |
| 2159 | <filename>autotools.bbclass</filename> file, which contains the definitions of all the steps | 2154 | <filename>autotools.bbclass</filename> file, which contains the definitions of all the steps |
| 2160 | needed to build an Autotool-based application. | 2155 | needed to build an Autotool-based application. |
| 2161 | The result of the build is automatically packaged. | 2156 | The result of the build is automatically packaged. |
| 2162 | And, if the application uses NLS for localization, packages with local information are | 2157 | And, if the application uses NLS for localization, packages with local information are |
| 2163 | generated (one package per language). | 2158 | generated (one package per language). |
| 2164 | Following is one example: (<filename>hello_2.3.bb</filename>) | 2159 | Following is one example: (<filename>hello_2.3.bb</filename>) |
| 2165 | <literallayout class='monospaced'> | 2160 | <literallayout class='monospaced'> |
| 2166 | DESCRIPTION = "GNU Helloworld application" | 2161 | DESCRIPTION = "GNU Helloworld application" |
| 2167 | SECTION = "examples" | 2162 | SECTION = "examples" |
| 2168 | LICENSE = "GPLv2+" | 2163 | LICENSE = "GPLv2+" |
| @@ -2172,49 +2167,49 @@ do_unpack unpacks the source, and S must be set | |||
| 2172 | SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" | 2167 | SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" |
| 2173 | 2168 | ||
| 2174 | inherit autotools gettext | 2169 | inherit autotools gettext |
| 2175 | </literallayout> | 2170 | </literallayout> |
| 2176 | </para> | 2171 | </para> |
| 2177 | 2172 | ||
| 2178 | <para> | 2173 | <para> |
| 2179 | The variable | 2174 | The variable |
| 2180 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename> | 2175 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename> |
| 2181 | is used to track source license changes as described in the | 2176 | is used to track source license changes as described in the |
| 2182 | "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section. | 2177 | "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section. |
| 2183 | You can quickly create Autotool-based recipes in a manner similar to the previous example. | 2178 | You can quickly create Autotool-based recipes in a manner similar to the previous example. |
| 2184 | </para> | 2179 | </para> |
| 2185 | </section> | 2180 | </section> |
| 2186 | 2181 | ||
| 2187 | <section id='usingpoky-extend-addpkg-makefile'> | 2182 | <section id='usingpoky-extend-addpkg-makefile'> |
| 2188 | <title>Makefile-Based Package</title> | 2183 | <title>Makefile-Based Package</title> |
| 2189 | 2184 | ||
| 2190 | <para> | 2185 | <para> |
| 2191 | Applications that use GNU <filename>make</filename> also require a recipe that has | 2186 | Applications that use GNU <filename>make</filename> also require a recipe that has |
| 2192 | the source archive listed in | 2187 | the source archive listed in |
| 2193 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>. | 2188 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>. |
| 2194 | You do not need to add a <filename>do_compile</filename> step since by default BitBake | 2189 | You do not need to add a <filename>do_compile</filename> step since by default BitBake |
| 2195 | starts the <filename>make</filename> command to compile the application. | 2190 | starts the <filename>make</filename> command to compile the application. |
| 2196 | If you need additional <filename>make</filename> options, you should store them in the | 2191 | If you need additional <filename>make</filename> options, you should store them in the |
| 2197 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename> | 2192 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename> |
| 2198 | variable. | 2193 | variable. |
| 2199 | BitBake passes these options into the <filename>make</filename> GNU invocation. | 2194 | BitBake passes these options into the <filename>make</filename> GNU invocation. |
| 2200 | Note that a <filename>do_install</filename> task is still required. | 2195 | Note that a <filename>do_install</filename> task is still required. |
| 2201 | Otherwise, BitBake runs an empty <filename>do_install</filename> task by default. | 2196 | Otherwise, BitBake runs an empty <filename>do_install</filename> task by default. |
| 2202 | </para> | 2197 | </para> |
| 2203 | 2198 | ||
| 2204 | <para> | 2199 | <para> |
| 2205 | Some applications might require extra parameters to be passed to the compiler. | 2200 | Some applications might require extra parameters to be passed to the compiler. |
| 2206 | For example, the application might need an additional header path. | 2201 | For example, the application might need an additional header path. |
| 2207 | You can accomplish this by adding to the | 2202 | You can accomplish this by adding to the |
| 2208 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable. | 2203 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable. |
| 2209 | The following example shows this: | 2204 | The following example shows this: |
| 2210 | <literallayout class='monospaced'> | 2205 | <literallayout class='monospaced'> |
| 2211 | CFLAGS_prepend = "-I ${S}/include " | 2206 | CFLAGS_prepend = "-I ${S}/include " |
| 2212 | </literallayout> | 2207 | </literallayout> |
| 2213 | </para> | 2208 | </para> |
| 2214 | 2209 | ||
| 2215 | <para> | 2210 | <para> |
| 2216 | In the following example, <filename>mtd-utils</filename> is a makefile-based package: | 2211 | In the following example, <filename>mtd-utils</filename> is a makefile-based package: |
| 2217 | <literallayout class='monospaced'> | 2212 | <literallayout class='monospaced'> |
| 2218 | DESCRIPTION = "Tools for managing memory technology devices." | 2213 | DESCRIPTION = "Tools for managing memory technology devices." |
| 2219 | SECTION = "base" | 2214 | SECTION = "base" |
| 2220 | DEPENDS = "zlib lzo e2fsprogs util-linux" | 2215 | DEPENDS = "zlib lzo e2fsprogs util-linux" |
| @@ -2245,46 +2240,46 @@ do_unpack unpacks the source, and S must be set | |||
| 2245 | PARALLEL_MAKE = "" | 2240 | PARALLEL_MAKE = "" |
| 2246 | 2241 | ||
| 2247 | BBCLASSEXTEND = "native" | 2242 | BBCLASSEXTEND = "native" |
| 2248 | </literallayout> | 2243 | </literallayout> |
| 2249 | </para> | 2244 | </para> |
| 2250 | 2245 | ||
| 2251 | <para> | 2246 | <para> |
| 2252 | If your sources are available as a tarball instead of a Git repository, you | 2247 | If your sources are available as a tarball instead of a Git repository, you |
| 2253 | will need to provide the URL to the tarball as well as an | 2248 | will need to provide the URL to the tarball as well as an |
| 2254 | <filename>md5</filename> or <filename>sha256</filename> sum of | 2249 | <filename>md5</filename> or <filename>sha256</filename> sum of |
| 2255 | the download. | 2250 | the download. |
| 2256 | Here is an example: | 2251 | Here is an example: |
| 2257 | <literallayout class='monospaced'> | 2252 | <literallayout class='monospaced'> |
| 2258 | SRC_URI="ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.9.tar.bz2" | 2253 | SRC_URI="ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.9.tar.bz2" |
| 2259 | SRC_URI[md5sum]="82b8e714b90674896570968f70ca778b" | 2254 | SRC_URI[md5sum]="82b8e714b90674896570968f70ca778b" |
| 2260 | </literallayout> | 2255 | </literallayout> |
| 2261 | You can generate the <filename>md5</filename> or <filename>sha256</filename> sums | 2256 | You can generate the <filename>md5</filename> or <filename>sha256</filename> sums |
| 2262 | by using the <filename>md5sum</filename> or <filename>sha256sum</filename> commands | 2257 | by using the <filename>md5sum</filename> or <filename>sha256sum</filename> commands |
| 2263 | with the target file as the only argument. | 2258 | with the target file as the only argument. |
| 2264 | Here is an example: | 2259 | Here is an example: |
| 2265 | <literallayout class='monospaced'> | 2260 | <literallayout class='monospaced'> |
| 2266 | $ md5sum mtd-utils-1.4.9.tar.bz2 | 2261 | $ md5sum mtd-utils-1.4.9.tar.bz2 |
| 2267 | 82b8e714b90674896570968f70ca778b mtd-utils-1.4.9.tar.bz2 | 2262 | 82b8e714b90674896570968f70ca778b mtd-utils-1.4.9.tar.bz2 |
| 2268 | </literallayout> | 2263 | </literallayout> |
| 2269 | </para> | 2264 | </para> |
| 2270 | </section> | 2265 | </section> |
| 2271 | 2266 | ||
| 2272 | <section id='splitting-an-application-into-multiple-packages'> | 2267 | <section id='splitting-an-application-into-multiple-packages'> |
| 2273 | <title>Splitting an Application into Multiple Packages</title> | 2268 | <title>Splitting an Application into Multiple Packages</title> |
| 2274 | 2269 | ||
| 2275 | <para> | 2270 | <para> |
| 2276 | You can use the variables | 2271 | You can use the variables |
| 2277 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and | 2272 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and |
| 2278 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename> | 2273 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename> |
| 2279 | to split an application into multiple packages. | 2274 | to split an application into multiple packages. |
| 2280 | </para> | 2275 | </para> |
| 2281 | 2276 | ||
| 2282 | <para> | 2277 | <para> |
| 2283 | Following is an example that uses the <filename>libXpm</filename> recipe. | 2278 | Following is an example that uses the <filename>libXpm</filename> recipe. |
| 2284 | By default, this recipe generates a single package that contains the library along | 2279 | By default, this recipe generates a single package that contains the library along |
| 2285 | with a few binaries. | 2280 | with a few binaries. |
| 2286 | You can modify the recipe to split the binaries into separate packages: | 2281 | You can modify the recipe to split the binaries into separate packages: |
| 2287 | <literallayout class='monospaced'> | 2282 | <literallayout class='monospaced'> |
| 2288 | require xorg-lib-common.inc | 2283 | require xorg-lib-common.inc |
| 2289 | 2284 | ||
| 2290 | DESCRIPTION = "X11 Pixmap library" | 2285 | DESCRIPTION = "X11 Pixmap library" |
| @@ -2299,61 +2294,61 @@ do_unpack unpacks the source, and S must be set | |||
| 2299 | PACKAGES =+ "sxpm cxpm" | 2294 | PACKAGES =+ "sxpm cxpm" |
| 2300 | FILES_cxpm = "${bindir}/cxpm" | 2295 | FILES_cxpm = "${bindir}/cxpm" |
| 2301 | FILES_sxpm = "${bindir}/sxpm" | 2296 | FILES_sxpm = "${bindir}/sxpm" |
| 2302 | </literallayout> | 2297 | </literallayout> |
| 2303 | </para> | 2298 | </para> |
| 2304 | 2299 | ||
| 2305 | <para> | 2300 | <para> |
| 2306 | In the previous example, we want to ship the <filename>sxpm</filename> | 2301 | In the previous example, we want to ship the <filename>sxpm</filename> |
| 2307 | and <filename>cxpm</filename> binaries in separate packages. | 2302 | and <filename>cxpm</filename> binaries in separate packages. |
| 2308 | Since <filename>bindir</filename> would be packaged into the main | 2303 | Since <filename>bindir</filename> would be packaged into the main |
| 2309 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> | 2304 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> |
| 2310 | package by default, we prepend the <filename>PACKAGES</filename> | 2305 | package by default, we prepend the <filename>PACKAGES</filename> |
| 2311 | variable so additional package names are added to the start of list. | 2306 | variable so additional package names are added to the start of list. |
| 2312 | This results in the extra <filename>FILES_*</filename> | 2307 | This results in the extra <filename>FILES_*</filename> |
| 2313 | variables then containing information that define which files and | 2308 | variables then containing information that define which files and |
| 2314 | directories go into which packages. | 2309 | directories go into which packages. |
| 2315 | Files included by earlier packages are skipped by latter packages. | 2310 | Files included by earlier packages are skipped by latter packages. |
| 2316 | Thus, the main <filename>PN</filename> package | 2311 | Thus, the main <filename>PN</filename> package |
| 2317 | does not include the above listed files. | 2312 | does not include the above listed files. |
| 2318 | </para> | 2313 | </para> |
| 2319 | </section> | 2314 | </section> |
| 2320 | 2315 | ||
| 2321 | <section id='usingpoky-extend-addpkg-postinstalls'> | 2316 | <section id='usingpoky-extend-addpkg-postinstalls'> |
| 2322 | <title>Post-Installation Scripts</title> | 2317 | <title>Post-Installation Scripts</title> |
| 2323 | 2318 | ||
| 2324 | <para> | 2319 | <para> |
| 2325 | To add a post-installation script to a package, add a | 2320 | To add a post-installation script to a package, add a |
| 2326 | <filename>pkg_postinst_PACKAGENAME()</filename> function to the | 2321 | <filename>pkg_postinst_PACKAGENAME()</filename> function to the |
| 2327 | <filename>.bb</filename> file and use | 2322 | <filename>.bb</filename> file and use |
| 2328 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the | 2323 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the |
| 2329 | <filename>postinst</filename> script. | 2324 | <filename>postinst</filename> script. |
| 2330 | Normally, | 2325 | Normally, |
| 2331 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> | 2326 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> |
| 2332 | can be used, which automatically expands to <filename>PACKAGENAME</filename>. | 2327 | can be used, which automatically expands to <filename>PACKAGENAME</filename>. |
| 2333 | A post-installation function has the following structure: | 2328 | A post-installation function has the following structure: |
| 2334 | <literallayout class='monospaced'> | 2329 | <literallayout class='monospaced'> |
| 2335 | pkg_postinst_PACKAGENAME () { | 2330 | pkg_postinst_PACKAGENAME () { |
| 2336 | #!/bin/sh -e | 2331 | #!/bin/sh -e |
| 2337 | # Commands to carry out | 2332 | # Commands to carry out |
| 2338 | } | 2333 | } |
| 2339 | </literallayout> | 2334 | </literallayout> |
| 2340 | </para> | 2335 | </para> |
| 2341 | 2336 | ||
| 2342 | <para> | 2337 | <para> |
| 2343 | The script defined in the post-installation function is called when the | 2338 | The script defined in the post-installation function is called when the |
| 2344 | root filesystem is created. | 2339 | root filesystem is created. |
| 2345 | If the script succeeds, the package is marked as installed. | 2340 | If the script succeeds, the package is marked as installed. |
| 2346 | If the script fails, the package is marked as unpacked and the script is | 2341 | If the script fails, the package is marked as unpacked and the script is |
| 2347 | executed when the image boots again. | 2342 | executed when the image boots again. |
| 2348 | </para> | 2343 | </para> |
| 2349 | 2344 | ||
| 2350 | <para> | 2345 | <para> |
| 2351 | Sometimes it is necessary for the execution of a post-installation | 2346 | Sometimes it is necessary for the execution of a post-installation |
| 2352 | script to be delayed until the first boot. | 2347 | script to be delayed until the first boot. |
| 2353 | For example, the script might need to be executed on the device itself. | 2348 | For example, the script might need to be executed on the device itself. |
| 2354 | To delay script execution until boot time, use the following structure in the | 2349 | To delay script execution until boot time, use the following structure in the |
| 2355 | post-installation script: | 2350 | post-installation script: |
| 2356 | <literallayout class='monospaced'> | 2351 | <literallayout class='monospaced'> |
| 2357 | pkg_postinst_PACKAGENAME () { | 2352 | pkg_postinst_PACKAGENAME () { |
| 2358 | #!/bin/sh -e | 2353 | #!/bin/sh -e |
| 2359 | if [ x"$D" = "x" ]; then | 2354 | if [ x"$D" = "x" ]; then |
| @@ -2362,15 +2357,35 @@ do_unpack unpacks the source, and S must be set | |||
| 2362 | exit 1 | 2357 | exit 1 |
| 2363 | fi | 2358 | fi |
| 2364 | } | 2359 | } |
| 2365 | </literallayout> | 2360 | </literallayout> |
| 2366 | </para> | 2361 | </para> |
| 2362 | |||
| 2363 | <para> | ||
| 2364 | The previous example delays execution until the image boots again because the | ||
| 2365 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'>D</ulink></filename> | ||
| 2366 | variable points | ||
| 2367 | to the directory containing the image when the root filesystem is created at build time but | ||
| 2368 | is unset when executed on the first boot. | ||
| 2369 | </para> | ||
| 2370 | </section> | ||
| 2371 | |||
| 2372 | |||
| 2373 | |||
| 2374 | |||
| 2375 | |||
| 2376 | </section> | ||
| 2377 | |||
| 2378 | <section id='writer-notes'> | ||
| 2379 | <title>Writer Notes</title> | ||
| 2367 | 2380 | ||
| 2368 | <para> | 2381 | <para> |
| 2369 | The previous example delays execution until the image boots again because the | 2382 | <itemizedlist> |
| 2370 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'>D</ulink></filename> | 2383 | <listitem><para> |
| 2371 | variable points | 2384 | Need to edit the faq.xml chapter and find the single reference to |
| 2372 | to the directory containing the image when the root filesystem is created at build time but | 2385 | <filename>usingpoky-extend-addpkg</filename> and replace it |
| 2373 | is unset when executed on the first boot. | 2386 | with <filename>new-recipe-testing-hello-world-example</filename>. |
| 2387 | </para></listitem> | ||
| 2388 | </itemizedlist> | ||
| 2374 | </para> | 2389 | </para> |
| 2375 | </section> | 2390 | </section> |
| 2376 | </section> | 2391 | </section> |
