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/kernel-dev | |
| 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/kernel-dev')
| -rw-r--r-- | documentation/kernel-dev/kernel-dev-advanced.xml | 6 | ||||
| -rw-r--r-- | documentation/kernel-dev/kernel-dev-common.xml | 528 | ||||
| -rw-r--r-- | documentation/kernel-dev/kernel-dev-intro.xml | 2 |
3 files changed, 526 insertions, 10 deletions
diff --git a/documentation/kernel-dev/kernel-dev-advanced.xml b/documentation/kernel-dev/kernel-dev-advanced.xml index 0394e08444..a6f01a8e2a 100644 --- a/documentation/kernel-dev/kernel-dev-advanced.xml +++ b/documentation/kernel-dev/kernel-dev-advanced.xml | |||
| @@ -318,10 +318,10 @@ | |||
| 318 | CONFIG_NR_CPUS=64 | 318 | CONFIG_NR_CPUS=64 |
| 319 | </literallayout> | 319 | </literallayout> |
| 320 | You can find information on configuration fragment files in the | 320 | You can find information on configuration fragment files in the |
| 321 | "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-config-fragments'>Creating Configuration Fragments</ulink>" | 321 | "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>" |
| 322 | section of the Yocto Project Development Manual and in | 322 | section and in |
| 323 | the "<link linkend='generating-configuration-files'>Generating Configuration Files</link>" | 323 | the "<link linkend='generating-configuration-files'>Generating Configuration Files</link>" |
| 324 | section earlier in this manual. | 324 | section. |
| 325 | </para> | 325 | </para> |
| 326 | 326 | ||
| 327 | <para> | 327 | <para> |
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml index 28bedd1785..7f61b434cd 100644 --- a/documentation/kernel-dev/kernel-dev-common.xml +++ b/documentation/kernel-dev/kernel-dev-common.xml | |||
| @@ -900,8 +900,8 @@ | |||
| 900 | <para> | 900 | <para> |
| 901 | For a detailed example showing how to configure the kernel, | 901 | For a detailed example showing how to configure the kernel, |
| 902 | see the | 902 | see the |
| 903 | "<ulink url='&YOCTO_DOCS_DEV_URL;#configuring-the-kernel'>Configuring the Kernel</ulink>" | 903 | "<link linkend='configuring-the-kernel'>Configuring the Kernel</link>" |
| 904 | section in the Yocto Project Development Manual. | 904 | section. |
| 905 | </para> | 905 | </para> |
| 906 | </section> | 906 | </section> |
| 907 | 907 | ||
| @@ -1445,6 +1445,522 @@ | |||
| 1445 | </para> | 1445 | </para> |
| 1446 | </section> | 1446 | </section> |
| 1447 | 1447 | ||
| 1448 | |||
| 1449 | |||
| 1450 | |||
| 1451 | |||
| 1452 | |||
| 1453 | |||
| 1454 | |||
| 1455 | |||
| 1456 | |||
| 1457 | |||
| 1458 | |||
| 1459 | |||
| 1460 | |||
| 1461 | |||
| 1462 | |||
| 1463 | |||
| 1464 | |||
| 1465 | |||
| 1466 | |||
| 1467 | |||
| 1468 | |||
| 1469 | |||
| 1470 | |||
| 1471 | |||
| 1472 | |||
| 1473 | |||
| 1474 | |||
| 1475 | |||
| 1476 | <section id='configuring-the-kernel'> | ||
| 1477 | <title>Configuring the Kernel</title> | ||
| 1478 | |||
| 1479 | <para> | ||
| 1480 | Configuring the Yocto Project kernel consists of making sure the | ||
| 1481 | <filename>.config</filename> file has all the right information | ||
| 1482 | in it for the image you are building. | ||
| 1483 | You can use the <filename>menuconfig</filename> tool and | ||
| 1484 | configuration fragments to make sure your | ||
| 1485 | <filename>.config</filename> file is just how you need it. | ||
| 1486 | You can also save known configurations in a | ||
| 1487 | <filename>defconfig</filename> file that the build system can use | ||
| 1488 | for kernel configuration. | ||
| 1489 | </para> | ||
| 1490 | |||
| 1491 | <para> | ||
| 1492 | This section describes how to use <filename>menuconfig</filename>, | ||
| 1493 | create and use configuration fragments, and how to interactively | ||
| 1494 | modify your <filename>.config</filename> file to create the | ||
| 1495 | leanest kernel configuration file possible. | ||
| 1496 | </para> | ||
| 1497 | |||
| 1498 | <para> | ||
| 1499 | For more information on kernel configuration, see the | ||
| 1500 | "<link linkend='changing-the-configuration'>Changing the Configuration</link>" | ||
| 1501 | section. | ||
| 1502 | </para> | ||
| 1503 | |||
| 1504 | <section id='using-menuconfig'> | ||
| 1505 | <title>Using <filename>menuconfig</filename></title> | ||
| 1506 | |||
| 1507 | <para> | ||
| 1508 | The easiest way to define kernel configurations is to set them through the | ||
| 1509 | <filename>menuconfig</filename> tool. | ||
| 1510 | This tool provides an interactive method with which | ||
| 1511 | to set kernel configurations. | ||
| 1512 | For general information on <filename>menuconfig</filename>, see | ||
| 1513 | <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>. | ||
| 1514 | </para> | ||
| 1515 | |||
| 1516 | <para> | ||
| 1517 | To use the <filename>menuconfig</filename> tool in the Yocto Project development | ||
| 1518 | environment, you must launch it using BitBake. | ||
| 1519 | Thus, the environment must be set up using the | ||
| 1520 | <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink> | ||
| 1521 | script found in the | ||
| 1522 | <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>. | ||
| 1523 | You must also be sure of the state of your build in the | ||
| 1524 | <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>. | ||
| 1525 | The following commands run <filename>menuconfig</filename> | ||
| 1526 | assuming the Source Directory's top-level folder is | ||
| 1527 | <filename>~/poky</filename>: | ||
| 1528 | <literallayout class='monospaced'> | ||
| 1529 | $ cd poky | ||
| 1530 | $ source oe-init-build-env | ||
| 1531 | $ bitbake linux-yocto -c kernel_configme -f | ||
| 1532 | $ bitbake linux-yocto -c menuconfig | ||
| 1533 | </literallayout> | ||
| 1534 | Once <filename>menuconfig</filename> comes up, its standard | ||
| 1535 | interface allows you to interactively examine and configure | ||
| 1536 | all the kernel configuration parameters. | ||
| 1537 | After making your changes, simply exit the tool and save your | ||
| 1538 | changes to create an updated version of the | ||
| 1539 | <filename>.config</filename> configuration file. | ||
| 1540 | </para> | ||
| 1541 | |||
| 1542 | <para> | ||
| 1543 | Consider an example that configures the <filename>linux-yocto-3.14</filename> | ||
| 1544 | kernel. | ||
| 1545 | The OpenEmbedded build system recognizes this kernel as | ||
| 1546 | <filename>linux-yocto</filename>. | ||
| 1547 | Thus, the following commands from the shell in which you previously sourced the | ||
| 1548 | environment initialization script cleans the shared state cache and the | ||
| 1549 | <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink> | ||
| 1550 | directory and then runs <filename>menuconfig</filename>: | ||
| 1551 | <literallayout class='monospaced'> | ||
| 1552 | $ bitbake linux-yocto -c menuconfig | ||
| 1553 | </literallayout> | ||
| 1554 | </para> | ||
| 1555 | |||
| 1556 | <para> | ||
| 1557 | Once <filename>menuconfig</filename> launches, use the interface | ||
| 1558 | to navigate through the selections to find the configuration settings in | ||
| 1559 | which you are interested. | ||
| 1560 | For example, consider the <filename>CONFIG_SMP</filename> configuration setting. | ||
| 1561 | You can find it at <filename>Processor Type and Features</filename> under | ||
| 1562 | the configuration selection <filename>Symmetric Multi-processing Support</filename>. | ||
| 1563 | After highlighting the selection, use the arrow keys to select or deselect | ||
| 1564 | the setting. | ||
| 1565 | When you are finished with all your selections, exit out and save them. | ||
| 1566 | </para> | ||
| 1567 | |||
| 1568 | <para> | ||
| 1569 | Saving the selections updates the <filename>.config</filename> configuration file. | ||
| 1570 | This is the file that the OpenEmbedded build system uses to configure the | ||
| 1571 | kernel during the build. | ||
| 1572 | You can find and examine this file in the Build Directory in | ||
| 1573 | <filename>tmp/work/</filename>. | ||
| 1574 | The actual <filename>.config</filename> is located in the area where the | ||
| 1575 | specific kernel is built. | ||
| 1576 | For example, if you were building a Linux Yocto kernel based on the | ||
| 1577 | Linux 3.14 kernel and you were building a QEMU image targeted for | ||
| 1578 | <filename>x86</filename> architecture, the | ||
| 1579 | <filename>.config</filename> file would be located here: | ||
| 1580 | <literallayout class='monospaced'> | ||
| 1581 | poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.14.11+git1+84f... | ||
| 1582 | ...656ed30-r1/linux-qemux86-standard-build | ||
| 1583 | </literallayout> | ||
| 1584 | <note> | ||
| 1585 | The previous example directory is artificially split and many of the characters | ||
| 1586 | in the actual filename are omitted in order to make it more readable. | ||
| 1587 | Also, depending on the kernel you are using, the exact pathname | ||
| 1588 | for <filename>linux-yocto-3.14...</filename> might differ. | ||
| 1589 | </note> | ||
| 1590 | </para> | ||
| 1591 | |||
| 1592 | <para> | ||
| 1593 | Within the <filename>.config</filename> file, you can see the kernel settings. | ||
| 1594 | For example, the following entry shows that symmetric multi-processor support | ||
| 1595 | is not set: | ||
| 1596 | <literallayout class='monospaced'> | ||
| 1597 | # CONFIG_SMP is not set | ||
| 1598 | </literallayout> | ||
| 1599 | </para> | ||
| 1600 | |||
| 1601 | <para> | ||
| 1602 | A good method to isolate changed configurations is to use a combination of the | ||
| 1603 | <filename>menuconfig</filename> tool and simple shell commands. | ||
| 1604 | Before changing configurations with <filename>menuconfig</filename>, copy the | ||
| 1605 | existing <filename>.config</filename> and rename it to something else, | ||
| 1606 | use <filename>menuconfig</filename> to make | ||
| 1607 | as many changes as you want and save them, then compare the renamed configuration | ||
| 1608 | file against the newly created file. | ||
| 1609 | You can use the resulting differences as your base to create configuration fragments | ||
| 1610 | to permanently save in your kernel layer. | ||
| 1611 | <note> | ||
| 1612 | Be sure to make a copy of the <filename>.config</filename> and don't just | ||
| 1613 | rename it. | ||
| 1614 | The build system needs an existing <filename>.config</filename> | ||
| 1615 | from which to work. | ||
| 1616 | </note> | ||
| 1617 | </para> | ||
| 1618 | </section> | ||
| 1619 | |||
| 1620 | <section id='creating-a-defconfig-file'> | ||
| 1621 | <title>Creating a <filename>defconfig</filename> File</title> | ||
| 1622 | |||
| 1623 | <para> | ||
| 1624 | A <filename>defconfig</filename> file is simply a | ||
| 1625 | <filename>.config</filename> renamed to "defconfig". | ||
| 1626 | You can use a <filename>defconfig</filename> file | ||
| 1627 | to retain a known set of kernel configurations from which the | ||
| 1628 | OpenEmbedded build system can draw to create the final | ||
| 1629 | <filename>.config</filename> file. | ||
| 1630 | <note> | ||
| 1631 | Out-of-the-box, the Yocto Project never ships a | ||
| 1632 | <filename>defconfig</filename> or | ||
| 1633 | <filename>.config</filename> file. | ||
| 1634 | The OpenEmbedded build system creates the final | ||
| 1635 | <filename>.config</filename> file used to configure the | ||
| 1636 | kernel. | ||
| 1637 | </note> | ||
| 1638 | </para> | ||
| 1639 | |||
| 1640 | <para> | ||
| 1641 | To create a <filename>defconfig</filename>, start with a | ||
| 1642 | complete, working Linux kernel <filename>.config</filename> | ||
| 1643 | file. | ||
| 1644 | Copy that file to the appropriate | ||
| 1645 | <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename> | ||
| 1646 | directory in your layer's | ||
| 1647 | <filename>recipes-kernel/linux</filename> directory, and rename | ||
| 1648 | the copied file to "defconfig". | ||
| 1649 | Then, add the following lines to the linux-yocto | ||
| 1650 | <filename>.bbappend</filename> file in your layer: | ||
| 1651 | <literallayout class='monospaced'> | ||
| 1652 | FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" | ||
| 1653 | SRC_URI += "file://defconfig" | ||
| 1654 | </literallayout> | ||
| 1655 | The | ||
| 1656 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> | ||
| 1657 | tells the build system how to search for the file, while the | ||
| 1658 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink> | ||
| 1659 | extends the | ||
| 1660 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink> | ||
| 1661 | variable (search directories) to include the | ||
| 1662 | <filename>${PN}</filename> directory you created to hold the | ||
| 1663 | configuration changes. | ||
| 1664 | <note> | ||
| 1665 | The build system applies the configurations from the | ||
| 1666 | <filename>defconfig</filename> file before applying any | ||
| 1667 | subsequent configuration fragments. | ||
| 1668 | The final kernel configuration is a combination of the | ||
| 1669 | configurations in the <filename>defconfig</filename> | ||
| 1670 | file and any configuration fragments you provide. | ||
| 1671 | You need to realize that if you have any configuration | ||
| 1672 | fragments, the build system applies these on top of and | ||
| 1673 | after applying the existing defconfig file configurations. | ||
| 1674 | </note> | ||
| 1675 | For more information on configuring the kernel, see the | ||
| 1676 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#changing-the-configuration'>Changing the Configuration</ulink>" | ||
| 1677 | and | ||
| 1678 | "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#generating-configuration-files'>Generating Configuration Files</ulink>" | ||
| 1679 | sections, both in the Yocto Project Linux Kernel Development | ||
| 1680 | Manual. | ||
| 1681 | </para> | ||
| 1682 | </section> | ||
| 1683 | |||
| 1684 | <section id='creating-config-fragments'> | ||
| 1685 | <title>Creating Configuration Fragments</title> | ||
| 1686 | |||
| 1687 | <para> | ||
| 1688 | Configuration fragments are simply kernel options that appear in a file | ||
| 1689 | placed where the OpenEmbedded build system can find and apply them. | ||
| 1690 | Syntactically, the configuration statement is identical to what would appear | ||
| 1691 | in the <filename>.config</filename> file, which is in the | ||
| 1692 | <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>: | ||
| 1693 | <literallayout class='monospaced'> | ||
| 1694 | tmp/work/<replaceable>arch</replaceable>-poky-linux/linux-yocto-<replaceable>release_specific_string</replaceable>/linux-<replaceable>arch</replaceable>-<replaceable>build_type</replaceable> | ||
| 1695 | </literallayout> | ||
| 1696 | </para> | ||
| 1697 | |||
| 1698 | <para> | ||
| 1699 | It is simple to create a configuration fragment. | ||
| 1700 | For example, issuing the following from the shell creates a configuration fragment | ||
| 1701 | file named <filename>my_smp.cfg</filename> that enables multi-processor support | ||
| 1702 | within the kernel: | ||
| 1703 | <literallayout class='monospaced'> | ||
| 1704 | $ echo "CONFIG_SMP=y" >> my_smp.cfg | ||
| 1705 | </literallayout> | ||
| 1706 | <note> | ||
| 1707 | All configuration fragment files must use the | ||
| 1708 | <filename>.cfg</filename> extension in order for the | ||
| 1709 | OpenEmbedded build system to recognize them as a | ||
| 1710 | configuration fragment. | ||
| 1711 | </note> | ||
| 1712 | </para> | ||
| 1713 | |||
| 1714 | <para> | ||
| 1715 | Where do you put your configuration fragment files? | ||
| 1716 | You can place these files in the same area pointed to by | ||
| 1717 | <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>. | ||
| 1718 | The OpenEmbedded build system picks up the configuration and | ||
| 1719 | adds it to the kernel's configuration. | ||
| 1720 | For example, suppose you had a set of configuration options | ||
| 1721 | in a file called <filename>myconfig.cfg</filename>. | ||
| 1722 | If you put that file inside a directory named | ||
| 1723 | <filename>linux-yocto</filename> that resides in the same | ||
| 1724 | directory as the kernel's append file and then add a | ||
| 1725 | <filename>SRC_URI</filename> statement such as the following | ||
| 1726 | to the kernel's append file, those configuration options | ||
| 1727 | will be picked up and applied when the kernel is built. | ||
| 1728 | <literallayout class='monospaced'> | ||
| 1729 | SRC_URI += "file://myconfig.cfg" | ||
| 1730 | </literallayout> | ||
| 1731 | </para> | ||
| 1732 | |||
| 1733 | <para> | ||
| 1734 | As mentioned earlier, you can group related configurations into multiple files and | ||
| 1735 | name them all in the <filename>SRC_URI</filename> statement as well. | ||
| 1736 | For example, you could group separate configurations specifically for Ethernet and graphics | ||
| 1737 | into their own files and add those by using a <filename>SRC_URI</filename> statement like the | ||
| 1738 | following in your append file: | ||
| 1739 | <literallayout class='monospaced'> | ||
| 1740 | SRC_URI += "file://myconfig.cfg \ | ||
| 1741 | file://eth.cfg \ | ||
| 1742 | file://gfx.cfg" | ||
| 1743 | </literallayout> | ||
| 1744 | </para> | ||
| 1745 | </section> | ||
| 1746 | |||
| 1747 | <section id='fine-tuning-the-kernel-configuration-file'> | ||
| 1748 | <title>Fine-Tuning the Kernel Configuration File</title> | ||
| 1749 | |||
| 1750 | <para> | ||
| 1751 | You can make sure the <filename>.config</filename> file is as lean or efficient as | ||
| 1752 | possible by reading the output of the kernel configuration fragment audit, | ||
| 1753 | noting any issues, making changes to correct the issues, and then repeating. | ||
| 1754 | </para> | ||
| 1755 | |||
| 1756 | <para> | ||
| 1757 | As part of the kernel build process, the | ||
| 1758 | <filename>do_kernel_configcheck</filename> task runs. | ||
| 1759 | This task validates the kernel configuration by checking the final | ||
| 1760 | <filename>.config</filename> file against the input files. | ||
| 1761 | During the check, the task produces warning messages for the following | ||
| 1762 | issues: | ||
| 1763 | <itemizedlist> | ||
| 1764 | <listitem><para>Requested options that did not make the final | ||
| 1765 | <filename>.config</filename> file.</para></listitem> | ||
| 1766 | <listitem><para>Configuration items that appear twice in the same | ||
| 1767 | configuration fragment.</para></listitem> | ||
| 1768 | <listitem><para>Configuration items tagged as "required" that were overridden. | ||
| 1769 | </para></listitem> | ||
| 1770 | <listitem><para>A board overrides a non-board specific option.</para></listitem> | ||
| 1771 | <listitem><para>Listed options not valid for the kernel being processed. | ||
| 1772 | In other words, the option does not appear anywhere.</para></listitem> | ||
| 1773 | </itemizedlist> | ||
| 1774 | <note> | ||
| 1775 | The <filename>do_kernel_configcheck</filename> task can | ||
| 1776 | also optionally report if an option is overridden during | ||
| 1777 | processing. | ||
| 1778 | </note> | ||
| 1779 | </para> | ||
| 1780 | |||
| 1781 | <para> | ||
| 1782 | For each output warning, a message points to the file | ||
| 1783 | that contains a list of the options and a pointer to the | ||
| 1784 | configuration fragment that defines them. | ||
| 1785 | Collectively, the files are the key to streamlining the | ||
| 1786 | configuration. | ||
| 1787 | </para> | ||
| 1788 | |||
| 1789 | <para> | ||
| 1790 | To streamline the configuration, do the following: | ||
| 1791 | <orderedlist> | ||
| 1792 | <listitem><para>Start with a full configuration that you | ||
| 1793 | know works - it builds and boots successfully. | ||
| 1794 | This configuration file will be your baseline. | ||
| 1795 | </para></listitem> | ||
| 1796 | <listitem><para>Separately run the | ||
| 1797 | <filename>do_kernel_configme</filename> and | ||
| 1798 | <filename>do_kernel_configcheck</filename> tasks. | ||
| 1799 | </para></listitem> | ||
| 1800 | <listitem><para>Take the resulting list of files from the | ||
| 1801 | <filename>do_kernel_configcheck</filename> task | ||
| 1802 | warnings and do the following: | ||
| 1803 | <itemizedlist> | ||
| 1804 | <listitem><para> | ||
| 1805 | Drop values that are redefined in the fragment | ||
| 1806 | but do not change the final | ||
| 1807 | <filename>.config</filename> file. | ||
| 1808 | </para></listitem> | ||
| 1809 | <listitem><para> | ||
| 1810 | Analyze and potentially drop values from the | ||
| 1811 | <filename>.config</filename> file that override | ||
| 1812 | required configurations. | ||
| 1813 | </para></listitem> | ||
| 1814 | <listitem><para> | ||
| 1815 | Analyze and potentially remove non-board | ||
| 1816 | specific options. | ||
| 1817 | </para></listitem> | ||
| 1818 | <listitem><para> | ||
| 1819 | Remove repeated and invalid options. | ||
| 1820 | </para></listitem> | ||
| 1821 | </itemizedlist></para></listitem> | ||
| 1822 | <listitem><para> | ||
| 1823 | After you have worked through the output of the kernel | ||
| 1824 | configuration audit, you can re-run the | ||
| 1825 | <filename>do_kernel_configme</filename> and | ||
| 1826 | <filename>do_kernel_configcheck</filename> tasks to | ||
| 1827 | see the results of your changes. | ||
| 1828 | If you have more issues, you can deal with them as | ||
| 1829 | described in the previous step. | ||
| 1830 | </para></listitem> | ||
| 1831 | </orderedlist> | ||
| 1832 | </para> | ||
| 1833 | |||
| 1834 | <para> | ||
| 1835 | Iteratively working through steps two through four eventually yields | ||
| 1836 | a minimal, streamlined configuration file. | ||
| 1837 | Once you have the best <filename>.config</filename>, you can build the Linux | ||
| 1838 | Yocto kernel. | ||
| 1839 | </para> | ||
| 1840 | </section> | ||
| 1841 | |||
| 1842 | <section id='determining-hardware-and-non-hardware-features-for-the-kernel-configuration-audit-phase'> | ||
| 1843 | <title>Determining Hardware and Non-Hardware Features for the Kernel Configuration Audit Phase</title> | ||
| 1844 | |||
| 1845 | <para> | ||
| 1846 | This section describes part of the kernel configuration audit | ||
| 1847 | phase that most developers can ignore. | ||
| 1848 | During this part of the audit phase, the contents of the final | ||
| 1849 | <filename>.config</filename> file are compared against the | ||
| 1850 | fragments specified by the system. | ||
| 1851 | These fragments can be system fragments, distro fragments, | ||
| 1852 | or user specified configuration elements. | ||
| 1853 | Regardless of their origin, the OpenEmbedded build system | ||
| 1854 | warns the user if a specific option is not included in the | ||
| 1855 | final kernel configuration. | ||
| 1856 | </para> | ||
| 1857 | |||
| 1858 | <para> | ||
| 1859 | In order to not overwhelm the user with configuration warnings, | ||
| 1860 | by default the system only reports on missing "hardware" | ||
| 1861 | options because a missing hardware option could mean a boot | ||
| 1862 | failure or that important hardware is not available. | ||
| 1863 | </para> | ||
| 1864 | |||
| 1865 | <para> | ||
| 1866 | To determine whether or not a given option is "hardware" or | ||
| 1867 | "non-hardware", the kernel Metadata contains files that | ||
| 1868 | classify individual or groups of options as either hardware | ||
| 1869 | or non-hardware. | ||
| 1870 | To better show this, consider a situation where the | ||
| 1871 | Yocto Project kernel cache contains the following files: | ||
| 1872 | <literallayout class='monospaced'> | ||
| 1873 | kernel-cache/features/drm-psb/hardware.cfg | ||
| 1874 | kernel-cache/features/kgdb/hardware.cfg | ||
| 1875 | kernel-cache/ktypes/base/hardware.cfg | ||
| 1876 | kernel-cache/bsp/mti-malta32/hardware.cfg | ||
| 1877 | kernel-cache/bsp/fsl-mpc8315e-rdb/hardware.cfg | ||
| 1878 | kernel-cache/bsp/qemu-ppc32/hardware.cfg | ||
| 1879 | kernel-cache/bsp/qemuarma9/hardware.cfg | ||
| 1880 | kernel-cache/bsp/mti-malta64/hardware.cfg | ||
| 1881 | kernel-cache/bsp/arm-versatile-926ejs/hardware.cfg | ||
| 1882 | kernel-cache/bsp/common-pc/hardware.cfg | ||
| 1883 | kernel-cache/bsp/common-pc-64/hardware.cfg | ||
| 1884 | kernel-cache/features/rfkill/non-hardware.cfg | ||
| 1885 | kernel-cache/ktypes/base/non-hardware.cfg | ||
| 1886 | kernel-cache/features/aufs/non-hardware.kcf | ||
| 1887 | kernel-cache/features/ocf/non-hardware.kcf | ||
| 1888 | kernel-cache/ktypes/base/non-hardware.kcf | ||
| 1889 | kernel-cache/ktypes/base/hardware.kcf | ||
| 1890 | kernel-cache/bsp/qemu-ppc32/hardware.kcf | ||
| 1891 | </literallayout> | ||
| 1892 | The following list provides explanations for the various | ||
| 1893 | files: | ||
| 1894 | <itemizedlist> | ||
| 1895 | <listitem><para><filename>hardware.kcf</filename>: | ||
| 1896 | Specifies a list of kernel Kconfig files that contain | ||
| 1897 | hardware options only. | ||
| 1898 | </para></listitem> | ||
| 1899 | <listitem><para><filename>non-hardware.kcf</filename>: | ||
| 1900 | Specifies a list of kernel Kconfig files that contain | ||
| 1901 | non-hardware options only. | ||
| 1902 | </para></listitem> | ||
| 1903 | <listitem><para><filename>hardware.cfg</filename>: | ||
| 1904 | Specifies a list of kernel | ||
| 1905 | <filename>CONFIG_</filename> options that are hardware, | ||
| 1906 | regardless of whether or not they are within a Kconfig | ||
| 1907 | file specified by a hardware or non-hardware | ||
| 1908 | Kconfig file (i.e. <filename>hardware.kcf</filename> or | ||
| 1909 | <filename>non-hardware.kcf</filename>). | ||
| 1910 | </para></listitem> | ||
| 1911 | <listitem><para><filename>non-hardware.cfg</filename>: | ||
| 1912 | Specifies a list of kernel | ||
| 1913 | <filename>CONFIG_</filename> options that are | ||
| 1914 | not hardware, regardless of whether or not they are | ||
| 1915 | within a Kconfig file specified by a hardware or | ||
| 1916 | non-hardware Kconfig file (i.e. | ||
| 1917 | <filename>hardware.kcf</filename> or | ||
| 1918 | <filename>non-hardware.kcf</filename>). | ||
| 1919 | </para></listitem> | ||
| 1920 | </itemizedlist> | ||
| 1921 | Here is a specific example using the | ||
| 1922 | <filename>kernel-cache/bsp/mti-malta32/hardware.cfg</filename>: | ||
| 1923 | <literallayout class='monospaced'> | ||
| 1924 | CONFIG_SERIAL_8250 | ||
| 1925 | CONFIG_SERIAL_8250_CONSOLE | ||
| 1926 | CONFIG_SERIAL_8250_NR_UARTS | ||
| 1927 | CONFIG_SERIAL_8250_PCI | ||
| 1928 | CONFIG_SERIAL_CORE | ||
| 1929 | CONFIG_SERIAL_CORE_CONSOLE | ||
| 1930 | CONFIG_VGA_ARB | ||
| 1931 | </literallayout> | ||
| 1932 | The kernel configuration audit automatically detects these | ||
| 1933 | files (hence the names must be exactly the ones discussed here), | ||
| 1934 | and uses them as inputs when generating warnings about the | ||
| 1935 | final <filename>.config</filename> file. | ||
| 1936 | </para> | ||
| 1937 | |||
| 1938 | <para> | ||
| 1939 | A user-specified kernel Metadata repository, or recipe space | ||
| 1940 | feature, can use these same files to classify options that are | ||
| 1941 | found within its <filename>.cfg</filename> files as hardware | ||
| 1942 | or non-hardware, to prevent the OpenEmbedded build system from | ||
| 1943 | producing an error or warning when an option is not in the | ||
| 1944 | final <filename>.config</filename> file. | ||
| 1945 | </para> | ||
| 1946 | </section> | ||
| 1947 | </section> | ||
| 1948 | |||
| 1949 | |||
| 1950 | |||
| 1951 | |||
| 1952 | |||
| 1953 | |||
| 1954 | |||
| 1955 | |||
| 1956 | |||
| 1957 | |||
| 1958 | |||
| 1959 | |||
| 1960 | |||
| 1961 | |||
| 1962 | |||
| 1963 | |||
| 1448 | <section id='using-an-iterative-development-process'> | 1964 | <section id='using-an-iterative-development-process'> |
| 1449 | <title>Using an Iterative Development Process</title> | 1965 | <title>Using an Iterative Development Process</title> |
| 1450 | 1966 | ||
| @@ -1538,8 +2054,8 @@ | |||
| 1538 | "<link linkend='changing-the-configuration'>Changing the Configuration</link>" section. | 2054 | "<link linkend='changing-the-configuration'>Changing the Configuration</link>" section. |
| 1539 | For more information on the <filename>.config</filename> file, | 2055 | For more information on the <filename>.config</filename> file, |
| 1540 | see the | 2056 | see the |
| 1541 | "<ulink url='&YOCTO_DOCS_DEV_URL;#using-menuconfig'>Using <filename>menuconfig</filename></ulink>" | 2057 | "<link linkend='using-menuconfig'>Using <filename>menuconfig</filename></link>" |
| 1542 | section in the Yocto Project Development Manual. | 2058 | section. |
| 1543 | <note> | 2059 | <note> |
| 1544 | You can determine what a variable expands to by looking | 2060 | You can determine what a variable expands to by looking |
| 1545 | at the output of the <filename>bitbake -e</filename> | 2061 | at the output of the <filename>bitbake -e</filename> |
| @@ -1650,8 +2166,8 @@ | |||
| 1650 | <para> | 2166 | <para> |
| 1651 | For more information on how to use the | 2167 | For more information on how to use the |
| 1652 | <filename>menuconfig</filename> tool, see the | 2168 | <filename>menuconfig</filename> tool, see the |
| 1653 | "<ulink url='&YOCTO_DOCS_DEV_URL;#using-menuconfig'>Using <filename>menuconfig</filename></ulink>" | 2169 | "<link linkend='using-menuconfig'>Using <filename>menuconfig</filename></link>" |
| 1654 | section in the Yocto Project Development Manual. | 2170 | section. |
| 1655 | </para> | 2171 | </para> |
| 1656 | </section> | 2172 | </section> |
| 1657 | 2173 | ||
diff --git a/documentation/kernel-dev/kernel-dev-intro.xml b/documentation/kernel-dev/kernel-dev-intro.xml index b2fe19c175..174ab93ab0 100644 --- a/documentation/kernel-dev/kernel-dev-intro.xml +++ b/documentation/kernel-dev/kernel-dev-intro.xml | |||
| @@ -231,7 +231,7 @@ | |||
| 231 | and you have saved them, you can directly compare the | 231 | and you have saved them, you can directly compare the |
| 232 | resulting <filename>.config</filename> file against an | 232 | resulting <filename>.config</filename> file against an |
| 233 | existing original and gather those changes into a | 233 | existing original and gather those changes into a |
| 234 | <ulink url='&YOCTO_DOCS_DEV_URL;#creating-config-fragments'>configuration fragment file</ulink> | 234 | <link linkend='creating-config-fragments'>configuration fragment file</link> |
| 235 | to be referenced from within the kernel's | 235 | to be referenced from within the kernel's |
| 236 | <filename>.bbappend</filename> file.</para> | 236 | <filename>.bbappend</filename> file.</para> |
| 237 | 237 | ||
