diff options
Diffstat (limited to 'documentation')
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 88 | ||||
| -rw-r--r-- | documentation/dev-manual/dev-manual-kernel-appendix.xml | 293 |
2 files changed, 81 insertions, 300 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 824aac1236..918d884681 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -1352,6 +1352,8 @@ | |||
| 1352 | <para> | 1352 | <para> |
| 1353 | The easiest way to define kernel configurations is to set them through the | 1353 | The easiest way to define kernel configurations is to set them through the |
| 1354 | <filename>menuconfig</filename> tool. | 1354 | <filename>menuconfig</filename> tool. |
| 1355 | This tool provides an interactive method with which | ||
| 1356 | to set kernel configurations. | ||
| 1355 | For general information on <filename>menuconfig</filename>, see | 1357 | For general information on <filename>menuconfig</filename>, see |
| 1356 | <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>. | 1358 | <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>. |
| 1357 | </para> | 1359 | </para> |
| @@ -1359,6 +1361,9 @@ | |||
| 1359 | <para> | 1361 | <para> |
| 1360 | To use the <filename>menuconfig</filename> tool in the Yocto Project development | 1362 | To use the <filename>menuconfig</filename> tool in the Yocto Project development |
| 1361 | environment, you must build the tool using BitBake. | 1363 | environment, you must build the tool using BitBake. |
| 1364 | Thus, the environment must be set up using the <filename>&OE_INIT_FILE;</filename> | ||
| 1365 | script found in the | ||
| 1366 | <link linkend='build-directory'>Build Directory</link>. | ||
| 1362 | The following commands build and invoke <filename>menuconfig</filename> assuming the | 1367 | The following commands build and invoke <filename>menuconfig</filename> assuming the |
| 1363 | source directory top-level folder is <filename>~/poky</filename>: | 1368 | source directory top-level folder is <filename>~/poky</filename>: |
| 1364 | <literallayout class='monospaced'> | 1369 | <literallayout class='monospaced'> |
| @@ -1367,17 +1372,86 @@ | |||
| 1367 | $ bitbake linux-yocto -c menuconfig | 1372 | $ bitbake linux-yocto -c menuconfig |
| 1368 | </literallayout> | 1373 | </literallayout> |
| 1369 | Once <filename>menuconfig</filename> comes up, its standard interface allows you to | 1374 | Once <filename>menuconfig</filename> comes up, its standard interface allows you to |
| 1370 | examine and configure all the kernel configuration parameters. | 1375 | interactively examine and configure all the kernel configuration parameters. |
| 1371 | Once you have made your changes, simply exit the tool and save your changes to | 1376 | After making your changes, simply exit the tool and save your changes to |
| 1372 | create an updated version of the <filename>.config</filename> configuration file. | 1377 | create an updated version of the <filename>.config</filename> configuration file. |
| 1373 | </para> | 1378 | </para> |
| 1374 | 1379 | ||
| 1375 | <para> | 1380 | <para> |
| 1376 | For an example that shows how to change a specific kernel option | 1381 | Consider an example that configures the <filename>linux-yocto-3.4</filename> |
| 1377 | using <filename>menuconfig</filename>, see the | 1382 | kernel. |
| 1378 | "<link linkend='changing-the-config-smp-configuration-using-menuconfig'>Changing | 1383 | The OpenEmbedded build system recognizes this kernel as |
| 1379 | the <filename>CONFIG_SMP</filename> Configuration Using <filename>menuconfig</filename></link>" | 1384 | <filename>linux-yocto</filename>. |
| 1380 | section. | 1385 | Thus, the following commands from the shell in which you previously sourced the |
| 1386 | environment initialization script cleans the shared state cache and the | ||
| 1387 | <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink> | ||
| 1388 | directory and then builds and launches <filename>menuconfig</filename>: | ||
| 1389 | <literallayout class='monospaced'> | ||
| 1390 | $ bitbake linux-yocto -c menuconfig | ||
| 1391 | </literallayout> | ||
| 1392 | </para> | ||
| 1393 | |||
| 1394 | <para> | ||
| 1395 | Once <filename>menuconfig</filename> launches, you use the interface | ||
| 1396 | to navigate through the selections to find the configuration settings in | ||
| 1397 | which you are interested. | ||
| 1398 | For example, consider the <filename>CONFIG_SMP</filename> configuration setting. | ||
| 1399 | You can find it at <filename>Processor Type and Features</filename> under | ||
| 1400 | the configuration selection <filename>Symmetric Multi-processing Support</filename>. | ||
| 1401 | After highlighting the selection, you can use the arrow keys to select or deselect | ||
| 1402 | the setting. | ||
| 1403 | When you are finished with all your selections, exit out and save them. | ||
| 1404 | </para> | ||
| 1405 | |||
| 1406 | <para> | ||
| 1407 | Saving the selections updates the <filename>.config</filename> configuration file. | ||
| 1408 | This is the file that the OpenEmbedded build system uses to configure the | ||
| 1409 | kernel during the build. | ||
| 1410 | You can find and examine this file in the build directory in | ||
| 1411 | <filename>tmp/work/</filename>. | ||
| 1412 | The actual <filename>.config</filename> is located in the area where the | ||
| 1413 | specific kernel is built. | ||
| 1414 | For example, if you were building a Linux Yocto kernel based on the | ||
| 1415 | Linux 3.4 kernel and you were building a QEMU image targeted for | ||
| 1416 | <filename>x86</filename> architecture, the | ||
| 1417 | <filename>.config</filename> file would be located here: | ||
| 1418 | <literallayout class='monospaced'> | ||
| 1419 | ~/poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.4.11+git1+84f... | ||
| 1420 | ...656ed30-r1/linux-qemux86-standard-build | ||
| 1421 | </literallayout> | ||
| 1422 | <note> | ||
| 1423 | The previous example directory is artificially split and many of the characters | ||
| 1424 | in the actual filename are omitted in order to make it more readable. | ||
| 1425 | Also, depending on the kernel you are using, the exact pathname | ||
| 1426 | for <filename>linux-yocto-3.4...</filename> might differ. | ||
| 1427 | </note> | ||
| 1428 | </para> | ||
| 1429 | |||
| 1430 | <para> | ||
| 1431 | Within the <filename>.config</filename> file, you can see the kernel settings. | ||
| 1432 | For example, the following entry shows that symmetric multi-processor support | ||
| 1433 | is not set: | ||
| 1434 | <literallayout class='monospaced'> | ||
| 1435 | # CONFIG_SMP is not set | ||
| 1436 | </literallayout> | ||
| 1437 | </para> | ||
| 1438 | |||
| 1439 | <para> | ||
| 1440 | A good method to isolate changed configurations is to use a combination of the | ||
| 1441 | <filename>menuconfig</filename> tool and simple shell commands. | ||
| 1442 | Before changing configurations with <filename>menuconfig</filename>, copy the | ||
| 1443 | existing <filename>.config</filename> and rename it to something else, | ||
| 1444 | use <filename>menuconfig</filename> to make | ||
| 1445 | as many changes an you want and save them, then compare the renamed configuration | ||
| 1446 | file against the newly created file. | ||
| 1447 | You can use the resulting differences as your base to create configuration fragments | ||
| 1448 | to permanently save in your kernel layer. | ||
| 1449 | <note> | ||
| 1450 | Be sure to make a copy of the <filename>.config</filename> and don't just | ||
| 1451 | rename it. | ||
| 1452 | The build system needs an existing <filename>.config</filename> | ||
| 1453 | from which to work. | ||
| 1454 | </note> | ||
| 1381 | </para> | 1455 | </para> |
| 1382 | </section> | 1456 | </section> |
| 1383 | 1457 | ||
diff --git a/documentation/dev-manual/dev-manual-kernel-appendix.xml b/documentation/dev-manual/dev-manual-kernel-appendix.xml index 9070fcb561..6ea77d030c 100644 --- a/documentation/dev-manual/dev-manual-kernel-appendix.xml +++ b/documentation/dev-manual/dev-manual-kernel-appendix.xml | |||
| @@ -546,299 +546,6 @@ | |||
| 546 | </para> | 546 | </para> |
| 547 | </section> | 547 | </section> |
| 548 | </section> | 548 | </section> |
| 549 | |||
| 550 | <section id='changing-the-kernel-configuration'> | ||
| 551 | <title>Changing the Kernel Configuration</title> | ||
| 552 | |||
| 553 | <para> | ||
| 554 | This example changes the default behavior, which is "on", of the Symmetric | ||
| 555 | Multi-processing Support (<filename>CONFIG_SMP</filename>) to "off". | ||
| 556 | It is a simple example that demonstrates how to reconfigure the kernel. | ||
| 557 | </para> | ||
| 558 | |||
| 559 | <section id='getting-set-up-to-run-this-example'> | ||
| 560 | <title>Getting Set Up to Run this Example</title> | ||
| 561 | |||
| 562 | <para> | ||
| 563 | If you took the time to work through the example that modifies the kernel source code | ||
| 564 | in "<link linkend='modifying-the-kernel-source-code'>Modifying the Kernel Source | ||
| 565 | Code</link>" you should already have the Source Directory set up on your | ||
| 566 | host machine. | ||
| 567 | If this is the case, go to the next section, which is titled | ||
| 568 | "<link linkend='examining-the-default-config-smp-behavior'>Examining the Default | ||
| 569 | <filename>CONFIG_SMP</filename> Behavior</link>", and continue with the | ||
| 570 | example. | ||
| 571 | </para> | ||
| 572 | |||
| 573 | <para> | ||
| 574 | If you don't have the Source Directory established on your system, | ||
| 575 | you can get them through tarball extraction or by | ||
| 576 | cloning the <filename>poky</filename> Git repository. | ||
| 577 | This example uses <filename>poky</filename> as the root directory of the | ||
| 578 | <link linkend='source-directory'>Source Directory</link>. | ||
| 579 | See the bulleted item | ||
| 580 | "<link linkend='local-yp-release'>Yocto Project Release</link>" | ||
| 581 | for information on how to get these files. | ||
| 582 | </para> | ||
| 583 | |||
| 584 | <para> | ||
| 585 | Once you have the local copy of the repository set up, | ||
| 586 | you have many development branches from which you can work. | ||
| 587 | From inside the repository you can see the branch names and the tag names used | ||
| 588 | in the upstream Git repository using either of the following commands: | ||
| 589 | <literallayout class='monospaced'> | ||
| 590 | $ cd poky | ||
| 591 | $ git branch -a | ||
| 592 | $ git tag -l | ||
| 593 | </literallayout> | ||
| 594 | This example uses the Yocto Project &DISTRO; Release code named "&DISTRO_NAME;", | ||
| 595 | which maps to the <filename>&DISTRO_NAME;</filename> branch in the repository. | ||
| 596 | The following commands create and checkout the local <filename>&DISTRO_NAME;</filename> | ||
| 597 | branch: | ||
| 598 | <literallayout class='monospaced'> | ||
| 599 | $ git checkout -b &DISTRO_NAME; origin/&DISTRO_NAME; | ||
| 600 | Branch &DISTRO_NAME; set up to track remote branch &DISTRO_NAME; from origin. | ||
| 601 | Switched to a new branch '&DISTRO_NAME;' | ||
| 602 | </literallayout> | ||
| 603 | </para> | ||
| 604 | |||
| 605 | <para> | ||
| 606 | Next, you need to build the default <filename>qemux86</filename> image that you | ||
| 607 | can boot using QEMU. | ||
| 608 | <note> | ||
| 609 | Because a full build can take hours, you should check two variables in the | ||
| 610 | <filename>build</filename> directory that is created after you source the | ||
| 611 | <filename>&OE_INIT_FILE;</filename> script. | ||
| 612 | You can find these variables | ||
| 613 | <filename>BB_NUMBER_THREADS</filename> and <filename>PARALLEL_MAKE</filename> | ||
| 614 | in the <filename>build/conf</filename> directory in the | ||
| 615 | <filename>local.conf</filename> configuration file. | ||
| 616 | By default, these variables are commented out. | ||
| 617 | If your host development system supports multi-core and multi-thread capabilities, | ||
| 618 | you can uncomment these statements and set the variables to significantly shorten | ||
| 619 | the full build time. | ||
| 620 | As a guideline, set both the <filename>BB_NUMBER_THREADS</filename> and the | ||
| 621 | <filename>PARALLEL_MAKE</filename> variables to twice the number | ||
| 622 | of cores your machine supports. | ||
| 623 | </note> | ||
| 624 | The following two commands <filename>source</filename> the build environment setup script | ||
| 625 | and build the default <filename>qemux86</filename> image. | ||
| 626 | If necessary, the script creates the build directory: | ||
| 627 | <literallayout class='monospaced'> | ||
| 628 | $ cd ~/poky | ||
| 629 | $ source &OE_INIT_FILE; | ||
| 630 | |||
| 631 | ### Shell environment set up for builds. ### | ||
| 632 | |||
| 633 | You can now run 'bitbake <target>' | ||
| 634 | |||
| 635 | Common targets are: | ||
| 636 | core-image-minimal | ||
| 637 | core-image-sato | ||
| 638 | meta-toolchain | ||
| 639 | meta-toolchain-sdk | ||
| 640 | adt-installer | ||
| 641 | meta-ide-support | ||
| 642 | |||
| 643 | You can also run generated qemu images with a command like 'runqemu qemux86' | ||
| 644 | </literallayout> | ||
| 645 | </para> | ||
| 646 | |||
| 647 | <para> | ||
| 648 | The following <filename>bitbake</filename> command starts the build: | ||
| 649 | <literallayout class='monospaced'> | ||
| 650 | $ bitbake -k core-image-minimal | ||
| 651 | </literallayout> | ||
| 652 | <note>Be sure to check the settings in the <filename>local.conf</filename> | ||
| 653 | before starting the build.</note> | ||
| 654 | </para> | ||
| 655 | </section> | ||
| 656 | |||
| 657 | <section id='examining-the-default-config-smp-behavior'> | ||
| 658 | <title>Examining the Default <filename>CONFIG_SMP</filename> Behavior</title> | ||
| 659 | |||
| 660 | <para> | ||
| 661 | By default, <filename>CONFIG_SMP</filename> supports multiple processor machines. | ||
| 662 | To see this default setting from within the QEMU emulator, boot your image using | ||
| 663 | the emulator as follows: | ||
| 664 | <literallayout class='monospaced'> | ||
| 665 | $ runqemu qemux86 qemuparams="-smp 4" | ||
| 666 | </literallayout> | ||
| 667 | </para> | ||
| 668 | |||
| 669 | <para> | ||
| 670 | Login to the machine using <filename>root</filename> with no password. | ||
| 671 | After logging in, enter the following command to see how many processors are | ||
| 672 | being supported in the emulator. | ||
| 673 | The emulator reports support for the number of processors you specified using | ||
| 674 | the <filename>-smp</filename> option, four in this case: | ||
| 675 | <literallayout class='monospaced'> | ||
| 676 | # cat /proc/cpuinfo | grep processor | ||
| 677 | processor : 0 | ||
| 678 | processor : 1 | ||
| 679 | processor : 2 | ||
| 680 | processor : 3 | ||
| 681 | # | ||
| 682 | </literallayout> | ||
| 683 | To check the setting for <filename>CONFIG_SMP</filename>, you can use the | ||
| 684 | following command: | ||
| 685 | <literallayout class='monospaced'> | ||
| 686 | zcat /proc/config.gz | grep CONFIG_SMP | ||
| 687 | </literallayout> | ||
| 688 | The console returns the following showing that multi-processor machine support | ||
| 689 | is set: | ||
| 690 | <literallayout class='monospaced'> | ||
| 691 | CONFIG_SMP=y | ||
| 692 | </literallayout> | ||
| 693 | Logout of the emulator using the <filename>exit</filename> command and | ||
| 694 | then close it down. | ||
| 695 | </para> | ||
| 696 | </section> | ||
| 697 | |||
| 698 | <section id='changing-the-config-smp-configuration-using-menuconfig'> | ||
| 699 | <title>Changing the <filename>CONFIG_SMP</filename> Configuration Using <filename>menuconfig</filename></title> | ||
| 700 | |||
| 701 | <para> | ||
| 702 | The <filename>menuconfig</filename> tool provides an interactive method with which | ||
| 703 | to set kernel configurations. | ||
| 704 | You need to run <filename>menuconfig</filename> inside the Yocto BitBake environment. | ||
| 705 | Thus, the environment must be set up using the <filename>&OE_INIT_FILE;</filename> | ||
| 706 | script found in the build directory. | ||
| 707 | If you have not sourced this script do so with the following commands: | ||
| 708 | <literallayout class='monospaced'> | ||
| 709 | $ cd ~/poky | ||
| 710 | $ source &OE_INIT_FILE; | ||
| 711 | </literallayout> | ||
| 712 | </para> | ||
| 713 | |||
| 714 | <para> | ||
| 715 | After setting up the environment to run <filename>menuconfig</filename>, you are ready | ||
| 716 | to use the tool to interactively change the kernel configuration. | ||
| 717 | In this example, we are basing our changes on the <filename>linux-yocto-3.4</filename> | ||
| 718 | kernel. | ||
| 719 | The OpenEmbedded build system recognizes this kernel as | ||
| 720 | <filename>linux-yocto</filename>. | ||
| 721 | Thus, the following commands from the shell in which you previously sourced the | ||
| 722 | environment initialization script cleans the shared state cache and the | ||
| 723 | <ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink> | ||
| 724 | directory and then builds and launches <filename>menuconfig</filename>: | ||
| 725 | <literallayout class='monospaced'> | ||
| 726 | $ bitbake linux-yocto -c menuconfig | ||
| 727 | </literallayout> | ||
| 728 | </para> | ||
| 729 | |||
| 730 | <para> | ||
| 731 | Once <filename>menuconfig</filename> launches, navigate through the user interface | ||
| 732 | to find the <filename>CONFIG_SMP</filename> configuration setting. | ||
| 733 | You can find it at <filename>Processor Type and Features</filename>. | ||
| 734 | The configuration selection is | ||
| 735 | <filename>Symmetric Multi-processing Support</filename>. | ||
| 736 | After using the arrow keys to highlight this selection, press "n" to turn it off. | ||
| 737 | Then, exit out and save your selections. | ||
| 738 | </para> | ||
| 739 | |||
| 740 | <para> | ||
| 741 | Once you save the selection, the <filename>.config</filename> configuration file | ||
| 742 | is updated. | ||
| 743 | This is the file that the build system uses to configure the Yocto Project kernel | ||
| 744 | when it is built. | ||
| 745 | You can find and examine this file in the build directory. | ||
| 746 | This example uses the following: | ||
| 747 | <literallayout class='monospaced'> | ||
| 748 | ~/poky/build/tmp/work/qemux86-poky-linux/linux-yocto-3.4.11+git1+84f... | ||
| 749 | ...656ed30-r1/linux-qemux86-standard-build | ||
| 750 | </literallayout> | ||
| 751 | <note> | ||
| 752 | The previous example directory is artificially split and many of the characters | ||
| 753 | in the actual filename are omitted in order to make it more readable. | ||
| 754 | Also, depending on the kernel you are using, the exact pathname might differ | ||
| 755 | slightly. | ||
| 756 | </note> | ||
| 757 | </para> | ||
| 758 | |||
| 759 | <para> | ||
| 760 | Within the <filename>.config</filename> file, you can see the following setting: | ||
| 761 | <literallayout class='monospaced'> | ||
| 762 | # CONFIG_SMP is not set | ||
| 763 | </literallayout> | ||
| 764 | </para> | ||
| 765 | |||
| 766 | <para> | ||
| 767 | A good method to isolate changed configurations is to use a combination of the | ||
| 768 | <filename>menuconfig</filename> tool and simple shell commands. | ||
| 769 | Before changing configurations with <filename>menuconfig</filename>, copy the | ||
| 770 | existing <filename>.config</filename> and rename it to something else, | ||
| 771 | use <filename>menuconfig</filename> to make | ||
| 772 | as many changes an you want and save them, then compare the renamed configuration | ||
| 773 | file against the newly created file. | ||
| 774 | You can use the resulting differences as your base to create configuration fragments | ||
| 775 | to permanently save in your kernel layer. | ||
| 776 | <note> | ||
| 777 | Be sure to make a copy of the <filename>.config</filename> and don't just | ||
| 778 | rename it. | ||
| 779 | The build system needs an existing <filename>.config</filename> | ||
| 780 | from which to work. | ||
| 781 | </note> | ||
| 782 | </para> | ||
| 783 | </section> | ||
| 784 | |||
| 785 | <section id='recompiling-the-kernel-and-testing-the-new-configuration'> | ||
| 786 | <title>Recompiling the Kernel and Testing the New Configuration</title> | ||
| 787 | |||
| 788 | <para> | ||
| 789 | At this point, you are ready to recompile your kernel image with | ||
| 790 | the new setting in effect using the BitBake command below: | ||
| 791 | <literallayout class='monospaced'> | ||
| 792 | $ bitbake linux-yocto | ||
| 793 | </literallayout> | ||
| 794 | </para> | ||
| 795 | |||
| 796 | <para> | ||
| 797 | Now run the QEMU emulator and pass it the same multi-processor option as before: | ||
| 798 | <literallayout class='monospaced'> | ||
| 799 | $ runqemu qemux86 qemuparams="-smp 4" | ||
| 800 | </literallayout> | ||
| 801 | </para> | ||
| 802 | |||
| 803 | <para> | ||
| 804 | Login to the machine using <filename>root</filename> with no password | ||
| 805 | and test for the number of processors the kernel supports: | ||
| 806 | <literallayout class='monospaced'> | ||
| 807 | # cat /proc/cpuinfo | grep processor | ||
| 808 | processor : 0 | ||
| 809 | # | ||
| 810 | </literallayout> | ||
| 811 | </para> | ||
| 812 | |||
| 813 | <para> | ||
| 814 | From the output, you can see that the kernel no longer supports multi-processor systems. | ||
| 815 | The output indicates support for a single processor. You can verify the | ||
| 816 | <filename>CONFIG_SMP</filename> setting by using this command: | ||
| 817 | <literallayout class='monospaced'> | ||
| 818 | zcat /proc/config.gz | grep CONFIG_SMP | ||
| 819 | </literallayout> | ||
| 820 | The console returns the following output: | ||
| 821 | <literallayout class='monospaced'> | ||
| 822 | # CONFIG_SMP is not set | ||
| 823 | </literallayout> | ||
| 824 | You have successfully reconfigured the kernel. | ||
| 825 | </para> | ||
| 826 | </section> | ||
| 827 | </section> | ||
| 828 | |||
| 829 | <section id='adding-kernel-recipes'> | ||
| 830 | <title>Adding Kernel Recipes</title> | ||
| 831 | |||
| 832 | <para> | ||
| 833 | A future release of this manual will present an example that adds kernel recipes, which provide | ||
| 834 | new functionality to the kernel. | ||
| 835 | </para> | ||
| 836 | |||
| 837 | <para> | ||
| 838 | <imagedata fileref="figures/wip.png" | ||
| 839 | width="2in" depth="3in" align="center" scalefit="1" /> | ||
| 840 | </para> | ||
| 841 | </section> | ||
| 842 | </appendix> | 549 | </appendix> |
| 843 | 550 | ||
| 844 | <!-- | 551 | <!-- |
