diff options
| author | Scott Rifenbark <srifenbark@gmail.com> | 2017-09-22 12:18:18 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-09-26 11:18:59 +0100 |
| commit | de671802c8de9311cc292456d69cafb7be128b0b (patch) | |
| tree | 99272375914e3bf041f044803d0a24d83b6d7624 /documentation/dev-manual | |
| parent | c1d3dbb5bdbea42c3f4b4706872bd2444e850c7c (diff) | |
| download | poky-de671802c8de9311cc292456d69cafb7be128b0b.tar.gz | |
dev-manual: Compatibility program and moving kernel configuration
Should have been two commits but I forgot to do them separately.
1. I updated the YP Compatible Program section.
2. I moved the "Configuring the Kernel" section from the dev-manual
to the kernel-dev manual.
(From yocto-docs rev: cdb5bbc917db55a2ca987ce9b9ed371f9fca6524)
Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/dev-manual')
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 591 |
1 files changed, 62 insertions, 529 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 0c2e60f006..f82d37e1dc 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -442,54 +442,65 @@ | |||
| 442 | existing Yocto Project layers (i.e. the layer is compatible | 442 | existing Yocto Project layers (i.e. the layer is compatible |
| 443 | with the Yocto Project). | 443 | with the Yocto Project). |
| 444 | Ensuring compatibility makes the layer easy to be consumed | 444 | Ensuring compatibility makes the layer easy to be consumed |
| 445 | by others in the Yocto Project community and allows you | 445 | by others in the Yocto Project community and could allow you |
| 446 | permission to use the Yocto Project Compatibility logo. | 446 | permission to use the Yocto Project Compatibility Logo. |
| 447 | </para> | 447 | <note> |
| 448 | 448 | Only Yocto Project member organizations are permitted to | |
| 449 | <para> | 449 | use the Yocto Project Compatibility Logo. |
| 450 | Version 1.0 of the Yocto Project Compatibility Program has | 450 | The logo is not available for general use. |
| 451 | been in existence for a number of releases. | 451 | For information on how to become a Yocto Project member |
| 452 | This version of the program consists of the layer application | 452 | organization, see the |
| 453 | process that requests permission to use the Yocto Project | 453 | <ulink url='&YOCTO_HOME_URL;/ecosystem/member-organizations'>Member Organizations</ulink> |
| 454 | Compatibility logo for your layer and application. | 454 | page of the Yocto Project website. |
| 455 | You can find version 1.0 of the form at | 455 | </note> |
| 456 | <ulink url='https://www.yoctoproject.org/webform/yocto-project-compatible-registration'></ulink>. | ||
| 457 | To be granted permission to use the logo, you need to be able | ||
| 458 | to answer "Yes" to the questions or have an acceptable | ||
| 459 | explanation for any questions answered "No". | ||
| 460 | </para> | 456 | </para> |
| 461 | 457 | ||
| 462 | <para> | 458 | <para> |
| 463 | A second version (2.0) of the Yocto Project Compatibility | 459 | The Yocto Project Compatibility Program consists of a layer |
| 464 | Program is currently under development. | 460 | application process that requests permission to use the Yocto |
| 465 | Included as part of version 2.0 (and currently available) is | 461 | Project Compatibility Logo for your layer and application. |
| 466 | the <filename>yocto-compat-layer.py</filename> script. | 462 | The process consists of two parts: |
| 467 | When run against a layer, this script tests the layer against | 463 | <orderedlist> |
| 468 | tighter constraints based on experiences of how layers have | 464 | <listitem><para> |
| 469 | worked in the real world and where pitfalls have been found. | 465 | Successfully passing a script |
| 466 | (<filename>yocto-compat-layer.py</filename>) that | ||
| 467 | when run against your layer, tests it against | ||
| 468 | constraints based on experiences of how layers have | ||
| 469 | worked in the real world and where pitfalls have been | ||
| 470 | found. | ||
| 471 | Getting a "PASS" result from the script is required for | ||
| 472 | successful compatibility registration. | ||
| 473 | </para></listitem> | ||
| 474 | <listitem><para> | ||
| 475 | Completion of an application acceptance form, which | ||
| 476 | you can find at | ||
| 477 | <ulink url='https://www.yoctoproject.org/webform/yocto-project-compatible-registration'></ulink>. | ||
| 478 | </para></listitem> | ||
| 479 | </orderedlist> | ||
| 470 | </para> | 480 | </para> |
| 471 | 481 | ||
| 472 | <para> | 482 | <para> |
| 473 | Part of the 2.0 version of the program that is not currently | 483 | To be granted permission to use the logo, you need to satisfy |
| 474 | available but is in development is an updated compatibility | 484 | the following: |
| 475 | application form. | 485 | <itemizedlist> |
| 476 | This updated form, among other questions, specifically | 486 | <listitem><para> |
| 477 | asks if your layer has passed the test using the | 487 | Be able to check the box indicating that you |
| 478 | <filename>yocto-compat-layer.py</filename> script. | 488 | got a "PASS" when running the script against your |
| 479 | <note><title>Tip</title> | 489 | layer. |
| 480 | Even though the updated application form is currently | 490 | </para></listitem> |
| 481 | unavailable for version 2.0 of the Yocto Project | 491 | <listitem><para> |
| 482 | Compatibility Program, the | 492 | Answer "Yes" to the questions on the form or have an |
| 483 | <filename>yocto-compat-layer.py</filename> script is | 493 | acceptable explanation for any questions answered "No". |
| 484 | available in OE-Core. | 494 | </para></listitem> |
| 485 | You can use the script to assess the status of your | 495 | <listitem><para> |
| 486 | layers in advance of the 2.0 release of the program. | 496 | You need to be a Yocto Project Member Organization. |
| 487 | </note> | 497 | </para></listitem> |
| 498 | </itemizedlist> | ||
| 488 | </para> | 499 | </para> |
| 489 | 500 | ||
| 490 | <para> | 501 | <para> |
| 491 | The remainder of this section presents information on the | 502 | The remainder of this section presents information on the |
| 492 | version 1.0 registration form and on the | 503 | registration form and on the |
| 493 | <filename>yocto-compat-layer.py</filename> script. | 504 | <filename>yocto-compat-layer.py</filename> script. |
| 494 | </para> | 505 | </para> |
| 495 | 506 | ||
| @@ -497,10 +508,10 @@ | |||
| 497 | <title>Yocto Project Compatibility Program Application</title> | 508 | <title>Yocto Project Compatibility Program Application</title> |
| 498 | 509 | ||
| 499 | <para> | 510 | <para> |
| 500 | Use the 1.0 version of the form to apply for your | 511 | Use the form to apply for your layer's compatibility |
| 501 | layer's compatibility approval. | 512 | approval. |
| 502 | Upon successful application, you can use the Yocto | 513 | Upon successful application, you can use the Yocto |
| 503 | Project Compatibility logo with your layer and the | 514 | Project Compatibility Logo with your layer and the |
| 504 | application that uses your layer. | 515 | application that uses your layer. |
| 505 | </para> | 516 | </para> |
| 506 | 517 | ||
| @@ -542,22 +553,14 @@ | |||
| 542 | <title><filename>yocto-compat-layer.py</filename> Script</title> | 553 | <title><filename>yocto-compat-layer.py</filename> Script</title> |
| 543 | 554 | ||
| 544 | <para> | 555 | <para> |
| 545 | The <filename>yocto-compat-layer.py</filename> script, | 556 | The <filename>yocto-compat-layer.py</filename> script |
| 546 | which is currently available, provides you a way to | 557 | provides you a way to assess how compatible your layer is |
| 547 | assess how compatible your layer is with the Yocto | 558 | with the Yocto Project. |
| 548 | Project. | ||
| 549 | You should run this script prior to using the form to | 559 | You should run this script prior to using the form to |
| 550 | apply for compatibility as described in the previous | 560 | apply for compatibility as described in the previous |
| 551 | section. | 561 | section. |
| 552 | <note> | 562 | You need to achieve a "PASS" result in order to have |
| 553 | Because the script is part of the 2.0 release of the | 563 | your application form successfully processed. |
| 554 | Yocto Project Compatibility Program, you are not | ||
| 555 | required to successfully run your layer against it | ||
| 556 | in order to be granted compatibility status. | ||
| 557 | However, it is a good idea as it promotes | ||
| 558 | well-behaved layers and gives you an idea of where your | ||
| 559 | layer stands regarding compatibility. | ||
| 560 | </note> | ||
| 561 | </para> | 564 | </para> |
| 562 | 565 | ||
| 563 | <para> | 566 | <para> |
| @@ -6142,479 +6145,6 @@ Some notes from Cal: | |||
| 6142 | </para> | 6145 | </para> |
| 6143 | </section> | 6146 | </section> |
| 6144 | 6147 | ||
| 6145 | <section id='configuring-the-kernel'> | ||
| 6146 | <title>Configuring the Kernel</title> | ||
| 6147 | |||
| 6148 | <para> | ||
| 6149 | Configuring the Yocto Project kernel consists of making sure the | ||
| 6150 | <filename>.config</filename> file has all the right information | ||
| 6151 | in it for the image you are building. | ||
| 6152 | You can use the <filename>menuconfig</filename> tool and | ||
| 6153 | configuration fragments to make sure your | ||
| 6154 | <filename>.config</filename> file is just how you need it. | ||
| 6155 | You can also save known configurations in a | ||
| 6156 | <filename>defconfig</filename> file that the build system can use | ||
| 6157 | for kernel configuration. | ||
| 6158 | </para> | ||
| 6159 | |||
| 6160 | <para> | ||
| 6161 | This section describes how to use <filename>menuconfig</filename>, | ||
| 6162 | create and use configuration fragments, and how to interactively | ||
| 6163 | modify your <filename>.config</filename> file to create the | ||
| 6164 | leanest kernel configuration file possible. | ||
| 6165 | </para> | ||
| 6166 | |||
| 6167 | <para> | ||
| 6168 | For more information on kernel configuration, see the | ||
| 6169 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>" | ||
| 6170 | section in the Yocto Project Linux Kernel Development Manual. | ||
| 6171 | </para> | ||
| 6172 | |||
| 6173 | <section id='using-menuconfig'> | ||
| 6174 | <title>Using <filename>menuconfig</filename></title> | ||
| 6175 | |||
| 6176 | <para> | ||
| 6177 | The easiest way to define kernel configurations is to set them through the | ||
| 6178 | <filename>menuconfig</filename> tool. | ||
| 6179 | This tool provides an interactive method with which | ||
| 6180 | to set kernel configurations. | ||
| 6181 | For general information on <filename>menuconfig</filename>, see | ||
| 6182 | <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>. | ||
| 6183 | </para> | ||
| 6184 | |||
| 6185 | <para> | ||
| 6186 | To use the <filename>menuconfig</filename> tool in the Yocto Project development | ||
| 6187 | environment, you must launch it using BitBake. | ||
| 6188 | Thus, the environment must be set up using the | ||
| 6189 | <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink> | ||
| 6190 | script found in the | ||
| 6191 | <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>. | ||
| 6192 | You must also be sure of the state of your build in the | ||
| 6193 | <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>. | ||
| 6194 | The following commands run <filename>menuconfig</filename> | ||
| 6195 | assuming the Source Directory's top-level folder is | ||
| 6196 | <filename>~/poky</filename>: | ||
| 6197 | <literallayout class='monospaced'> | ||
| 6198 | $ cd poky | ||
| 6199 | $ source oe-init-build-env | ||
| 6200 | $ bitbake linux-yocto -c kernel_configme -f | ||
| 6201 | $ bitbake linux-yocto -c menuconfig | ||
| 6202 | </literallayout> | ||
| 6203 | Once <filename>menuconfig</filename> comes up, its standard | ||
| 6204 | interface allows you to interactively examine and configure | ||
| 6205 | all the kernel configuration parameters. | ||
| 6206 | After making your changes, simply exit the tool and save your | ||
| 6207 | changes to create an updated version of the | ||
| 6208 | <filename>.config</filename> configuration file. | ||
| 6209 | </para> | ||
| 6210 | |||
| 6211 | <para> | ||
| 6212 | Consider an example that configures the <filename>linux-yocto-3.14</filename> | ||
| 6213 | kernel. | ||
| 6214 | The OpenEmbedded build system recognizes this kernel as | ||
| 6215 | <filename>linux-yocto</filename>. | ||
| 6216 | Thus, the following commands from the shell in which you previously sourced the | ||
| 6217 | environment initialization script cleans the shared state cache and the | ||
| 6218 | <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink> | ||
| 6219 | directory and then runs <filename>menuconfig</filename>: | ||
| 6220 | <literallayout class='monospaced'> | ||
| 6221 | $ bitbake linux-yocto -c menuconfig | ||
| 6222 | </literallayout> | ||
| 6223 | </para> | ||
| 6224 | |||
| 6225 | <para> | ||
| 6226 | Once <filename>menuconfig</filename> launches, use the interface | ||
| 6227 | to navigate through the selections to find the configuration settings in | ||
| 6228 | which you are interested. | ||
| 6229 | For example, consider the <filename>CONFIG_SMP</filename> configuration setting. | ||
| 6230 | You can find it at <filename>Processor Type and Features</filename> under | ||
| 6231 | the configuration selection <filename>Symmetric Multi-processing Support</filename>. | ||
| 6232 | After highlighting the selection, use the arrow keys to select or deselect | ||
| 6233 | the setting. | ||
| 6234 | When you are finished with all your selections, exit out and save them. | ||
| 6235 | </para> | ||
| 6236 | |||
| 6237 | <para> | ||
| 6238 | Saving the selections updates the <filename>.config</filename> configuration file. | ||
| 6239 | This is the file that the OpenEmbedded build system uses to configure the | ||
| 6240 | kernel during the build. | ||
| 6241 | You can find and examine this file in the Build Directory in | ||
| 6242 | <filename>tmp/work/</filename>. | ||
| 6243 | The actual <filename>.config</filename> is located in the area where the | ||
| 6244 | specific kernel is built. | ||
| 6245 | For example, if you were building a Linux Yocto kernel based on the | ||
| 6246 | Linux 3.14 kernel and you were building a QEMU image targeted for | ||
| 6247 | <filename>x86</filename> architecture, the | ||
| 6248 | <filename>.config</filename> file would be located here: | ||
| 6249 | <literallayout class='monospaced'> | ||
| 6250 | poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.14.11+git1+84f... | ||
| 6251 | ...656ed30-r1/linux-qemux86-standard-build | ||
| 6252 | </literallayout> | ||
| 6253 | <note> | ||
| 6254 | The previous example directory is artificially split and many of the characters | ||
| 6255 | in the actual filename are omitted in order to make it more readable. | ||
| 6256 | Also, depending on the kernel you are using, the exact pathname | ||
| 6257 | for <filename>linux-yocto-3.14...</filename> might differ. | ||
| 6258 | </note> | ||
| 6259 | </para> | ||
| 6260 | |||
| 6261 | <para> | ||
| 6262 | Within the <filename>.config</filename> file, you can see the kernel settings. | ||
| 6263 | For example, the following entry shows that symmetric multi-processor support | ||
| 6264 | is not set: | ||
| 6265 | <literallayout class='monospaced'> | ||
| 6266 | # CONFIG_SMP is not set | ||
| 6267 | </literallayout> | ||
| 6268 | </para> | ||
| 6269 | |||
| 6270 | <para> | ||
| 6271 | A good method to isolate changed configurations is to use a combination of the | ||
| 6272 | <filename>menuconfig</filename> tool and simple shell commands. | ||
| 6273 | Before changing configurations with <filename>menuconfig</filename>, copy the | ||
| 6274 | existing <filename>.config</filename> and rename it to something else, | ||
| 6275 | use <filename>menuconfig</filename> to make | ||
| 6276 | as many changes as you want and save them, then compare the renamed configuration | ||
| 6277 | file against the newly created file. | ||
| 6278 | You can use the resulting differences as your base to create configuration fragments | ||
| 6279 | to permanently save in your kernel layer. | ||
| 6280 | <note> | ||
| 6281 | Be sure to make a copy of the <filename>.config</filename> and don't just | ||
| 6282 | rename it. | ||
| 6283 | The build system needs an existing <filename>.config</filename> | ||
| 6284 | from which to work. | ||
| 6285 | </note> | ||
| 6286 | </para> | ||
| 6287 | </section> | ||
| 6288 | |||
| 6289 | <section id='creating-a-defconfig-file'> | ||
| 6290 | <title>Creating a <filename>defconfig</filename> File</title> | ||
| 6291 | |||
| 6292 | <para> | ||
| 6293 | A <filename>defconfig</filename> file is simply a | ||
| 6294 | <filename>.config</filename> renamed to "defconfig". | ||
| 6295 | You can use a <filename>defconfig</filename> file | ||
| 6296 | to retain a known set of kernel configurations from which the | ||
| 6297 | OpenEmbedded build system can draw to create the final | ||
| 6298 | <filename>.config</filename> file. | ||
| 6299 | <note> | ||
| 6300 | Out-of-the-box, the Yocto Project never ships a | ||
| 6301 | <filename>defconfig</filename> or | ||
| 6302 | <filename>.config</filename> file. | ||
| 6303 | The OpenEmbedded build system creates the final | ||
| 6304 | <filename>.config</filename> file used to configure the | ||
| 6305 | kernel. | ||
| 6306 | </note> | ||
| 6307 | </para> | ||
| 6308 | |||
| 6309 | <para> | ||
| 6310 | To create a <filename>defconfig</filename>, start with a | ||
| 6311 | complete, working Linux kernel <filename>.config</filename> | ||
| 6312 | file. | ||
| 6313 | Copy that file to the appropriate | ||
| 6314 | <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename> | ||
| 6315 | directory in your layer's | ||
| 6316 | <filename>recipes-kernel/linux</filename> directory, and rename | ||
| 6317 | the copied file to "defconfig". | ||
| 6318 | Then, add the following lines to the linux-yocto | ||
| 6319 | <filename>.bbappend</filename> file in your layer: | ||
| 6320 | <literallayout class='monospaced'> | ||
| 6321 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" | ||
| 6322 | SRC_URI += "file://defconfig" | ||
| 6323 | </literallayout> | ||
| 6324 | The | ||
| 6325 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> | ||
| 6326 | tells the build system how to search for the file, while the | ||
| 6327 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink> | ||
| 6328 | extends the | ||
| 6329 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink> | ||
| 6330 | variable (search directories) to include the | ||
| 6331 | <filename>${PN}</filename> directory you created to hold the | ||
| 6332 | configuration changes. | ||
| 6333 | <note> | ||
| 6334 | The build system applies the configurations from the | ||
| 6335 | <filename>defconfig</filename> file before applying any | ||
| 6336 | subsequent configuration fragments. | ||
| 6337 | The final kernel configuration is a combination of the | ||
| 6338 | configurations in the <filename>defconfig</filename> | ||
| 6339 | file and any configuration fragments you provide. | ||
| 6340 | You need to realize that if you have any configuration | ||
| 6341 | fragments, the build system applies these on top of and | ||
| 6342 | after applying the existing defconfig file configurations. | ||
| 6343 | </note> | ||
| 6344 | For more information on configuring the kernel, see the | ||
| 6345 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>" | ||
| 6346 | and | ||
| 6347 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>" | ||
| 6348 | sections, both in the Yocto Project Linux Kernel Development | ||
| 6349 | Manual. | ||
| 6350 | </para> | ||
| 6351 | </section> | ||
| 6352 | |||
| 6353 | <section id='creating-config-fragments'> | ||
| 6354 | <title>Creating Configuration Fragments</title> | ||
| 6355 | |||
| 6356 | <para> | ||
| 6357 | Configuration fragments are simply kernel options that appear in a file | ||
| 6358 | placed where the OpenEmbedded build system can find and apply them. | ||
| 6359 | Syntactically, the configuration statement is identical to what would appear | ||
| 6360 | in the <filename>.config</filename> file, which is in the | ||
| 6361 | <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>: | ||
| 6362 | <literallayout class='monospaced'> | ||
| 6363 | tmp/work/<replaceable>arch</replaceable>-poky-linux/linux-yocto-<replaceable>release_specific_string</replaceable>/linux-<replaceable>arch</replaceable>-<replaceable>build_type</replaceable> | ||
| 6364 | </literallayout> | ||
| 6365 | </para> | ||
| 6366 | |||
| 6367 | <para> | ||
| 6368 | It is simple to create a configuration fragment. | ||
| 6369 | For example, issuing the following from the shell creates a configuration fragment | ||
| 6370 | file named <filename>my_smp.cfg</filename> that enables multi-processor support | ||
| 6371 | within the kernel: | ||
| 6372 | <literallayout class='monospaced'> | ||
| 6373 | $ echo "CONFIG_SMP=y" >> my_smp.cfg | ||
| 6374 | </literallayout> | ||
| 6375 | <note> | ||
| 6376 | All configuration fragment files must use the | ||
| 6377 | <filename>.cfg</filename> extension in order for the | ||
| 6378 | OpenEmbedded build system to recognize them as a | ||
| 6379 | configuration fragment. | ||
| 6380 | </note> | ||
| 6381 | </para> | ||
| 6382 | |||
| 6383 | <para> | ||
| 6384 | Where do you put your configuration fragment files? | ||
| 6385 | You can place these files in the same area pointed to by | ||
| 6386 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>. | ||
| 6387 | The OpenEmbedded build system picks up the configuration and | ||
| 6388 | adds it to the kernel's configuration. | ||
| 6389 | For example, suppose you had a set of configuration options | ||
| 6390 | in a file called <filename>myconfig.cfg</filename>. | ||
| 6391 | If you put that file inside a directory named | ||
| 6392 | <filename>linux-yocto</filename> that resides in the same | ||
| 6393 | directory as the kernel's append file and then add a | ||
| 6394 | <filename>SRC_URI</filename> statement such as the following | ||
| 6395 | to the kernel's append file, those configuration options | ||
| 6396 | will be picked up and applied when the kernel is built. | ||
| 6397 | <literallayout class='monospaced'> | ||
| 6398 | SRC_URI += "file://myconfig.cfg" | ||
| 6399 | </literallayout> | ||
| 6400 | </para> | ||
| 6401 | |||
| 6402 | <para> | ||
| 6403 | As mentioned earlier, you can group related configurations into multiple files and | ||
| 6404 | name them all in the <filename>SRC_URI</filename> statement as well. | ||
| 6405 | For example, you could group separate configurations specifically for Ethernet and graphics | ||
| 6406 | into their own files and add those by using a <filename>SRC_URI</filename> statement like the | ||
| 6407 | following in your append file: | ||
| 6408 | <literallayout class='monospaced'> | ||
| 6409 | SRC_URI += "file://myconfig.cfg \ | ||
| 6410 | file://eth.cfg \ | ||
| 6411 | file://gfx.cfg" | ||
| 6412 | </literallayout> | ||
| 6413 | </para> | ||
| 6414 | </section> | ||
| 6415 | |||
| 6416 | <section id='fine-tuning-the-kernel-configuration-file'> | ||
| 6417 | <title>Fine-Tuning the Kernel Configuration File</title> | ||
| 6418 | |||
| 6419 | <para> | ||
| 6420 | You can make sure the <filename>.config</filename> file is as lean or efficient as | ||
| 6421 | possible by reading the output of the kernel configuration fragment audit, | ||
| 6422 | noting any issues, making changes to correct the issues, and then repeating. | ||
| 6423 | </para> | ||
| 6424 | |||
| 6425 | <para> | ||
| 6426 | As part of the kernel build process, the | ||
| 6427 | <filename>do_kernel_configcheck</filename> task runs. | ||
| 6428 | This task validates the kernel configuration by checking the final | ||
| 6429 | <filename>.config</filename> file against the input files. | ||
| 6430 | During the check, the task produces warning messages for the following | ||
| 6431 | issues: | ||
| 6432 | <itemizedlist> | ||
| 6433 | <listitem><para>Requested options that did not make the final | ||
| 6434 | <filename>.config</filename> file.</para></listitem> | ||
| 6435 | <listitem><para>Configuration items that appear twice in the same | ||
| 6436 | configuration fragment.</para></listitem> | ||
| 6437 | <listitem><para>Configuration items tagged as "required" that were overridden. | ||
| 6438 | </para></listitem> | ||
| 6439 | <listitem><para>A board overrides a non-board specific option.</para></listitem> | ||
| 6440 | <listitem><para>Listed options not valid for the kernel being processed. | ||
| 6441 | In other words, the option does not appear anywhere.</para></listitem> | ||
| 6442 | </itemizedlist> | ||
| 6443 | <note> | ||
| 6444 | The <filename>do_kernel_configcheck</filename> task can | ||
| 6445 | also optionally report if an option is overridden during | ||
| 6446 | processing. | ||
| 6447 | </note> | ||
| 6448 | </para> | ||
| 6449 | |||
| 6450 | <para> | ||
| 6451 | For each output warning, a message points to the file | ||
| 6452 | that contains a list of the options and a pointer to the | ||
| 6453 | configuration fragment that defines them. | ||
| 6454 | Collectively, the files are the key to streamlining the | ||
| 6455 | configuration. | ||
| 6456 | </para> | ||
| 6457 | |||
| 6458 | <para> | ||
| 6459 | To streamline the configuration, do the following: | ||
| 6460 | <orderedlist> | ||
| 6461 | <listitem><para>Start with a full configuration that you | ||
| 6462 | know works - it builds and boots successfully. | ||
| 6463 | This configuration file will be your baseline. | ||
| 6464 | </para></listitem> | ||
| 6465 | <listitem><para>Separately run the | ||
| 6466 | <filename>do_kernel_configme</filename> and | ||
| 6467 | <filename>do_kernel_configcheck</filename> tasks. | ||
| 6468 | </para></listitem> | ||
| 6469 | <listitem><para>Take the resulting list of files from the | ||
| 6470 | <filename>do_kernel_configcheck</filename> task | ||
| 6471 | warnings and do the following: | ||
| 6472 | <itemizedlist> | ||
| 6473 | <listitem><para> | ||
| 6474 | Drop values that are redefined in the fragment | ||
| 6475 | but do not change the final | ||
| 6476 | <filename>.config</filename> file. | ||
| 6477 | </para></listitem> | ||
| 6478 | <listitem><para> | ||
| 6479 | Analyze and potentially drop values from the | ||
| 6480 | <filename>.config</filename> file that override | ||
| 6481 | required configurations. | ||
| 6482 | </para></listitem> | ||
| 6483 | <listitem><para> | ||
| 6484 | Analyze and potentially remove non-board | ||
| 6485 | specific options. | ||
| 6486 | </para></listitem> | ||
| 6487 | <listitem><para> | ||
| 6488 | Remove repeated and invalid options. | ||
| 6489 | </para></listitem> | ||
| 6490 | </itemizedlist></para></listitem> | ||
| 6491 | <listitem><para> | ||
| 6492 | After you have worked through the output of the kernel | ||
| 6493 | configuration audit, you can re-run the | ||
| 6494 | <filename>do_kernel_configme</filename> and | ||
| 6495 | <filename>do_kernel_configcheck</filename> tasks to | ||
| 6496 | see the results of your changes. | ||
| 6497 | If you have more issues, you can deal with them as | ||
| 6498 | described in the previous step. | ||
| 6499 | </para></listitem> | ||
| 6500 | </orderedlist> | ||
| 6501 | </para> | ||
| 6502 | |||
| 6503 | <para> | ||
| 6504 | Iteratively working through steps two through four eventually yields | ||
| 6505 | a minimal, streamlined configuration file. | ||
| 6506 | Once you have the best <filename>.config</filename>, you can build the Linux | ||
| 6507 | Yocto kernel. | ||
| 6508 | </para> | ||
| 6509 | </section> | ||
| 6510 | |||
| 6511 | <section id='determining-hardware-and-non-hardware-features-for-the-kernel-configuration-audit-phase'> | ||
| 6512 | <title>Determining Hardware and Non-Hardware Features for the Kernel Configuration Audit Phase</title> | ||
| 6513 | |||
| 6514 | <para> | ||
| 6515 | This section describes part of the kernel configuration audit | ||
| 6516 | phase that most developers can ignore. | ||
| 6517 | During this part of the audit phase, the contents of the final | ||
| 6518 | <filename>.config</filename> file are compared against the | ||
| 6519 | fragments specified by the system. | ||
| 6520 | These fragments can be system fragments, distro fragments, | ||
| 6521 | or user specified configuration elements. | ||
| 6522 | Regardless of their origin, the OpenEmbedded build system | ||
| 6523 | warns the user if a specific option is not included in the | ||
| 6524 | final kernel configuration. | ||
| 6525 | </para> | ||
| 6526 | |||
| 6527 | <para> | ||
| 6528 | In order to not overwhelm the user with configuration warnings, | ||
| 6529 | by default the system only reports on missing "hardware" | ||
| 6530 | options because a missing hardware option could mean a boot | ||
| 6531 | failure or that important hardware is not available. | ||
| 6532 | </para> | ||
| 6533 | |||
| 6534 | <para> | ||
| 6535 | To determine whether or not a given option is "hardware" or | ||
| 6536 | "non-hardware", the kernel Metadata contains files that | ||
| 6537 | classify individual or groups of options as either hardware | ||
| 6538 | or non-hardware. | ||
| 6539 | To better show this, consider a situation where the | ||
| 6540 | Yocto Project kernel cache contains the following files: | ||
| 6541 | <literallayout class='monospaced'> | ||
| 6542 | kernel-cache/features/drm-psb/hardware.cfg | ||
| 6543 | kernel-cache/features/kgdb/hardware.cfg | ||
| 6544 | kernel-cache/ktypes/base/hardware.cfg | ||
| 6545 | kernel-cache/bsp/mti-malta32/hardware.cfg | ||
| 6546 | kernel-cache/bsp/fsl-mpc8315e-rdb/hardware.cfg | ||
| 6547 | kernel-cache/bsp/qemu-ppc32/hardware.cfg | ||
| 6548 | kernel-cache/bsp/qemuarma9/hardware.cfg | ||
| 6549 | kernel-cache/bsp/mti-malta64/hardware.cfg | ||
| 6550 | kernel-cache/bsp/arm-versatile-926ejs/hardware.cfg | ||
| 6551 | kernel-cache/bsp/common-pc/hardware.cfg | ||
| 6552 | kernel-cache/bsp/common-pc-64/hardware.cfg | ||
| 6553 | kernel-cache/features/rfkill/non-hardware.cfg | ||
| 6554 | kernel-cache/ktypes/base/non-hardware.cfg | ||
| 6555 | kernel-cache/features/aufs/non-hardware.kcf | ||
| 6556 | kernel-cache/features/ocf/non-hardware.kcf | ||
| 6557 | kernel-cache/ktypes/base/non-hardware.kcf | ||
| 6558 | kernel-cache/ktypes/base/hardware.kcf | ||
| 6559 | kernel-cache/bsp/qemu-ppc32/hardware.kcf | ||
| 6560 | </literallayout> | ||
| 6561 | The following list provides explanations for the various | ||
| 6562 | files: | ||
| 6563 | <itemizedlist> | ||
| 6564 | <listitem><para><filename>hardware.kcf</filename>: | ||
| 6565 | Specifies a list of kernel Kconfig files that contain | ||
| 6566 | hardware options only. | ||
| 6567 | </para></listitem> | ||
| 6568 | <listitem><para><filename>non-hardware.kcf</filename>: | ||
| 6569 | Specifies a list of kernel Kconfig files that contain | ||
| 6570 | non-hardware options only. | ||
| 6571 | </para></listitem> | ||
| 6572 | <listitem><para><filename>hardware.cfg</filename>: | ||
| 6573 | Specifies a list of kernel | ||
| 6574 | <filename>CONFIG_</filename> options that are hardware, | ||
| 6575 | regardless of whether or not they are within a Kconfig | ||
| 6576 | file specified by a hardware or non-hardware | ||
| 6577 | Kconfig file (i.e. <filename>hardware.kcf</filename> or | ||
| 6578 | <filename>non-hardware.kcf</filename>). | ||
| 6579 | </para></listitem> | ||
| 6580 | <listitem><para><filename>non-hardware.cfg</filename>: | ||
| 6581 | Specifies a list of kernel | ||
| 6582 | <filename>CONFIG_</filename> options that are | ||
| 6583 | not hardware, regardless of whether or not they are | ||
| 6584 | within a Kconfig file specified by a hardware or | ||
| 6585 | non-hardware Kconfig file (i.e. | ||
| 6586 | <filename>hardware.kcf</filename> or | ||
| 6587 | <filename>non-hardware.kcf</filename>). | ||
| 6588 | </para></listitem> | ||
| 6589 | </itemizedlist> | ||
| 6590 | Here is a specific example using the | ||
| 6591 | <filename>kernel-cache/bsp/mti-malta32/hardware.cfg</filename>: | ||
| 6592 | <literallayout class='monospaced'> | ||
| 6593 | CONFIG_SERIAL_8250 | ||
| 6594 | CONFIG_SERIAL_8250_CONSOLE | ||
| 6595 | CONFIG_SERIAL_8250_NR_UARTS | ||
| 6596 | CONFIG_SERIAL_8250_PCI | ||
| 6597 | CONFIG_SERIAL_CORE | ||
| 6598 | CONFIG_SERIAL_CORE_CONSOLE | ||
| 6599 | CONFIG_VGA_ARB | ||
| 6600 | </literallayout> | ||
| 6601 | The kernel configuration audit automatically detects these | ||
| 6602 | files (hence the names must be exactly the ones discussed here), | ||
| 6603 | and uses them as inputs when generating warnings about the | ||
| 6604 | final <filename>.config</filename> file. | ||
| 6605 | </para> | ||
| 6606 | |||
| 6607 | <para> | ||
| 6608 | A user-specified kernel Metadata repository, or recipe space | ||
| 6609 | feature, can use these same files to classify options that are | ||
| 6610 | found within its <filename>.cfg</filename> files as hardware | ||
| 6611 | or non-hardware, to prevent the OpenEmbedded build system from | ||
| 6612 | producing an error or warning when an option is not in the | ||
| 6613 | final <filename>.config</filename> file. | ||
| 6614 | </para> | ||
| 6615 | </section> | ||
| 6616 | </section> | ||
| 6617 | |||
| 6618 | <section id='making-images-more-secure'> | 6148 | <section id='making-images-more-secure'> |
| 6619 | <title>Making Images More Secure</title> | 6149 | <title>Making Images More Secure</title> |
| 6620 | 6150 | ||
| @@ -7243,8 +6773,11 @@ Some notes from Cal: | |||
| 7243 | see the | 6773 | see the |
| 7244 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>" | 6774 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>" |
| 7245 | section of the Yocto Project Linux Kernel Development | 6775 | section of the Yocto Project Linux Kernel Development |
| 7246 | Manual and the "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>" | 6776 | Manual and the |
| 7247 | section, which is in this manual.</para></listitem> | 6777 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#creating-config-fragments'>Creating Configuration Fragments</ulink>" |
| 6778 | section in the Yocto Project Linux Kernel Development | ||
| 6779 | Manual. | ||
| 6780 | </para></listitem> | ||
| 7248 | <listitem><para><filename>bitbake -u taskexp -g <replaceable>bitbake_target</replaceable></filename>: | 6781 | <listitem><para><filename>bitbake -u taskexp -g <replaceable>bitbake_target</replaceable></filename>: |
| 7249 | Using the BitBake command with these options brings up | 6782 | Using the BitBake command with these options brings up |
| 7250 | a Dependency Explorer from which you can view file | 6783 | a Dependency Explorer from which you can view file |
