diff options
| -rw-r--r-- | documentation/sdk-manual/sdk-appendix-customizing.xml | 607 |
1 files changed, 607 insertions, 0 deletions
diff --git a/documentation/sdk-manual/sdk-appendix-customizing.xml b/documentation/sdk-manual/sdk-appendix-customizing.xml index d38320f8bb..9fca16571f 100644 --- a/documentation/sdk-manual/sdk-appendix-customizing.xml +++ b/documentation/sdk-manual/sdk-appendix-customizing.xml | |||
| @@ -383,6 +383,613 @@ | |||
| 383 | </para> | 383 | </para> |
| 384 | </section> | 384 | </section> |
| 385 | 385 | ||
| 386 | <section id='sdk-a-closer-look-at-devtool-add'> | ||
| 387 | <title>A Closer Look at <filename>devtool add</filename></title> | ||
| 388 | |||
| 389 | <para> | ||
| 390 | The <filename>devtool add</filename> command automatically creates a | ||
| 391 | recipe based on the source tree with which you provide it. | ||
| 392 | Currently, the command has support for the following: | ||
| 393 | <itemizedlist> | ||
| 394 | <listitem><para> | ||
| 395 | Autotools (<filename>autoconf</filename> and | ||
| 396 | <filename>automake</filename>) | ||
| 397 | </para></listitem> | ||
| 398 | <listitem><para> | ||
| 399 | <filename>CMake</filename> | ||
| 400 | </para></listitem> | ||
| 401 | <listitem><para> | ||
| 402 | <filename>Scons</filename> | ||
| 403 | </para></listitem> | ||
| 404 | <listitem><para> | ||
| 405 | <filename>qmake</filename> | ||
| 406 | </para></listitem> | ||
| 407 | <listitem><para> | ||
| 408 | Plain <filename>Makefile</filename> | ||
| 409 | </para></listitem> | ||
| 410 | <listitem><para> | ||
| 411 | Out-of-tree kernel module | ||
| 412 | </para></listitem> | ||
| 413 | <listitem><para> | ||
| 414 | Binary package (i.e. "-b" option) | ||
| 415 | </para></listitem> | ||
| 416 | <listitem><para> | ||
| 417 | <filename>Node.js</filename> module through | ||
| 418 | <filename>npm</filename> | ||
| 419 | </para></listitem> | ||
| 420 | <listitem><para> | ||
| 421 | Python modules that use <filename>setuptools</filename> | ||
| 422 | or <filename>distutils</filename> | ||
| 423 | </para></listitem> | ||
| 424 | </itemizedlist> | ||
| 425 | </para> | ||
| 426 | |||
| 427 | <para> | ||
| 428 | Apart from binary packages, the determination of how a source tree | ||
| 429 | should be treated is automatic based on the files present within | ||
| 430 | that source tree. | ||
| 431 | For example, if a <filename>CMakeLists.txt</filename> file is found, | ||
| 432 | then the source tree is assumed to be using | ||
| 433 | <filename>CMake</filename> and is treated accordingly. | ||
| 434 | <note> | ||
| 435 | In most cases, you need to edit the automatically generated | ||
| 436 | recipe in order to make it build properly. | ||
| 437 | Typically, you would go through several edit and build cycles | ||
| 438 | until you can build the recipe. | ||
| 439 | Once the recipe can be built, you could use possible further | ||
| 440 | iterations to test the recipe on the target device. | ||
| 441 | </note> | ||
| 442 | </para> | ||
| 443 | |||
| 444 | <para> | ||
| 445 | The remainder of this section covers specifics regarding how parts | ||
| 446 | of the recipe are generated. | ||
| 447 | </para> | ||
| 448 | |||
| 449 | <section id='sdk-name-and-version'> | ||
| 450 | <title>Name and Version</title> | ||
| 451 | |||
| 452 | <para> | ||
| 453 | If you do not specify a name and version on the command | ||
| 454 | line, <filename>devtool add</filename> attempts to determine | ||
| 455 | the name and version of the software being built from | ||
| 456 | various metadata within the source tree. | ||
| 457 | Furthermore, the command sets the name of the created recipe | ||
| 458 | file accordingly. | ||
| 459 | If the name or version cannot be determined, the | ||
| 460 | <filename>devtool add</filename> command prints an error and | ||
| 461 | you must re-run the command with both the name and version | ||
| 462 | or just the name or version specified. | ||
| 463 | </para> | ||
| 464 | |||
| 465 | <para> | ||
| 466 | Sometimes the name or version determined from the source tree | ||
| 467 | might be incorrect. | ||
| 468 | For such a case, you must run the following commands: | ||
| 469 | <literallayout class='monospaced'> | ||
| 470 | $ devtool reset -n <replaceable>recipename</replaceable> | ||
| 471 | </literallayout> | ||
| 472 | After running the <filename>devtool reset</filename> command, | ||
| 473 | you need to run <filename>devtool add</filename> again and | ||
| 474 | provide the name or the version. | ||
| 475 | </para> | ||
| 476 | </section> | ||
| 477 | |||
| 478 | <section id='sdk-dependency-detection-and-mapping'> | ||
| 479 | <title>Dependency Detection and Mapping</title> | ||
| 480 | |||
| 481 | <para> | ||
| 482 | The <filename>devtool add</filename> command attempts to | ||
| 483 | detect build-time dependencies and map them to other recipes | ||
| 484 | in the system. | ||
| 485 | During this mapping, the command fills in the names of those | ||
| 486 | recipes in the | ||
| 487 | <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink> | ||
| 488 | value within the recipe. | ||
| 489 | If a dependency cannot be mapped, then a comment is placed in | ||
| 490 | the recipe indicating such. | ||
| 491 | The inability to map a dependency might be caused because the | ||
| 492 | naming is not recognized or because the dependency simply is | ||
| 493 | not available. | ||
| 494 | For cases where the dependency is not available, you must use | ||
| 495 | the <filename>devtool add</filename> command to add an | ||
| 496 | additional recipe to satisfy the dependency and then come | ||
| 497 | back to the first recipe and add its name to | ||
| 498 | <filename>DEPENDS</filename>. | ||
| 499 | </para> | ||
| 500 | |||
| 501 | <para> | ||
| 502 | If you need to add runtime dependencies, you can do so by | ||
| 503 | adding the following to your recipe: | ||
| 504 | <literallayout class='monospaced'> | ||
| 505 | RDEPENDS_${PN} += "dependency1 dependency2 ..." | ||
| 506 | </literallayout> | ||
| 507 | <note> | ||
| 508 | The <filename>devtool add</filename> command often cannot | ||
| 509 | distinguish between mandatory and optional dependencies. | ||
| 510 | Consequently, some of the detected dependencies might | ||
| 511 | in fact be optional. | ||
| 512 | When in doubt, consult the documentation or the configure | ||
| 513 | script for the software the recipe is building for further | ||
| 514 | details. | ||
| 515 | In some cases, you might find you can substitute the | ||
| 516 | dependency for an option to disable the associated | ||
| 517 | functionality passed to the configure script. | ||
| 518 | </note> | ||
| 519 | </para> | ||
| 520 | </section> | ||
| 521 | |||
| 522 | <section id='sdk-license-detection'> | ||
| 523 | <title>License Detection</title> | ||
| 524 | |||
| 525 | <para> | ||
| 526 | The <filename>devtool add</filename> command attempts to | ||
| 527 | determine if the software you are adding is able to be | ||
| 528 | distributed under a common open-source license and sets the | ||
| 529 | <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE</filename></ulink> | ||
| 530 | value accordingly. | ||
| 531 | You should double-check this value against the documentation | ||
| 532 | or source files for the software you are building and update | ||
| 533 | that <filename>LICENSE</filename> value if necessary. | ||
| 534 | </para> | ||
| 535 | |||
| 536 | <para> | ||
| 537 | The <filename>devtool add</filename> command also sets the | ||
| 538 | <ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></ulink> | ||
| 539 | value to point to all files that appear to be license-related. | ||
| 540 | However, license statements often appear in comments at the top | ||
| 541 | of source files or within documentation. | ||
| 542 | Consequently, you might need to amend the | ||
| 543 | <filename>LIC_FILES_CHKSUM</filename> variable to point to one | ||
| 544 | or more of those comments if present. | ||
| 545 | Setting <filename>LIC_FILES_CHKSUM</filename> is particularly | ||
| 546 | important for third-party software. | ||
| 547 | The command attempts to ensure correct licensing should you | ||
| 548 | upgrade the recipe to a newer upstream version in future. | ||
| 549 | Any change in licensing is detected and you receive an error | ||
| 550 | prompting you to check the license text again. | ||
| 551 | </para> | ||
| 552 | |||
| 553 | <para> | ||
| 554 | If the <filename>devtool add</filename> command cannot | ||
| 555 | determine licensing information, the | ||
| 556 | <filename>LICENSE</filename> value is set to "CLOSED" and the | ||
| 557 | <filename>LIC_FILES_CHKSUM</filename> vaule remains unset. | ||
| 558 | This behavior allows you to continue with development but is | ||
| 559 | unlikely to be correct in all cases. | ||
| 560 | Consequently, you should check the documentation or source | ||
| 561 | files for the software you are building to determine the actual | ||
| 562 | license. | ||
| 563 | </para> | ||
| 564 | </section> | ||
| 565 | |||
| 566 | <section id='sdk-adding-makefile-only-software'> | ||
| 567 | <title>Adding Makefile-Only Software</title> | ||
| 568 | |||
| 569 | <para> | ||
| 570 | The use of <filename>make</filename> by itself is very common | ||
| 571 | in both proprietary and open source software. | ||
| 572 | Unfortunately, Makefiles are often not written with | ||
| 573 | cross-compilation in mind. | ||
| 574 | Thus, <filename>devtool add</filename> often cannot do very | ||
| 575 | much to ensure that these Makefiles build correctly. | ||
| 576 | It is very common, for example, to explicitly call | ||
| 577 | <filename>gcc</filename> instead of using the | ||
| 578 | <filename>CC</filename> variable. | ||
| 579 | Usually, in a cross-compilation environment, | ||
| 580 | <filename>gcc</filename> is the compiler for the build host | ||
| 581 | and the cross-compiler is named something similar to | ||
| 582 | <filename>arm-poky-linux-gnueabi-gcc</filename> and might | ||
| 583 | require some arguments (e.g. to point to the associated sysroot | ||
| 584 | for the target machine). | ||
| 585 | </para> | ||
| 586 | |||
| 587 | <para> | ||
| 588 | When writing a recipe for Makefile-only software, keep the | ||
| 589 | following in mind: | ||
| 590 | <itemizedlist> | ||
| 591 | <listitem><para> | ||
| 592 | You probably need to patch the Makefile to use | ||
| 593 | variables instead of hardcoding tools within the | ||
| 594 | toolchain such as <filename>gcc</filename> and | ||
| 595 | <filename>g++</filename>. | ||
| 596 | </para></listitem> | ||
| 597 | <listitem><para> | ||
| 598 | The environment in which <filename>make</filename> runs | ||
| 599 | is set up with various standard variables for | ||
| 600 | compilation (e.g. <filename>CC</filename>, | ||
| 601 | <filename>CXX</filename>, and so forth) in a similar | ||
| 602 | manner to the environment set up by the SDK's | ||
| 603 | environment setup script. | ||
| 604 | One easy way to see these variables is to run the | ||
| 605 | <filename>devtool build</filename> command on the | ||
| 606 | recipe and then look in | ||
| 607 | <filename>oe-logs/run.do_compile</filename>. | ||
| 608 | Towards the top of this file you will see a list of | ||
| 609 | environment variables that are being set. | ||
| 610 | You can take advantage of these variables within the | ||
| 611 | Makefile. | ||
| 612 | </para></listitem> | ||
| 613 | <listitem><para> | ||
| 614 | If the Makefile sets a default for a variable, that | ||
| 615 | default overrides the value set in the environment, | ||
| 616 | which is usually not desirable. | ||
| 617 | In this situation, you can either patch the Makefile | ||
| 618 | so it sets the default using the "?=" operator, or | ||
| 619 | you can alternatively force the value on the | ||
| 620 | <filename>make</filename> command line. | ||
| 621 | To force the value on the command line, add the | ||
| 622 | variable setting to | ||
| 623 | <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></ulink> | ||
| 624 | within the recipe as follows: | ||
| 625 | <literallayout class='monospaced'> | ||
| 626 | EXTRA_OEMAKE += "'CC=${CC}' 'CXX=${CXX}'" | ||
| 627 | </literallayout> | ||
| 628 | In the above example, single quotes are used around the | ||
| 629 | variable settings as the values are likely to contain | ||
| 630 | spaces because required default options are passed to | ||
| 631 | the compiler. | ||
| 632 | </para></listitem> | ||
| 633 | <listitem><para> | ||
| 634 | Hardcoding paths inside Makefiles is often problematic | ||
| 635 | in a cross-compilation environment. | ||
| 636 | This is particularly true because those hardcoded paths | ||
| 637 | often point to locations on the build host and thus | ||
| 638 | will either be read-only or will introduce | ||
| 639 | contamination into the cross-compilation by virtue of | ||
| 640 | being specific to the build host rather than the target. | ||
| 641 | Patching the Makefile to use prefix variables or other | ||
| 642 | path variables is usually the way to handle this. | ||
| 643 | </para></listitem> | ||
| 644 | <listitem><para> | ||
| 645 | Sometimes a Makefile runs target-specific commands such | ||
| 646 | as <filename>ldconfig</filename>. | ||
| 647 | For such cases, you might be able to simply apply | ||
| 648 | patches that remove these commands from the Makefile. | ||
| 649 | </para></listitem> | ||
| 650 | </itemizedlist> | ||
| 651 | </para> | ||
| 652 | </section> | ||
| 653 | |||
| 654 | <section id='sdk-adding-native-tools'> | ||
| 655 | <title>Adding Native Tools</title> | ||
| 656 | |||
| 657 | <para> | ||
| 658 | Often, you need to build additional tools that run on the | ||
| 659 | build host system as opposed to the target. | ||
| 660 | You should indicate this using one of the following methods | ||
| 661 | when you run <filename>devtool add</filename>: | ||
| 662 | <itemizedlist> | ||
| 663 | <listitem><para> | ||
| 664 | Specify the name of the recipe such that it ends | ||
| 665 | with "-native". | ||
| 666 | Specifying the name like this produces a recipe that | ||
| 667 | only builds for the build host. | ||
| 668 | </para></listitem> | ||
| 669 | <listitem><para> | ||
| 670 | Specify the "‐‐also-native" option with the | ||
| 671 | <filename>devtool add</filename> command. | ||
| 672 | Specifying this option creates a recipe file that still | ||
| 673 | builds for the target but also creates a variant with | ||
| 674 | a "-native" suffix that builds for the build host. | ||
| 675 | </para></listitem> | ||
| 676 | </itemizedlist> | ||
| 677 | <note> | ||
| 678 | If you need to add a tool that is shipped as part of a | ||
| 679 | source tree that builds code for the target, you can | ||
| 680 | typically accomplish this by building the native and target | ||
| 681 | parts separately rather than within the same compilation | ||
| 682 | process. | ||
| 683 | Realize though that with the "‐‐also-native" option, you | ||
| 684 | can add the tool using just one recipe file. | ||
| 685 | </note> | ||
| 686 | </para> | ||
| 687 | </section> | ||
| 688 | |||
| 689 | <section id='sdk-adding-node-js-modules'> | ||
| 690 | <title>Adding <filename>Node.js</filename> Modules</title> | ||
| 691 | |||
| 692 | <para> | ||
| 693 | You can use the <filename>devtool add</filename> command in the | ||
| 694 | following form to add <filename>Node.js</filename> modules: | ||
| 695 | <literallayout class='monospaced'> | ||
| 696 | $ devtool add "npm://registry.npmjs.org;name=forever;version=0.15.1" | ||
| 697 | </literallayout> | ||
| 698 | The name and version parameters are mandatory. | ||
| 699 | Lockdown and shrinkwrap files are generated and pointed to by | ||
| 700 | the recipe in order to freeze the version that is fetched for | ||
| 701 | the dependencies according to the first time. | ||
| 702 | This also saves checksums that are verified on future fetches. | ||
| 703 | Together, these behaviors ensure the reproducibility and | ||
| 704 | integrity of the build. | ||
| 705 | <note><title>Notes</title> | ||
| 706 | <itemizedlist> | ||
| 707 | <listitem><para> | ||
| 708 | You must use quotes around the URL. | ||
| 709 | The <filename>devtool add</filename> does not require | ||
| 710 | the quotes, but the shell considers ";" as a splitter | ||
| 711 | between multiple commands. | ||
| 712 | Thus, <filename>devtool add</filename> does not receive | ||
| 713 | the other parts resulting in several "command not found" | ||
| 714 | errors. | ||
| 715 | </para></listitem> | ||
| 716 | <listitem><para> | ||
| 717 | In order to support adding | ||
| 718 | <filename>Node.js</filename> modules, a | ||
| 719 | <filename>nodejs</filename> recipe must be part of your | ||
| 720 | SDK in order to provide <filename>Node.js</filename> | ||
| 721 | itself. | ||
| 722 | </para></listitem> | ||
| 723 | </itemizedlist> | ||
| 724 | </note> | ||
| 725 | </para> | ||
| 726 | </section> | ||
| 727 | </section> | ||
| 728 | |||
| 729 | <section id='sdk-working-with-recipes'> | ||
| 730 | <title>Working With Recipes</title> | ||
| 731 | |||
| 732 | <para> | ||
| 733 | When building a recipe with <filename>devtool build</filename> the | ||
| 734 | typical workflow is as follows: | ||
| 735 | <orderedlist> | ||
| 736 | <listitem><para> | ||
| 737 | Fetch the source | ||
| 738 | </para></listitem> | ||
| 739 | <listitem><para> | ||
| 740 | Unpack the source | ||
| 741 | </para></listitem> | ||
| 742 | <listitem><para> | ||
| 743 | Configure the source | ||
| 744 | </para></listitem> | ||
| 745 | <listitem><para> | ||
| 746 | Compiling the source | ||
| 747 | </para></listitem> | ||
| 748 | <listitem><para> | ||
| 749 | Install the build output | ||
| 750 | </para></listitem> | ||
| 751 | <listitem><para> | ||
| 752 | Package the installed output | ||
| 753 | </para></listitem> | ||
| 754 | </orderedlist> | ||
| 755 | For recipes in the workspace, fetching and unpacking is disabled | ||
| 756 | as the source tree has already been prepared and is persistent. | ||
| 757 | Each of these build steps is defined as a function, usually with a | ||
| 758 | "do_" prefix. | ||
| 759 | These functions are typically shell scripts but can instead be written | ||
| 760 | in Python. | ||
| 761 | </para> | ||
| 762 | |||
| 763 | <para> | ||
| 764 | If you look at the contents of a recipe, you will see that the | ||
| 765 | recipe does not include complete instructions for building the | ||
| 766 | software. | ||
| 767 | Instead, common functionality is encapsulated in classes inherited | ||
| 768 | with the <filename>inherit</filename> directive, leaving the recipe | ||
| 769 | to describe just the things that are specific to the software to be | ||
| 770 | built. | ||
| 771 | A <ulink url='ref-classes-base'><filename>base</filename></ulink> | ||
| 772 | class exists that is implicitly inherited by all recipes and provides | ||
| 773 | the functionality that most typical recipes need. | ||
| 774 | </para> | ||
| 775 | |||
| 776 | <para> | ||
| 777 | The remainder of this section presents information useful when | ||
| 778 | working with recipes. | ||
| 779 | </para> | ||
| 780 | |||
| 781 | <section id='sdk-finding-logs-and-work-files'> | ||
| 782 | <title>Finding Logs and Work Files</title> | ||
| 783 | |||
| 784 | <para> | ||
| 785 | When you are debugging a recipe that you previously created using | ||
| 786 | <filename>devtool add</filename> or whose source you are modifying | ||
| 787 | by using the <filename>devtool modify</filename> command, after | ||
| 788 | the first run of <filename>devtool build</filename>, you will | ||
| 789 | find some symbolic links created within the source tree: | ||
| 790 | <filename>oe-logs</filename>, which points to the directory in | ||
| 791 | which log files and run scripts for each build step are created | ||
| 792 | and <filename>oe-workdir</filename>, which points to the temporary | ||
| 793 | work area for the recipe. | ||
| 794 | You can use these links to get more information on what is | ||
| 795 | happening at each build step. | ||
| 796 | </para> | ||
| 797 | |||
| 798 | <para> | ||
| 799 | These locations under <filename>oe-workdir</filename> are | ||
| 800 | particularly useful: | ||
| 801 | <itemizedlist> | ||
| 802 | <listitem><para><filename>image/</filename>: | ||
| 803 | Contains all of the files installed at the | ||
| 804 | <ulink url='&YOCTO_DOCS_REF_URL;ref-tasks-install'><filename>do_install</filename></ulink> | ||
| 805 | stage. | ||
| 806 | Within a recipe, this directory is referred to by the | ||
| 807 | expression | ||
| 808 | <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename>. | ||
| 809 | </para></listitem> | ||
| 810 | <listitem><para><filename>sysroot-destdir/</filename>: | ||
| 811 | Contains a subset of files installed within | ||
| 812 | <filename>do_install</filename> that have been put into the | ||
| 813 | shared sysroot. | ||
| 814 | For more information, see the | ||
| 815 | "<link linkend='sdk-sharing-files-between-recipes'>Sharing Files Between Recipes</link>" | ||
| 816 | section. | ||
| 817 | </para></listitem> | ||
| 818 | <listitem><para><filename>packages-split/</filename>: | ||
| 819 | Contains subdirectories for each package produced by the | ||
| 820 | recipe. (more on "Packaging" below) | ||
| 821 | For more information, see the | ||
| 822 | "<link linkend='sdk-packaging'>Packaging</link>" section. | ||
| 823 | </para></listitem> | ||
| 824 | </itemizedlist> | ||
| 825 | </para> | ||
| 826 | </section> | ||
| 827 | |||
| 828 | <section id='sdk-setting-configure-arguments'> | ||
| 829 | <title>Setting Configure Arguments</title> | ||
| 830 | |||
| 831 | <para> | ||
| 832 | If the software your recipe is building uses GNU autoconf, | ||
| 833 | then a fixed set of arguments is passed to it to enable | ||
| 834 | cross-compilation plus any extras specified by | ||
| 835 | <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></ulink> | ||
| 836 | set within the recipe. | ||
| 837 | If you wish to pass additional options, add them to | ||
| 838 | <filename>EXTRA_OECONF</filename>. | ||
| 839 | Other supported build tools have similar variables | ||
| 840 | (e.g. | ||
| 841 | <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></ulink> | ||
| 842 | for CMake, | ||
| 843 | <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OESCONS'><filename>EXTRA_OESCONS</filename></ulink> | ||
| 844 | for <filename>Scons</filename>, and so forth). | ||
| 845 | If you need to pass anything on the <filename>make</filename> | ||
| 846 | command line, you can use <filename>EXTRA_OEMAKE</filename> to do | ||
| 847 | so. | ||
| 848 | </para> | ||
| 849 | |||
| 850 | <para> | ||
| 851 | You can use the <filename>devtool configure-help</filename> command | ||
| 852 | to help you set the arguments listed in the previous paragraph. | ||
| 853 | The command determines the exact options being passed, and shows | ||
| 854 | them to you along with any custom arguments specified through | ||
| 855 | <filename>EXTRA_OECONF</filename>. | ||
| 856 | If applicable, the command also shows you the output of the | ||
| 857 | configure script's "‐‐help" option as a reference. | ||
| 858 | </para> | ||
| 859 | </section> | ||
| 860 | |||
| 861 | <section id='sdk-sharing-files-between-recipes'> | ||
| 862 | <title>Sharing Files Between Recipes</title> | ||
| 863 | |||
| 864 | <para> | ||
| 865 | Recipes often need to use files provided by other recipes on | ||
| 866 | the build host. | ||
| 867 | For example, an application linking to a common library needs | ||
| 868 | access to the library itself and its associated headers. | ||
| 869 | The way this access is accomplished within the extensible SDK is | ||
| 870 | through the sysroot. | ||
| 871 | One sysroot exists per "machine" for which the SDK is being built. | ||
| 872 | In practical terms, this means a sysroot exists for the target | ||
| 873 | machine, and a sysroot exists for the build host. | ||
| 874 | </para> | ||
| 875 | |||
| 876 | <para> | ||
| 877 | Recipes should never write files directly into the sysroot. | ||
| 878 | Instead, files should be installed into standard locations | ||
| 879 | during the | ||
| 880 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink> | ||
| 881 | task within the | ||
| 882 | <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'><filename>D</filename></ulink><filename>}</filename> | ||
| 883 | directory. | ||
| 884 | A subset of these files automatically go into the sysroot. | ||
| 885 | The reason for this limitation is that almost all files that go | ||
| 886 | into the sysroot are cataloged in manifests in order to ensure | ||
| 887 | they can be removed later when a a recipe is modified or removed. | ||
| 888 | Thus, the sysroot is able to remain free from stale files. | ||
| 889 | </para> | ||
| 890 | </section> | ||
| 891 | |||
| 892 | <section id='sdk-packaging'> | ||
| 893 | <title>Packaging</title> | ||
| 894 | |||
| 895 | <para> | ||
| 896 | Packaging is not always particularly relevant within the | ||
| 897 | extensible SDK. | ||
| 898 | However, if you examine build output gets into the final image on | ||
| 899 | the target device, it is important to understand packaging | ||
| 900 | because the contents of the image are expressed in terms of | ||
| 901 | packages ... not recipes. | ||
| 902 | </para> | ||
| 903 | |||
| 904 | <para> | ||
| 905 | During the | ||
| 906 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-package'><filename>do_package</filename></ulink> | ||
| 907 | task, files installed during the | ||
| 908 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink> | ||
| 909 | task are split into one main package, which is almost always named | ||
| 910 | the same as the recipe, and several other packages. | ||
| 911 | This separation is done because not all of those installed files | ||
| 912 | are always useful in every image. | ||
| 913 | For example, you probably do not need any of the documentation | ||
| 914 | installed in a production image. | ||
| 915 | Consequently, for each recipe the documentation files are separated | ||
| 916 | into a <filename>-doc</filename> package. | ||
| 917 | Recipes that package software that has optional modules or | ||
| 918 | plugins might do additional package splitting as well. | ||
| 919 | </para> | ||
| 920 | |||
| 921 | <para> | ||
| 922 | After building a recipe you can see where files have gone by | ||
| 923 | looking in the <filename>oe-workdir/packages-split</filename> | ||
| 924 | directory, which contains a subdirectory for each package. | ||
| 925 | Apart from some advanced cases, the | ||
| 926 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'><filename>PACKAGES</filename></ulink> | ||
| 927 | and | ||
| 928 | <ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'><filename>FILES</filename></ulink> | ||
| 929 | variables controls splitting. | ||
| 930 | The <filename>PACKAGES</filename> variable lists all of the | ||
| 931 | packages to be produced, while the <filename>FILES</filename> | ||
| 932 | variable specifies which files to include in each package, | ||
| 933 | using an override to specify the package. | ||
| 934 | For example, <filename>FILES_${PN}</filename> specifies the files | ||
| 935 | to go into the main package (i.e. the main package is named the | ||
| 936 | same as the recipe and | ||
| 937 | <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename> | ||
| 938 | evaluates to the recipe name). | ||
| 939 | The order of the <filename>PACKAGES</filename> value is significant. | ||
| 940 | For each installed file, the first package whose | ||
| 941 | <filename>FILES</filename> value matches the file is the package | ||
| 942 | into which the file goes. | ||
| 943 | Defaults exist for both the <filename>PACKAGES</filename> and | ||
| 944 | <filename>FILES</filename> variables. | ||
| 945 | Consequently, you might find you do not even need to set these | ||
| 946 | variables in your recipe unless the software the recipe is | ||
| 947 | building installs files into non-standard locations. | ||
| 948 | </para> | ||
| 949 | </section> | ||
| 950 | |||
| 951 | <section id='sdk-restoring-the-target-device-to-its-original-state'> | ||
| 952 | <title>Restoring the Target Device to its Original State</title> | ||
| 953 | |||
| 954 | <para> | ||
| 955 | If you use the <filename>devtool deploy-target</filename> | ||
| 956 | command to write a recipe's build output to the target, and | ||
| 957 | you are working on an existing component of the system, then you | ||
| 958 | might find yourself in a situation where you need to restore the | ||
| 959 | original files that existed prior to running the | ||
| 960 | <filename>devtool deploy-target</filename> command. | ||
| 961 | Because the <filename>devtool deploy-target</filename> command | ||
| 962 | backs up any files it overwrites, you can use the | ||
| 963 | <filename>devtool undeploy-target</filename> to restore those files | ||
| 964 | and remove any other files the recipe deployed. | ||
| 965 | Consider the following example: | ||
| 966 | <literallayout class='monospaced'> | ||
| 967 | $ devtool undeploy-target lighttpd root@192.168.7.2 | ||
| 968 | </literallayout> | ||
| 969 | If you have deployed multiple applications, you can remove them | ||
| 970 | all at once thus restoring the target device back to its | ||
| 971 | original state: | ||
| 972 | <literallayout class='monospaced'> | ||
| 973 | $ devtool undeploy-target -a root@192.168.7.2 | ||
| 974 | </literallayout> | ||
| 975 | Information about files deployed to the target as well as any | ||
| 976 | backed up files are stored on the target itself. | ||
| 977 | This storage of course requires some additional space | ||
| 978 | on the target machine. | ||
| 979 | <note> | ||
| 980 | The <filename>devtool deploy-target</filename> and | ||
| 981 | <filename>devtool undeploy-target</filename> command do not | ||
| 982 | currently interact with any package management system on the | ||
| 983 | target device (e.g. RPM or OPKG). | ||
| 984 | Consequently, you should not intermingle operations | ||
| 985 | <filename>devtool deploy-target</filename> and the package | ||
| 986 | manager operations on the target device. | ||
| 987 | Doing so could result in a conflicting set of files. | ||
| 988 | </note> | ||
| 989 | </para> | ||
| 990 | </section> | ||
| 991 | </section> | ||
| 992 | |||
| 386 | </appendix> | 993 | </appendix> |
| 387 | <!-- | 994 | <!-- |
| 388 | vim: expandtab tw=80 ts=4 | 995 | vim: expandtab tw=80 ts=4 |
