summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorScott Rifenbark <scott.m.rifenbark@intel.com>2013-03-21 06:47:31 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-22 17:08:43 +0000
commit33f2c1a0aef9dd144781296de7dc92e59e190ca2 (patch)
tree2b6d0f2ae38ac76ff36099da39f064bb7494f86c /documentation
parent9114dfcbe8ff625257a7cf98d18e0e53ec9cb68a (diff)
downloadpoky-33f2c1a0aef9dd144781296de7dc92e59e190ca2.tar.gz
dev-manual: Reword for when to use BBMASK.
Changed the wording on when a user would consider using the BBMASK variable. It is more suited for excluding things that cause problems rather than for speeding up build time. Reporte-by: Paul Eggleton <paul.eggleton@linux.com> (From yocto-docs rev: 993d7c953a37747297238cd9af53a1f00e737df9) 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.xml172
1 files changed, 87 insertions, 85 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml
index a6aa8fafbe..1abc91431d 100644
--- a/documentation/dev-manual/dev-manual-common-tasks.xml
+++ b/documentation/dev-manual/dev-manual-common-tasks.xml
@@ -2132,18 +2132,18 @@
2132 2132
2133 <para> 2133 <para>
2134 Very small distributions have some significant advantages such 2134 Very small distributions have some significant advantages such
2135 as requiring less on-die memory (cheaper), better performance 2135 as requiring less on-die memory (cheaper), better performance
2136 through efficient cache usage, lower power requirements due to less 2136 through efficient cache usage, lower power requirements due to less
2137 memory, faster boot times, and reduced development overhead. 2137 memory, faster boot times, and reduced development overhead.
2138 Some real-world examples where a very small distribution gives 2138 Some real-world examples where a very small distribution gives
2139 you distinct advantages are digital cameras, medical devices, 2139 you distinct advantages are digital cameras, medical devices,
2140 small headless systems, and partitioned flash. 2140 small headless systems, and partitioned flash.
2141 </para> 2141 </para>
2142 2142
2143 <para> 2143 <para>
2144 This section presents information that shows you how you can 2144 This section presents information that shows you how you can
2145 trim your distribution to even smaller sizes than the 2145 trim your distribution to even smaller sizes than the
2146 8 Mbytes <filename>poky-tiny</filename> distribution that 2146 8 Mbytes <filename>poky-tiny</filename> distribution that
2147 can be built out-of-the-box using the Yocto Project. 2147 can be built out-of-the-box using the Yocto Project.
2148 </para> 2148 </para>
2149 2149
@@ -2151,18 +2151,18 @@
2151 <title>Overview</title> 2151 <title>Overview</title>
2152 2152
2153 <para> 2153 <para>
2154 The following list presents the overall steps you need to 2154 The following list presents the overall steps you need to
2155 consider and perform to create very small systems that 2155 consider and perform to create very small systems that
2156 have a kernel and root filesystem under 4 Mbytes, boot to the 2156 have a kernel and root filesystem under 4 Mbytes, boot to the
2157 shell in under two seconds, maintain <filename>ipv4</filename> 2157 shell in under two seconds, maintain <filename>ipv4</filename>
2158 functionality, and avoid an initial RAM disk: 2158 functionality, and avoid an initial RAM disk:
2159 <itemizedlist> 2159 <itemizedlist>
2160 <listitem><para>Determine your goals and guiding 2160 <listitem><para>Determine your goals and guiding
2161 principles.</para></listitem> 2161 principles.</para></listitem>
2162 <listitem><para>Understand what gives your image size. 2162 <listitem><para>Understand what gives your image size.
2163 </para></listitem> 2163 </para></listitem>
2164 <listitem><para>Reduce the size of the root filesystem. 2164 <listitem><para>Reduce the size of the root filesystem.
2165 </para></listitem> 2165 </para></listitem>
2166 <listitem><para>Reduce the size of the kernel. 2166 <listitem><para>Reduce the size of the kernel.
2167 </para></listitem> 2167 </para></listitem>
2168 <listitem><para>Iterate on the process.</para></listitem> 2168 <listitem><para>Iterate on the process.</para></listitem>
@@ -2174,26 +2174,26 @@
2174 <title>Goals and Guiding Principles</title> 2174 <title>Goals and Guiding Principles</title>
2175 2175
2176 <para> 2176 <para>
2177 Before you can reach your destination, you need to know 2177 Before you can reach your destination, you need to know
2178 where you are going. 2178 where you are going.
2179 Here is an example list that you can use as a guide when 2179 Here is an example list that you can use as a guide when
2180 creating very small distributions: 2180 creating very small distributions:
2181 <itemizedlist> 2181 <itemizedlist>
2182 <listitem><para>Determine how much space you need 2182 <listitem><para>Determine how much space you need
2183 (e.g. a kernel that is 1 Mbyte or less and 2183 (e.g. a kernel that is 1 Mbyte or less and
2184 a root filesystem that is 3 Mbytes or less). 2184 a root filesystem that is 3 Mbytes or less).
2185 </para></listitem> 2185 </para></listitem>
2186 <listitem><para>Find the areas that are currently 2186 <listitem><para>Find the areas that are currently
2187 taking 90% of the space and concentrate on reducing 2187 taking 90% of the space and concentrate on reducing
2188 those areas. 2188 those areas.
2189 </para></listitem> 2189 </para></listitem>
2190 <listitem><para>Do not create any difficult "hacks" 2190 <listitem><para>Do not create any difficult "hacks"
2191 to achieve your goals.</para></listitem> 2191 to achieve your goals.</para></listitem>
2192 <listitem><para>Leverage off the device-specific 2192 <listitem><para>Leverage off the device-specific
2193 options.</para></listitem> 2193 options.</para></listitem>
2194 <listitem><para>Work in a separate layer so that you 2194 <listitem><para>Work in a separate layer so that you
2195 keep changes isolated. 2195 keep changes isolated.
2196 For information on how to create layers, see 2196 For information on how to create layers, see
2197 the "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" section. 2197 the "<link linkend='understanding-and-creating-layers'>Understanding and Creating Layers</link>" section.
2198 </para></listitem> 2198 </para></listitem>
2199 </itemizedlist> 2199 </itemizedlist>
@@ -2204,9 +2204,9 @@
2204 <title>Understand What Gives Your Image Size</title> 2204 <title>Understand What Gives Your Image Size</title>
2205 2205
2206 <para> 2206 <para>
2207 You will need to have an image from which you can 2207 You will need to have an image from which you can
2208 work. 2208 work.
2209 The Yocto Project ships with the ability to create a 2209 The Yocto Project ships with the ability to create a
2210 <filename>poky-tiny</filename> distribution. 2210 <filename>poky-tiny</filename> distribution.
2211 This distribution consists of a small, sub-8 Mbyte kernel 2211 This distribution consists of a small, sub-8 Mbyte kernel
2212 that works with two shipped Board Support Packages (BSPs): 2212 that works with two shipped Board Support Packages (BSPs):
@@ -2218,16 +2218,16 @@
2218 "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>" 2218 "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
2219 section for information. 2219 section for information.
2220 </para> 2220 </para>
2221 2221
2222 <para> 2222 <para>
2223 Understanding some memory concepts will help you reduce the 2223 Understanding some memory concepts will help you reduce the
2224 system size. 2224 system size.
2225 Memory consists of static, dynamic, and temporary memory. 2225 Memory consists of static, dynamic, and temporary memory.
2226 Static memory is the TEXT (the code), DATA (initialized data 2226 Static memory is the TEXT (the code), DATA (initialized data
2227 in the code), and BSS (uninitialized data) sections. 2227 in the code), and BSS (uninitialized data) sections.
2228 Dynamic memory contains memory that is allocate at runtime, 2228 Dynamic memory contains memory that is allocate at runtime,
2229 stacks, hash tables, and so forth. 2229 stacks, hash tables, and so forth.
2230 Temporary memory is decompressed from the expanded kernel 2230 Temporary memory is decompressed from the expanded kernel
2231 after boot. 2231 after boot.
2232 Temporary memory also includes the <filename>__init__</filename> 2232 Temporary memory also includes the <filename>__init__</filename>
2233 functions. 2233 functions.
@@ -2235,8 +2235,8 @@
2235 2235
2236 <para> 2236 <para>
2237 To help you see where you currently are with kernel and root 2237 To help you see where you currently are with kernel and root
2238 filesystem sizes, you can use two tools found in the 2238 filesystem sizes, you can use two tools found in the
2239 <link linkend='source-directory'>Source Directory</link> in 2239 <link linkend='source-directory'>Source Directory</link> in
2240 the <filename>scripts</filename> directory: 2240 the <filename>scripts</filename> directory:
2241 <itemizedlist> 2241 <itemizedlist>
2242 <listitem><para><filename>ksize.py</filename>: Reports 2242 <listitem><para><filename>ksize.py</filename>: Reports
@@ -2244,54 +2244,54 @@
2244 <listitem><para><filename>dirsize.py</filename>: Reports 2244 <listitem><para><filename>dirsize.py</filename>: Reports
2245 the size of the root filesystem.</para></listitem> 2245 the size of the root filesystem.</para></listitem>
2246 </itemizedlist> 2246 </itemizedlist>
2247 This next tool and command helps you organize configuration 2247 This next tool and command helps you organize configuration
2248 fragments and view file dependencies in a human-readable form: 2248 fragments and view file dependencies in a human-readable form:
2249 <itemizedlist> 2249 <itemizedlist>
2250 <listitem><para><filename>merge_config.sh</filename>: 2250 <listitem><para><filename>merge_config.sh</filename>:
2251 Helps you manage configuration files and fragments 2251 Helps you manage configuration files and fragments
2252 within the kernel. 2252 within the kernel.
2253 With this tool you can merge individual configuration 2253 With this tool you can merge individual configuration
2254 fragments together. 2254 fragments together.
2255 The tool allows you to make overrides and warns you 2255 The tool allows you to make overrides and warns you
2256 of any missing configuration options. 2256 of any missing configuration options.
2257 The tool is ideal for allowing you to iterate on 2257 The tool is ideal for allowing you to iterate on
2258 configurations, create minimal configurations, and 2258 configurations, create minimal configurations, and
2259 create a configuration files for different machines 2259 create a configuration files for different machines
2260 without having to duplicate your process.</para> 2260 without having to duplicate your process.</para>
2261 <para>The <filename>merge_config.sh</filename> script is 2261 <para>The <filename>merge_config.sh</filename> script is
2262 part of the Linux Yocto kernel Git repository in the 2262 part of the Linux Yocto kernel Git repository in the
2263 <filename>scripts/kconfig</filename> directory.</para> 2263 <filename>scripts/kconfig</filename> directory.</para>
2264 <para>For more information on configuration fragments, 2264 <para>For more information on configuration fragments,
2265 see the 2265 see the
2266 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>" 2266 "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>"
2267 section of the Yocto Project Linux Kernel Development 2267 section of the Yocto Project Linux Kernel Development
2268 Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>" 2268 Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
2269 section, which is in this manual.</para></listitem> 2269 section, which is in this manual.</para></listitem>
2270 <listitem><para><filename>bitbake -u depexp -g core-image-*</filename>: 2270 <listitem><para><filename>bitbake -u depexp -g core-image-*</filename>:
2271 Using the BitBake command with these options brings up 2271 Using the BitBake command with these options brings up
2272 a Dependency Explorer from which you can view file 2272 a Dependency Explorer from which you can view file
2273 dependencies. 2273 dependencies.
2274 Understanding these dependencies allows you to make 2274 Understanding these dependencies allows you to make
2275 sane decisions when cutting out various pieces of the 2275 sane decisions when cutting out various pieces of the
2276 kernel and root filesystem.</para></listitem> 2276 kernel and root filesystem.</para></listitem>
2277 </itemizedlist> 2277 </itemizedlist>
2278 </para> 2278 </para>
2279 </section> 2279 </section>
2280 2280
2281 <section id='trim-the-root-filesystem'> 2281 <section id='trim-the-root-filesystem'>
2282 <title>Trim the Root Filesystem</title> 2282 <title>Trim the Root Filesystem</title>
2283 2283
2284 <para> 2284 <para>
2285 Root filesystem is made up of packages for booting, libraries, 2285 Root filesystem is made up of packages for booting, libraries,
2286 and applications. 2286 and applications.
2287 To change things you can configure how the packaging happens, 2287 To change things you can configure how the packaging happens,
2288 which changes the way you build them. 2288 which changes the way you build them.
2289 You can also tweak the filesystem itself or select a different 2289 You can also tweak the filesystem itself or select a different
2290 file system. 2290 file system.
2291 </para> 2291 </para>
2292 2292
2293 <para> 2293 <para>
2294 First, check out what is hogging your file system running the 2294 First, check out what is hogging your file system running the
2295 <filename>dirsize.sh</filename> script from your root directory: 2295 <filename>dirsize.sh</filename> script from your root directory:
2296 <literallayout class='monospaced'> 2296 <literallayout class='monospaced'>
2297 $ cd &lt;root-directory-of-image&gt; 2297 $ cd &lt;root-directory-of-image&gt;
@@ -2299,7 +2299,7 @@
2299 $ cat dirsize-100k.log 2299 $ cat dirsize-100k.log
2300 </literallayout> 2300 </literallayout>
2301 You can apply a filter to the script to ignore files under 2301 You can apply a filter to the script to ignore files under
2302 a certain size. 2302 a certain size.
2303 This example filters out anything below 100 Kbytes. 2303 This example filters out anything below 100 Kbytes.
2304 When you examine your log file, you can focus on areas of the 2304 When you examine your log file, you can focus on areas of the
2305 root filesystem that take up large amounts of memory. 2305 root filesystem that take up large amounts of memory.
@@ -2307,20 +2307,20 @@
2307 2307
2308 <para> 2308 <para>
2309 You need to be sure that what you eliminate does not cripple 2309 You need to be sure that what you eliminate does not cripple
2310 the functionality you need. 2310 the functionality you need.
2311 One way to see how packages relate to each other is by using 2311 One way to see how packages relate to each other is by using
2312 the Dependency Explorer UI with the BitBake command: 2312 the Dependency Explorer UI with the BitBake command:
2313 <literallayout class='monospaced'> 2313 <literallayout class='monospaced'>
2314 $ cd &lt;image-directory&gt; 2314 $ cd &lt;image-directory&gt;
2315 $ bitbake -u depexp -g &lt;image&gt; 2315 $ bitbake -u depexp -g &lt;image&gt;
2316 </literallayout> 2316 </literallayout>
2317 Use the interface to select potential packages you wish to 2317 Use the interface to select potential packages you wish to
2318 eliminate and see their dependency relationships. 2318 eliminate and see their dependency relationships.
2319 </para> 2319 </para>
2320 2320
2321 <para> 2321 <para>
2322 When deciding how to reduce the size, get rid of packages that 2322 When deciding how to reduce the size, get rid of packages that
2323 result in minimal impact on the feature set. 2323 result in minimal impact on the feature set.
2324 For example, you might not need a VGA display. 2324 For example, you might not need a VGA display.
2325 Or, you might be able to get by with <filename>devtmpfs</filename> 2325 Or, you might be able to get by with <filename>devtmpfs</filename>
2326 and <filename>mdev</filename>. 2326 and <filename>mdev</filename>.
@@ -2328,8 +2328,8 @@
2328 2328
2329 <para> 2329 <para>
2330 Use the <filename>local.conf</filename> file to make changes. 2330 Use the <filename>local.conf</filename> file to make changes.
2331 For example, to eliminate <filename>udev</filename> and 2331 For example, to eliminate <filename>udev</filename> and
2332 <filename>glib</filename>, set the following in the 2332 <filename>glib</filename>, set the following in the
2333 local configuration file: 2333 local configuration file:
2334 <literallayout class='monospaced'> 2334 <literallayout class='monospaced'>
2335 VIRTUAL-RUNTIME_dev_manager = "" 2335 VIRTUAL-RUNTIME_dev_manager = ""
@@ -2337,21 +2337,21 @@
2337 </para> 2337 </para>
2338 2338
2339 <para> 2339 <para>
2340 Some other examples of where you can look to eliminate size 2340 Some other examples of where you can look to eliminate size
2341 from the root filesystem are using <filename>ext2</filename> 2341 from the root filesystem are using <filename>ext2</filename>
2342 rather than <filename>ext3</filename>, which requires a 2342 rather than <filename>ext3</filename>, which requires a
2343 1 Mbyte journal. 2343 1 Mbyte journal.
2344 If you are okay with running read-only you don't need this 2344 If you are okay with running read-only you don't need this
2345 journal. 2345 journal.
2346 </para> 2346 </para>
2347 2347
2348 <note> 2348 <note>
2349 After each round of elimination, you need to rebuild your 2349 After each round of elimination, you need to rebuild your
2350 system and then use the tools to see the effects of your 2350 system and then use the tools to see the effects of your
2351 reductions. 2351 reductions.
2352 </note> 2352 </note>
2353 2353
2354 2354
2355 </section> 2355 </section>
2356 2356
2357 <section id='trim-the-kernel'> 2357 <section id='trim-the-kernel'>
@@ -2370,51 +2370,51 @@
2370 2370
2371 <para> 2371 <para>
2372 Run the <filename>ksize.py</filename> script from the top-level 2372 Run the <filename>ksize.py</filename> script from the top-level
2373 Linux build directory to get an idea of what is making up 2373 Linux build directory to get an idea of what is making up
2374 the kernel: 2374 the kernel:
2375 <literallayout class='monospaced'> 2375 <literallayout class='monospaced'>
2376 $ cd &lt;top-level-linux-build-directory&gt; 2376 $ cd &lt;top-level-linux-build-directory&gt;
2377 $ ksize.py > ksize.log 2377 $ ksize.py > ksize.log
2378 $ cat ksize.log 2378 $ cat ksize.log
2379 </literallayout> 2379 </literallayout>
2380 When you examine the log, you will see how much space is 2380 When you examine the log, you will see how much space is
2381 taken up with the built-in <filename>.o</filename> files for 2381 taken up with the built-in <filename>.o</filename> files for
2382 drivers, networking, core kernel files, filesystem, sound, 2382 drivers, networking, core kernel files, filesystem, sound,
2383 and so forth. 2383 and so forth.
2384 Look to reduce the areas that are large and taking up around 2384 Look to reduce the areas that are large and taking up around
2385 the "90% rule". 2385 the "90% rule".
2386 </para> 2386 </para>
2387 2387
2388 <para> 2388 <para>
2389 To examine, or drill down, into any particular area, use the 2389 To examine, or drill down, into any particular area, use the
2390 <filename>-d</filename> option with the script: 2390 <filename>-d</filename> option with the script:
2391 <literallayout class='monospaced'> 2391 <literallayout class='monospaced'>
2392 $ ksize.py -d > ksize.log 2392 $ ksize.py -d > ksize.log
2393 </literallayout> 2393 </literallayout>
2394 Using this option breaks out the individual file information 2394 Using this option breaks out the individual file information
2395 for each area of the kernel (e.g. drivers, networking, and 2395 for each area of the kernel (e.g. drivers, networking, and
2396 so forth). 2396 so forth).
2397 </para> 2397 </para>
2398 2398
2399 <para> 2399 <para>
2400 Use your log file to see what you can eliminate from the kernel 2400 Use your log file to see what you can eliminate from the kernel
2401 based on features you can let go. 2401 based on features you can let go.
2402 For example, if you are not going to need sound, you do not 2402 For example, if you are not going to need sound, you do not
2403 need any drivers that support sound. 2403 need any drivers that support sound.
2404 </para> 2404 </para>
2405 2405
2406 <para> 2406 <para>
2407 After figuring out what to eliminate, you need to reconfigure 2407 After figuring out what to eliminate, you need to reconfigure
2408 kernel to reflect those changes during the next build. 2408 kernel to reflect those changes during the next build.
2409 You could run <filename>menuconfig</filename> and make all your 2409 You could run <filename>menuconfig</filename> and make all your
2410 changes at once. 2410 changes at once.
2411 However, that makes it difficult to see the effects of your 2411 However, that makes it difficult to see the effects of your
2412 individual eliminations and also makes it difficult to replicate 2412 individual eliminations and also makes it difficult to replicate
2413 the changes for perhaps another target device. 2413 the changes for perhaps another target device.
2414 A better method is to start with no configurations using 2414 A better method is to start with no configurations using
2415 <filename>allnoconfig</filename>, create configuration 2415 <filename>allnoconfig</filename>, create configuration
2416 fragments for individual changes, and then manage the 2416 fragments for individual changes, and then manage the
2417 fragments into a single configuration file using 2417 fragments into a single configuration file using
2418 <filename>merge_config.sh</filename>. 2418 <filename>merge_config.sh</filename>.
2419 The tool makes it easy for you to iterate using the 2419 The tool makes it easy for you to iterate using the
2420 configuration change/build cycle. 2420 configuration change/build cycle.
@@ -2422,7 +2422,7 @@
2422 2422
2423 <para> 2423 <para>
2424 Each time you make configuration changes, you need to rebuild 2424 Each time you make configuration changes, you need to rebuild
2425 the kernel and check to see what impact your changes had on 2425 the kernel and check to see what impact your changes had on
2426 the overall size. 2426 the overall size.
2427 </para> 2427 </para>
2428 </section> 2428 </section>
@@ -2432,16 +2432,16 @@
2432 2432
2433 <para> 2433 <para>
2434 If you have not reached your goals on system size, you need 2434 If you have not reached your goals on system size, you need
2435 to iterate on the process. 2435 to iterate on the process.
2436 The process is the same. 2436 The process is the same.
2437 Use the tools and see just what is taking up 90% of the root 2437 Use the tools and see just what is taking up 90% of the root
2438 filesystem and the kernel. 2438 filesystem and the kernel.
2439 Decide what you can eliminate without limiting your device 2439 Decide what you can eliminate without limiting your device
2440 beyond what you need. 2440 beyond what you need.
2441 </para> 2441 </para>
2442 2442
2443 <para> 2443 <para>
2444 Depending on your system, a good place to look might be 2444 Depending on your system, a good place to look might be
2445 Busybox, which provides a stripped down 2445 Busybox, which provides a stripped down
2446 version of Unix tools in a single, executable file. 2446 version of Unix tools in a single, executable file.
2447 You might be able to drop virtual terminal services or perhaps 2447 You might be able to drop virtual terminal services or perhaps
@@ -3004,9 +3004,11 @@
3004 <para> 3004 <para>
3005 You might find that there are groups of recipes or append files 3005 You might find that there are groups of recipes or append files
3006 that you want to filter out of the build process. 3006 that you want to filter out of the build process.
3007 For example, recipes you know you will never use or want should not 3007 Usually, this is not necessary.
3008 be part of the build. 3008 However, on rare occasions where you might want to use a
3009 Removing these files from parsing speeds up parts of the build. 3009 layer but exclude parts that are causing problems, such
3010 as introducing a different version of a recipe, you can
3011 use <filename>BBMASK</filename> to exclude the recipe.
3010 </para> 3012 </para>
3011 3013
3012 <para> 3014 <para>