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/dev-manual-common-tasks.xml | |
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/dev-manual-common-tasks.xml')
-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 |