diff options
author | Scott Rifenbark <srifenbark@gmail.com> | 2016-10-11 09:46:28 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-10-13 23:16:47 +0100 |
commit | b2f1d21ff3d0e2f1f152a208394741dad789a623 (patch) | |
tree | 7883b174e6ffa6a6935e493751543d5ca3c89f5b | |
parent | 551f7d87c9fb6e4652afd6a921c9e4f816ebc2b7 (diff) | |
download | poky-b2f1d21ff3d0e2f1f152a208394741dad789a623.tar.gz |
dev-manual: Re-wrote the remote GDB debugging section.
Fixed [YOCTO #9481]
Complete re-write based on Mark Hatle's steps. I converted
from sub-sections to an ordered list.
(From yocto-docs rev: f83bfe5d3dc012b924b6870672d7260a9c0bc3ee)
Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 463 |
1 files changed, 193 insertions, 270 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 5c7284238d..a2376f67a8 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -9736,15 +9736,6 @@ | |||
9736 | as all the heavy debugging is done by the host GDB. | 9736 | as all the heavy debugging is done by the host GDB. |
9737 | Offloading these processes gives the Gdbserver running on the target a chance to remain | 9737 | Offloading these processes gives the Gdbserver running on the target a chance to remain |
9738 | small and fast. | 9738 | small and fast. |
9739 | <note> | ||
9740 | By default, source files are part of the | ||
9741 | <filename>*-dbg</filename> packages in order to enable GDB | ||
9742 | to show source lines in its output. | ||
9743 | You can save further space on the target by setting the | ||
9744 | <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_DEBUG_SPLIT_STYLE'><filename>PACKAGE_DEBUG_SPLIT_STYLE</filename></ulink> | ||
9745 | variable to "debug-without-src" so that these packages do not | ||
9746 | include the source files. | ||
9747 | </note> | ||
9748 | </para> | 9739 | </para> |
9749 | 9740 | ||
9750 | <para> | 9741 | <para> |
@@ -9768,10 +9759,200 @@ | |||
9768 | </para> | 9759 | </para> |
9769 | 9760 | ||
9770 | <para> | 9761 | <para> |
9771 | The remainder of this section describes the steps you need to take | 9762 | The following steps show you how to debug using the GNU project |
9772 | to debug using the GNU project debugger. | 9763 | debugger. |
9764 | <orderedlist> | ||
9765 | <listitem><para> | ||
9766 | <emphasis>Configure your build system to construct the | ||
9767 | companion debug filesystem:</emphasis></para> | ||
9768 | |||
9769 | <para>In your <filename>local.conf</filename> file, set | ||
9770 | the following: | ||
9771 | <literallayout class='monospaced'> | ||
9772 | IMAGE_GEN_DEBUGFS = "1" | ||
9773 | IMAGE_FSTYPES_DEBUGFS = "tar.bz2" | ||
9774 | </literallayout> | ||
9775 | These options cause the OpenEmbedded build system | ||
9776 | to generate a special companion filesystem fragment, | ||
9777 | which contains the matching source and debug symbols to | ||
9778 | your deployable filesystem. | ||
9779 | The build system does this by looking at what is in the | ||
9780 | deployed filesystem, and pulling the corresponding | ||
9781 | <filename>-dbg</filename> packages.</para> | ||
9782 | |||
9783 | <para>The companion debug filesystem is not a complete | ||
9784 | filesystem, but only contains the debug fragments. | ||
9785 | This filesystem must be combined with the full filesystem | ||
9786 | for debugging. | ||
9787 | Subsequent steps in this procedure show how to combine | ||
9788 | the partial filesystem with the full filesystem. | ||
9789 | </para></listitem> | ||
9790 | <listitem><para> | ||
9791 | <emphasis>Configure the system to include Gdbserver in | ||
9792 | the target filesystem:</emphasis></para> | ||
9793 | |||
9794 | <para>Make the following addition in either your | ||
9795 | <filename>local.conf</filename> file or in an image | ||
9796 | recipe: | ||
9797 | <literallayout class='monospaced'> | ||
9798 | IMAGE_INSTALL_append = “ gdbserver" | ||
9799 | </literallayout> | ||
9800 | The change makes sure the <filename>gdbserver</filename> | ||
9801 | package is included. | ||
9802 | </para></listitem> | ||
9803 | <listitem><para> | ||
9804 | <emphasis>Build the environment:</emphasis></para> | ||
9805 | |||
9806 | <para>Use the following command to construct the image and | ||
9807 | the companion Debug Filesystem: | ||
9808 | <literallayout class='monospaced'> | ||
9809 | $ bitbake <replaceable>image</replaceable> | ||
9810 | </literallayout> | ||
9811 | Build the cross GDB component and make it available | ||
9812 | for debugging. | ||
9813 | Build the SDK that matches the image. | ||
9814 | Building the SDK is best for a production build | ||
9815 | that can be used later for debugging, especially | ||
9816 | during long term maintenance: | ||
9817 | <literallayout class='monospaced'> | ||
9818 | $ bitbake -c populate_sdk <replaceable>image</replaceable> | ||
9819 | </literallayout></para> | ||
9820 | |||
9821 | <para>Alternatively, you can build the minimal | ||
9822 | toolchain components that match the target. | ||
9823 | Doing so creates a smaller than typical SDK and only | ||
9824 | contains a minimal set of components with which to | ||
9825 | build simple test applications, as well as run the | ||
9826 | debugger: | ||
9827 | <literallayout class='monospaced'> | ||
9828 | $ bitbake meta-toolchain | ||
9829 | </literallayout></para> | ||
9830 | |||
9831 | <para>A final method is to build Gdb itself within | ||
9832 | the build system: | ||
9833 | <literallayout class='monospaced'> | ||
9834 | $ bitbake gdb-cross-<replaceable>architecture</replaceable> | ||
9835 | </literallayout> | ||
9836 | Doing so produces a temporary copy of | ||
9837 | <filename>cross-gdb</filename> you can use for | ||
9838 | debugging during development. | ||
9839 | While this is the quickest approach, the two previous | ||
9840 | methods in this step are better when considering | ||
9841 | long-term maintenance strategies. | ||
9842 | <note> | ||
9843 | If you run | ||
9844 | <filename>bitbake gdb-cross</filename>, the | ||
9845 | OpenEmbedded build system suggests the actual | ||
9846 | image (e.g. <filename>gdb-cross-i586</filename>). | ||
9847 | The suggestion is usually the actual name you want | ||
9848 | to use. | ||
9849 | </note> | ||
9850 | </para></listitem> | ||
9851 | <listitem><para> | ||
9852 | <emphasis>Set up the</emphasis> <filename>debugfs</filename></para> | ||
9853 | |||
9854 | <para>Run the following commands to set up the | ||
9855 | <filename>debugfs</filename>: | ||
9856 | <literallayout class='monospaced'> | ||
9857 | $ mkdir debugfs | ||
9858 | $ cd debugfs | ||
9859 | $ tar xvfj <replaceable>build-dir</replaceable>/tmp-glibc/deploy/images/<replaceable>machine</replaceable>/<replaceable>image</replaceable>.rootfs.tar.bz2 | ||
9860 | $ tar xvfj <replaceable>build-dir</replaceable>/tmp-glibc/deploy/images/<replaceable>machine</replaceable>/<replaceable>image</replaceable>-dbg.rootfs.tar.bz2 | ||
9861 | </literallayout> | ||
9862 | </para></listitem> | ||
9863 | <listitem><para> | ||
9864 | <emphasis>Set up GDB</emphasis></para> | ||
9865 | |||
9866 | <para>Install the SDK (if you built one) and then | ||
9867 | source the correct environment file. | ||
9868 | Sourcing the environment file puts the SDK in your | ||
9869 | <filename>PATH</filename> environment variable.</para> | ||
9870 | |||
9871 | <para>If you are using the build system, Gdb is | ||
9872 | located in | ||
9873 | <replaceable>build-dir</replaceable>/tmp/sysroots/<replaceable>host</replaceable>/usr/bin/<replaceable>architecture</replaceable>/<replaceable>architecture</replaceable>-gdb | ||
9874 | </para></listitem> | ||
9875 | <listitem><para> | ||
9876 | <emphasis>Boot the target:</emphasis></para> | ||
9877 | |||
9878 | <para>For information on how to run QEMU, see the | ||
9879 | <ulink url='http://wiki.qemu.org/Documentation/GettingStartedDevelopers'>QEMU Documentation</ulink>. | ||
9880 | <note> | ||
9881 | Be sure to verify that your host can access the | ||
9882 | target via TCP. | ||
9883 | </note> | ||
9884 | </para></listitem> | ||
9885 | <listitem><para> | ||
9886 | <emphasis>Debug a program:</emphasis></para> | ||
9887 | |||
9888 | <para>Debugging a program involves running Gdbserver | ||
9889 | on the target and then running Gdb on the host. | ||
9890 | The example in this step debugs | ||
9891 | <filename>gzip</filename>: | ||
9892 | <literallayout class='monospaced'> | ||
9893 | root@qemux86:~# gdbserver localhost:1234 /bin/gzip —help | ||
9894 | </literallayout> | ||
9895 | For additional Gdbserver options, see the | ||
9896 | <ulink url='https://www.gnu.org/software/gdb/documentation/'>Gdb Server Documentation</ulink>. | ||
9897 | </para> | ||
9898 | |||
9899 | <para>After running Gdbserver on the target, you need | ||
9900 | to run Gdb on the host and configure it and connect to | ||
9901 | the target. | ||
9902 | Use these commands: | ||
9903 | <literallayout class='monospaced'> | ||
9904 | $ cd <replaceable>directory-holding-the-debugfs-directory</replaceable> | ||
9905 | $ <replaceable>arch</replaceable>-gdb | ||
9906 | |||
9907 | (gdb) set sysroot debugfs | ||
9908 | (gdb) set substitute-path /usr/src/debug debugfs/usr/src/debug | ||
9909 | (gdb) target remote <replaceable>IP-of-target</replaceable>:1234 | ||
9910 | </literallayout> | ||
9911 | At this point, everything should automatically load | ||
9912 | (i.e. matching binaries, symbols and headers). | ||
9913 | <note> | ||
9914 | The Gdb <filename>set</filename> commands in the | ||
9915 | previous example can be placed into the users | ||
9916 | <filename>~/.gdbinit</filename> file. | ||
9917 | Upon starting, Gdb automatically runs whatever | ||
9918 | commands are in that file. | ||
9919 | </note> | ||
9920 | </para></listitem> | ||
9921 | <listitem><para> | ||
9922 | <emphasis>Deploying without a full image | ||
9923 | rebuild:</emphasis></para> | ||
9924 | |||
9925 | <para>In many cases, during development you want a | ||
9926 | quick method to deploy a new binary to the target and | ||
9927 | debug it, without waiting for a full image build. | ||
9928 | </para> | ||
9929 | |||
9930 | <para>One approach to solving this situation is to | ||
9931 | just build the component you want to debug. | ||
9932 | Once you have built the component, copy the | ||
9933 | executable directly to both the target and the | ||
9934 | host <filename>debugfs</filename>.</para> | ||
9935 | |||
9936 | <para>If the binary is processed through the debug | ||
9937 | splitting in OpenEmbedded, you should also | ||
9938 | copy the debug items (i.e. <filename>.debug</filename> | ||
9939 | contents and corresponding | ||
9940 | <filename>/usr/src/debug</filename> files) | ||
9941 | from the work directory. | ||
9942 | Here is an example: | ||
9943 | <literallayout class='monospaced'> | ||
9944 | $ bitbake bash | ||
9945 | $ bitbake -c devshell bash | ||
9946 | $ cd .. | ||
9947 | $ scp packages-split/bash/bin/bash <replaceable>target</replaceable>:/bin/bash | ||
9948 | $ cp -a packages-split/bash-dbg/* <replaceable>path</replaceable>/debugfs | ||
9949 | </literallayout> | ||
9950 | </para></listitem> | ||
9951 | </orderedlist> | ||
9773 | </para> | 9952 | </para> |
9953 | </section> | ||
9774 | 9954 | ||
9955 | <!-- | ||
9775 | <section id='platdev-gdb-remotedebug-setup'> | 9956 | <section id='platdev-gdb-remotedebug-setup'> |
9776 | <title>Set Up the Cross-Development Debugging Environment</title> | 9957 | <title>Set Up the Cross-Development Debugging Environment</title> |
9777 | 9958 | ||
@@ -9945,6 +10126,7 @@ | |||
9945 | </para> | 10126 | </para> |
9946 | </section> | 10127 | </section> |
9947 | </section> | 10128 | </section> |
10129 | --> | ||
9948 | 10130 | ||
9949 | <section id='debugging-with-the-gnu-project-debugger-gdb-on-the-target'> | 10131 | <section id='debugging-with-the-gnu-project-debugger-gdb-on-the-target'> |
9950 | <title>Debugging with the GNU Project Debugger (GDB) on the Target</title> | 10132 | <title>Debugging with the GNU Project Debugger (GDB) on the Target</title> |
@@ -10290,265 +10472,6 @@ | |||
10290 | </section> | 10472 | </section> |
10291 | </section> | 10473 | </section> |
10292 | 10474 | ||
10293 | <!-- | ||
10294 | <section id="platdev-oprofile"> | ||
10295 | <title>Profiling with OProfile</title> | ||
10296 | |||
10297 | <para> | ||
10298 | <ulink url="http://oprofile.sourceforge.net/">OProfile</ulink> is a | ||
10299 | statistical profiler well suited for finding performance | ||
10300 | bottlenecks in both user-space software and in the kernel. | ||
10301 | This profiler provides answers to questions like "Which functions does my application spend | ||
10302 | the most time in when doing X?" | ||
10303 | Because the OpenEmbedded build system is well integrated with OProfile, it makes profiling | ||
10304 | applications on target hardware straight forward. | ||
10305 | <note> | ||
10306 | For more information on how to set up and run OProfile, see the | ||
10307 | "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile'>oprofile</ulink>" | ||
10308 | section in the Yocto Project Profiling and Tracing Manual. | ||
10309 | </note> | ||
10310 | </para> | ||
10311 | |||
10312 | <para> | ||
10313 | To use OProfile, you need an image that has OProfile installed. | ||
10314 | The easiest way to do this is with "tools-profile" in the | ||
10315 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FEATURES'>IMAGE_FEATURES</ulink></filename> variable. | ||
10316 | You also need debugging symbols to be available on the system where the analysis | ||
10317 | takes place. | ||
10318 | You can gain access to the symbols by using "dbg-pkgs" in the | ||
10319 | <filename>IMAGE_FEATURES</filename> variable or by | ||
10320 | installing the appropriate debug (<filename>-dbg</filename>) | ||
10321 | packages. | ||
10322 | </para> | ||
10323 | |||
10324 | <para> | ||
10325 | For successful call graph analysis, the binaries must preserve the frame | ||
10326 | pointer register and should also be compiled with the | ||
10327 | <filename>-fno-omit-framepointer</filename> flag. | ||
10328 | You can achieve this by setting the | ||
10329 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</ulink></filename> | ||
10330 | variable with the following options: | ||
10331 | <literallayout class='monospaced'> | ||
10332 | -fexpensive-optimizations | ||
10333 | -fno-omit-framepointer | ||
10334 | -frename-registers | ||
10335 | -O2 | ||
10336 | </literallayout> | ||
10337 | You can also achieve it by setting the | ||
10338 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DEBUG_BUILD'>DEBUG_BUILD</ulink></filename> | ||
10339 | variable to "1" in the <filename>local.conf</filename> configuration file. | ||
10340 | If you use the <filename>DEBUG_BUILD</filename> variable, | ||
10341 | you also add extra debugging information that can make the debug | ||
10342 | packages large. | ||
10343 | </para> | ||
10344 | |||
10345 | <section id="platdev-oprofile-target"> | ||
10346 | <title>Profiling on the Target</title> | ||
10347 | |||
10348 | <para> | ||
10349 | Using OProfile, you can perform all the profiling work on the target device. | ||
10350 | A simple OProfile session might look like the following: | ||
10351 | </para> | ||
10352 | |||
10353 | <para> | ||
10354 | <literallayout class='monospaced'> | ||
10355 | # opcontrol ‐‐reset | ||
10356 | # opcontrol ‐‐start ‐‐separate=lib ‐‐no-vmlinux -c 5 | ||
10357 | . | ||
10358 | . | ||
10359 | [do whatever is being profiled] | ||
10360 | . | ||
10361 | . | ||
10362 | # opcontrol ‐‐stop | ||
10363 | $ opreport -cl | ||
10364 | </literallayout> | ||
10365 | </para> | ||
10366 | |||
10367 | <para> | ||
10368 | In this example, the <filename>reset</filename> command clears any previously profiled data. | ||
10369 | The next command starts OProfile. | ||
10370 | The options used when starting the profiler separate dynamic library data | ||
10371 | within applications, disable kernel profiling, and enable callgraphing up to | ||
10372 | five levels deep. | ||
10373 | <note> | ||
10374 | To profile the kernel, you would specify the | ||
10375 | <filename>‐‐vmlinux=/path/to/vmlinux</filename> option. | ||
10376 | The <filename>vmlinux</filename> file is usually in the source directory in the | ||
10377 | <filename>/boot/</filename> directory and must match the running kernel. | ||
10378 | </note> | ||
10379 | </para> | ||
10380 | |||
10381 | <para> | ||
10382 | After you perform your profiling tasks, the next command stops the profiler. | ||
10383 | After that, you can view results with the <filename>opreport</filename> command with options | ||
10384 | to see the separate library symbols and callgraph information. | ||
10385 | </para> | ||
10386 | |||
10387 | <para> | ||
10388 | Callgraphing logs information about time spent in functions and about a function's | ||
10389 | calling function (parent) and called functions (children). | ||
10390 | The higher the callgraphing depth, the more accurate the results. | ||
10391 | However, higher depths also increase the logging overhead. | ||
10392 | Consequently, you should take care when setting the callgraphing depth. | ||
10393 | <note> | ||
10394 | On ARM, binaries need to have the frame pointer enabled for callgraphing to work. | ||
10395 | To accomplish this use the <filename>-fno-omit-framepointer</filename> option | ||
10396 | with <filename>gcc</filename>. | ||
10397 | </note> | ||
10398 | </para> | ||
10399 | |||
10400 | <para> | ||
10401 | For more information on using OProfile, see the OProfile | ||
10402 | online documentation at | ||
10403 | <ulink url="http://oprofile.sourceforge.net/docs/"/>. | ||
10404 | </para> | ||
10405 | </section> | ||
10406 | |||
10407 | <section id="platdev-oprofile-oprofileui"> | ||
10408 | <title>Using OProfileUI</title> | ||
10409 | |||
10410 | <para> | ||
10411 | A graphical user interface for OProfile is also available. | ||
10412 | You can download and build this interface from the Yocto Project at | ||
10413 | <ulink url="&YOCTO_GIT_URL;/cgit.cgi/oprofileui/"></ulink>. | ||
10414 | If the "tools-profile" image feature is selected, all necessary binaries | ||
10415 | are installed onto the target device for OProfileUI interaction. | ||
10416 | For a list of image features that ship with the Yocto Project, | ||
10417 | see the | ||
10418 | "<ulink url='&YOCTO_DOCS_REF_URL;#ref-features-image'>Image Features</ulink>" | ||
10419 | section in the Yocto Project Reference Manual. | ||
10420 | </para> | ||
10421 | |||
10422 | <para> | ||
10423 | Even though the source directory usually includes all needed patches on the target device, you | ||
10424 | might find you need other OProfile patches for recent OProfileUI features. | ||
10425 | If so, see the <ulink url='&YOCTO_GIT_URL;/cgit.cgi/oprofileui/tree/README'> | ||
10426 | OProfileUI README</ulink> for the most recent information. | ||
10427 | </para> | ||
10428 | |||
10429 | <section id="platdev-oprofile-oprofileui-online"> | ||
10430 | <title>Online Mode</title> | ||
10431 | |||
10432 | <para> | ||
10433 | Using OProfile in online mode assumes a working network connection with the target | ||
10434 | hardware. | ||
10435 | With this connection, you just need to run "oprofile-server" on the device. | ||
10436 | By default, OProfile listens on port 4224. | ||
10437 | <note> | ||
10438 | You can change the port using the <filename>‐‐port</filename> command-line | ||
10439 | option. | ||
10440 | </note> | ||
10441 | </para> | ||
10442 | |||
10443 | <para> | ||
10444 | The client program is called <filename>oprofile-viewer</filename> and its UI is relatively | ||
10445 | straight forward. | ||
10446 | You access key functionality through the buttons on the toolbar, which | ||
10447 | are duplicated in the menus. | ||
10448 | Here are the buttons: | ||
10449 | <itemizedlist> | ||
10450 | <listitem><para><emphasis>Connect:</emphasis> Connects to the remote host. | ||
10451 | You can also supply the IP address or hostname.</para></listitem> | ||
10452 | <listitem><para><emphasis>Disconnect:</emphasis> Disconnects from the target. | ||
10453 | </para></listitem> | ||
10454 | <listitem><para><emphasis>Start:</emphasis> Starts profiling on the device. | ||
10455 | </para></listitem> | ||
10456 | <listitem><para><emphasis>Stop:</emphasis> Stops profiling on the device and | ||
10457 | downloads the data to the local host. | ||
10458 | Stopping the profiler generates the profile and displays it in the viewer. | ||
10459 | </para></listitem> | ||
10460 | <listitem><para><emphasis>Download:</emphasis> Downloads the data from the | ||
10461 | target and generates the profile, which appears in the viewer.</para></listitem> | ||
10462 | <listitem><para><emphasis>Reset:</emphasis> Resets the sample data on the device. | ||
10463 | Resetting the data removes sample information collected from previous | ||
10464 | sampling runs. | ||
10465 | Be sure you reset the data if you do not want to include old sample information. | ||
10466 | </para></listitem> | ||
10467 | <listitem><para><emphasis>Save:</emphasis> Saves the data downloaded from the | ||
10468 | target to another directory for later examination.</para></listitem> | ||
10469 | <listitem><para><emphasis>Open:</emphasis> Loads previously saved data. | ||
10470 | </para></listitem> | ||
10471 | </itemizedlist> | ||
10472 | </para> | ||
10473 | |||
10474 | <para> | ||
10475 | The client downloads the complete profile archive from | ||
10476 | the target to the host for processing. | ||
10477 | This archive is a directory that contains the sample data, the object files, | ||
10478 | and the debug information for the object files. | ||
10479 | The archive is then converted using the <filename>oparchconv</filename> script, which is | ||
10480 | included in this distribution. | ||
10481 | The script uses <filename>opimport</filename> to convert the archive from | ||
10482 | the target to something that can be processed on the host. | ||
10483 | </para> | ||
10484 | |||
10485 | <para> | ||
10486 | Downloaded archives reside in the | ||
10487 | <link linkend='build-directory'>Build Directory</link> in | ||
10488 | <filename>tmp</filename> and are cleared up when they are no longer in use. | ||
10489 | </para> | ||
10490 | |||
10491 | <para> | ||
10492 | If you wish to perform kernel profiling, you need to be sure | ||
10493 | a <filename>vmlinux</filename> file that matches the running kernel is available. | ||
10494 | In the source directory, that file is usually located in | ||
10495 | <filename>/boot/vmlinux-<replaceable>kernelversion</replaceable></filename>, where | ||
10496 | <filename><replaceable>kernelversion</replaceable></filename> is the version of the kernel. | ||
10497 | The OpenEmbedded build system generates separate <filename>vmlinux</filename> | ||
10498 | packages for each kernel it builds. | ||
10499 | Thus, it should just be a question of making sure a matching package is | ||
10500 | installed (e.g. <filename>opkg install kernel-vmlinux</filename>). | ||
10501 | The files are automatically installed into development and profiling images | ||
10502 | alongside OProfile. | ||
10503 | A configuration option exists within the OProfileUI settings page that you can use to | ||
10504 | enter the location of the <filename>vmlinux</filename> file. | ||
10505 | </para> | ||
10506 | |||
10507 | <para> | ||
10508 | Waiting for debug symbols to transfer from the device can be slow, and it | ||
10509 | is not always necessary to actually have them on the device for OProfile use. | ||
10510 | All that is needed is a copy of the filesystem with the debug symbols present | ||
10511 | on the viewer system. | ||
10512 | The "<link linkend='platdev-gdb-remotedebug-launch-gdb'>Launch GDB on the Host Computer</link>" | ||
10513 | section covers how to create such a directory within | ||
10514 | the source directory and how to use the OProfileUI Settings | ||
10515 | Dialog to specify the location. | ||
10516 | If you specify the directory, it will be used when the file checksums | ||
10517 | match those on the system you are profiling. | ||
10518 | </para> | ||
10519 | </section> | ||
10520 | |||
10521 | <section id="platdev-oprofile-oprofileui-offline"> | ||
10522 | <title>Offline Mode</title> | ||
10523 | |||
10524 | <para> | ||
10525 | If network access to the target is unavailable, you can generate | ||
10526 | an archive for processing in <filename>oprofile-viewer</filename> as follows: | ||
10527 | <literallayout class='monospaced'> | ||
10528 | # opcontrol ‐‐reset | ||
10529 | # opcontrol ‐‐start ‐‐separate=lib ‐‐no-vmlinux -c 5 | ||
10530 | . | ||
10531 | . | ||
10532 | [do whatever is being profiled] | ||
10533 | . | ||
10534 | . | ||
10535 | # opcontrol ‐‐stop | ||
10536 | # oparchive -o my_archive | ||
10537 | </literallayout> | ||
10538 | </para> | ||
10539 | |||
10540 | <para> | ||
10541 | In the above example, <filename>my_archive</filename> is the name of the | ||
10542 | archive directory where you would like the profile archive to be kept. | ||
10543 | After the directory is created, you can copy it to another host and load it | ||
10544 | using <filename>oprofile-viewer</filename> open functionality. | ||
10545 | If necessary, the archive is converted. | ||
10546 | </para> | ||
10547 | </section> | ||
10548 | </section> | ||
10549 | </section> | ||
10550 | --> | ||
10551 | |||
10552 | <section id='maintaining-open-source-license-compliance-during-your-products-lifecycle'> | 10475 | <section id='maintaining-open-source-license-compliance-during-your-products-lifecycle'> |
10553 | <title>Maintaining Open Source License Compliance During Your Product's Lifecycle</title> | 10476 | <title>Maintaining Open Source License Compliance During Your Product's Lifecycle</title> |
10554 | 10477 | ||