diff options
| -rw-r--r-- | documentation/poky-ref-manual/development.xml | 481 |
1 files changed, 0 insertions, 481 deletions
diff --git a/documentation/poky-ref-manual/development.xml b/documentation/poky-ref-manual/development.xml index 3d2276f9ee..b897efd550 100644 --- a/documentation/poky-ref-manual/development.xml +++ b/documentation/poky-ref-manual/development.xml | |||
| @@ -117,487 +117,6 @@ | |||
| 117 | </para> | 117 | </para> |
| 118 | </section> | 118 | </section> |
| 119 | </section> | 119 | </section> |
| 120 | |||
| 121 | <section id="platdev-gdb-remotedebug"> | ||
| 122 | <title>Debugging With the GNU Project Debugger (GDB) Remotely</title> | ||
| 123 | |||
| 124 | <para> | ||
| 125 | GDB allows you to examine running programs, which in turn help you to understand and fix problems. | ||
| 126 | It also allows you to perform post-mortem style analysis of program crashes. | ||
| 127 | GDB is available as a package within the Yocto Project and by default is | ||
| 128 | installed in sdk images. | ||
| 129 | See the "<link linkend='ref-images'>Reference: Images</link>" appendix for a description of these | ||
| 130 | images. | ||
| 131 | You can find information on GDB at <ulink url="http://sourceware.org/gdb/"/>. | ||
| 132 | </para> | ||
| 133 | |||
| 134 | <tip> | ||
| 135 | For best results, install <filename>-dbg</filename> packages for the applications | ||
| 136 | you are going to debug. | ||
| 137 | Doing so makes available extra debug symbols that give you more meaningful output. | ||
| 138 | </tip> | ||
| 139 | |||
| 140 | <para> | ||
| 141 | Sometimes, due to memory or disk space constraints, it is not possible | ||
| 142 | to use GDB directly on the remote target to debug applications. | ||
| 143 | These constraints arise because GDB needs to load the debugging information and the | ||
| 144 | binaries of the process being debugged. | ||
| 145 | Additionally, GDB needs to perform many computations to locate information such as function | ||
| 146 | names, variable names and values, stack traces and so forth - even before starting the | ||
| 147 | debugging process. | ||
| 148 | These extra computations place more load on the target system and can alter the | ||
| 149 | characteristics of the program being debugged. | ||
| 150 | </para> | ||
| 151 | |||
| 152 | <para> | ||
| 153 | To help get past the previously mentioned constraints, you can use Gdbserver. | ||
| 154 | Gdbserver runs on the remote target and does not load any debugging information | ||
| 155 | from the debugged process. | ||
| 156 | Instead, a GDB instance processes the debugging information that is run on a | ||
| 157 | remote computer - the host GDB. | ||
| 158 | The host GDB then sends control commands to Gdbserver to make it stop or start the debugged | ||
| 159 | program, as well as read or write memory regions of that debugged program. | ||
| 160 | All the debugging information loaded and processed as well | ||
| 161 | as all the heavy debugging is done by the host GDB. | ||
| 162 | Offloading these processes gives the Gdbserver running on the target a chance to remain | ||
| 163 | small and fast. | ||
| 164 | </para> | ||
| 165 | |||
| 166 | <para> | ||
| 167 | Because the host GDB is responsible for loading the debugging information and | ||
| 168 | for doing the necessary processing to make actual debugging happen, the | ||
| 169 | user has to make sure the host can access the unstripped binaries complete | ||
| 170 | with their debugging information and also be sure the target is compiled with no optimizations. | ||
| 171 | The host GDB must also have local access to all the libraries used by the | ||
| 172 | debugged program. | ||
| 173 | Because Gdbserver does not need any local debugging information, the binaries on | ||
| 174 | the remote target can remain stripped. | ||
| 175 | However, the binaries must also be compiled without optimization | ||
| 176 | so they match the host's binaries. | ||
| 177 | </para> | ||
| 178 | |||
| 179 | <para> | ||
| 180 | To remain consistent with GDB documentation and terminology, the binary being debugged | ||
| 181 | on the remote target machine is referred to as the "inferior" binary. | ||
| 182 | For documentation on GDB see the | ||
| 183 | <ulink url="http://sourceware.org/gdb/documentation/">GDB site</ulink>. | ||
| 184 | </para> | ||
| 185 | |||
| 186 | <section id="platdev-gdb-remotedebug-launch-gdbserver"> | ||
| 187 | <title>Launching Gdbserver on the Target</title> | ||
| 188 | |||
| 189 | <para> | ||
| 190 | First, make sure Gdbserver is installed on the target. | ||
| 191 | If it is not, install the package <filename>gdbserver</filename>, which needs the | ||
| 192 | <filename>libthread-db1</filename> package. | ||
| 193 | </para> | ||
| 194 | |||
| 195 | <para> | ||
| 196 | As an example, to launch Gdbserver on the target and make it ready to "debug" a | ||
| 197 | program located at <filename>/path/to/inferior</filename>, connect | ||
| 198 | to the target and launch: | ||
| 199 | <literallayout class='monospaced'> | ||
| 200 | $ gdbserver localhost:2345 /path/to/inferior | ||
| 201 | </literallayout> | ||
| 202 | Gdbserver should now be listening on port 2345 for debugging | ||
| 203 | commands coming from a remote GDB process that is running on the host computer. | ||
| 204 | Communication between Gdbserver and the host GDB are done using TCP. | ||
| 205 | To use other communication protocols, please refer to the | ||
| 206 | <ulink url='http://www.gnu.org/software/gdb/'>Gdbserver documentation</ulink>. | ||
| 207 | </para> | ||
| 208 | </section> | ||
| 209 | |||
| 210 | <section id="platdev-gdb-remotedebug-launch-gdb"> | ||
| 211 | <title>Launching GDB on the Host Computer</title> | ||
| 212 | |||
| 213 | <para> | ||
| 214 | Running GDB on the host computer takes a number of stages. | ||
| 215 | This section describes those stages. | ||
| 216 | </para> | ||
| 217 | |||
| 218 | <section id="platdev-gdb-remotedebug-launch-gdb-buildcross"> | ||
| 219 | <title>Building the Cross-GDB Package</title> | ||
| 220 | <para> | ||
| 221 | A suitable GDB cross-binary is required that runs on your host computer but | ||
| 222 | also knows about the the ABI of the remote target. | ||
| 223 | You can get this binary from the the Yocto Project meta-toolchain. | ||
| 224 | Here is an example: | ||
| 225 | <literallayout class='monospaced'> | ||
| 226 | /usr/local/poky/eabi-glibc/arm/bin/arm-poky-linux-gnueabi-gdb | ||
| 227 | </literallayout> | ||
| 228 | where <filename>arm</filename> is the target architecture and | ||
| 229 | <filename>linux-gnueabi</filename> the target ABI. | ||
| 230 | </para> | ||
| 231 | |||
| 232 | <para> | ||
| 233 | Alternatively, the Yocto Project can build the <filename>gdb-cross</filename> binary. | ||
| 234 | Here is an example: | ||
| 235 | <literallayout class='monospaced'> | ||
| 236 | $ bitbake gdb-cross | ||
| 237 | </literallayout> | ||
| 238 | Once the binary is built, you can find it here: | ||
| 239 | <literallayout class='monospaced'> | ||
| 240 | tmp/sysroots/<host-arch>/usr/bin/<target-abi>-gdb | ||
| 241 | </literallayout> | ||
| 242 | </para> | ||
| 243 | </section> | ||
| 244 | |||
| 245 | <section id="platdev-gdb-remotedebug-launch-gdb-inferiorbins"> | ||
| 246 | <title>Making the Inferior Binaries Available</title> | ||
| 247 | |||
| 248 | <para> | ||
| 249 | The inferior binary (complete with all debugging symbols) as well as any | ||
| 250 | libraries (and their debugging symbols) on which the inferior binary depends | ||
| 251 | need to be available. | ||
| 252 | There are a number of ways you can make these available. | ||
| 253 | </para> | ||
| 254 | |||
| 255 | <para> | ||
| 256 | Perhaps the easiest way is to have an 'sdk' image that corresponds to the plain | ||
| 257 | image installed on the device. | ||
| 258 | In the case of <filename>core-image-sato</filename>, | ||
| 259 | <filename>core-image-sato-sdk</filename> would contain suitable symbols. | ||
| 260 | Because the sdk images already have the debugging symbols installed, it is just a | ||
| 261 | question of expanding the archive to some location and then informing GDB. | ||
| 262 | </para> | ||
| 263 | |||
| 264 | <para> | ||
| 265 | Alternatively, Yocto Project can build a custom directory of files for a specific | ||
| 266 | debugging purpose by reusing its <filename>tmp/rootfs</filename> directory. | ||
| 267 | This directory contains the contents of the last built image. | ||
| 268 | This process assumes two things: | ||
| 269 | <itemizedlist> | ||
| 270 | <listitem><para>The image running on the target was the last image to | ||
| 271 | be built by the Yocto Project.</para></listitem> | ||
| 272 | <listitem><para>The package (<filename>foo</filename> in the following | ||
| 273 | example) that contains the inferior binary to be debugged has been built | ||
| 274 | without optimization and has debugging information available.</para></listitem> | ||
| 275 | </itemizedlist> | ||
| 276 | </para> | ||
| 277 | |||
| 278 | <para> | ||
| 279 | The following steps show how to build the custom directory of files: | ||
| 280 | <orderedlist> | ||
| 281 | <listitem><para>Install the package (<filename>foo</filename> in this case) to | ||
| 282 | <filename>tmp/rootfs</filename>: | ||
| 283 | <literallayout class='monospaced'> | ||
| 284 | $ tmp/sysroots/i686-linux/usr/bin/opkg-cl -f \ | ||
| 285 | tmp/work/<target-abi>/core-image-sato-1.0-r0/temp/opkg.conf -o \ | ||
| 286 | tmp/rootfs/ update | ||
| 287 | </literallayout></para></listitem> | ||
| 288 | <listitem><para>Install the debugging information: | ||
| 289 | <literallayout class='monospaced'> | ||
| 290 | $ tmp/sysroots/i686-linux/usr/bin/opkg-cl -f \ | ||
| 291 | tmp/work/<target-abi>/core-image-sato-1.0-r0/temp/opkg.conf \ | ||
| 292 | -o tmp/rootfs install foo | ||
| 293 | |||
| 294 | $ tmp/sysroots/i686-linux/usr/bin/opkg-cl -f \ | ||
| 295 | tmp/work/<target-abi>/core-image-sato-1.0-r0/temp/opkg.conf \ | ||
| 296 | -o tmp/rootfs install foo-dbg | ||
| 297 | </literallayout></para></listitem> | ||
| 298 | </orderedlist> | ||
| 299 | </para> | ||
| 300 | </section> | ||
| 301 | |||
| 302 | <section id="platdev-gdb-remotedebug-launch-gdb-launchhost"> | ||
| 303 | <title>Launch the Host GDB</title> | ||
| 304 | |||
| 305 | <para> | ||
| 306 | To launch the host GDB, you run the <filename>cross-gdb</filename> binary and provide | ||
| 307 | the inferior binary as part of the command line. | ||
| 308 | For example, the following command form continues with the example used in | ||
| 309 | the previous section. | ||
| 310 | This command form loads the <filename>foo</filename> binary | ||
| 311 | as well as the debugging information: | ||
| 312 | <literallayout class='monospaced'> | ||
| 313 | $ <target-abi>-gdb rootfs/usr/bin/foo | ||
| 314 | </literallayout> | ||
| 315 | Once the GDB prompt appears, you must instruct GDB to load all the libraries | ||
| 316 | of the inferior binary from <filename>tmp/rootfs</filename> as follows: | ||
| 317 | <literallayout class='monospaced'> | ||
| 318 | $ set solib-absolute-prefix /path/to/tmp/rootfs | ||
| 319 | </literallayout> | ||
| 320 | The pathname <filename>/path/to/tmp/rootfs</filename> must either be | ||
| 321 | the absolute path to <filename>tmp/rootfs</filename> or the location at which | ||
| 322 | binaries with debugging information reside. | ||
| 323 | </para> | ||
| 324 | |||
| 325 | <para> | ||
| 326 | At this point you can have GDB connect to the Gdbserver that is running | ||
| 327 | on the remote target by using the following command form: | ||
| 328 | <literallayout class='monospaced'> | ||
| 329 | $ target remote remote-target-ip-address:2345 | ||
| 330 | </literallayout> | ||
| 331 | The <filename>remote-target-ip-address</filename> is the IP address of the | ||
| 332 | remote target where the Gdbserver is running. | ||
| 333 | Port 2345 is the port on which the GDBSERVER is running. | ||
| 334 | </para> | ||
| 335 | </section> | ||
| 336 | |||
| 337 | <section id="platdev-gdb-remotedebug-launch-gdb-using"> | ||
| 338 | <title>Using the Debugger</title> | ||
| 339 | |||
| 340 | <para> | ||
| 341 | You can now proceed with debugging as normal - as if you were debugging | ||
| 342 | on the local machine. | ||
| 343 | For example, to instruct GDB to break in the "main" function and then | ||
| 344 | continue with execution of the inferior binary use the following commands | ||
| 345 | from within GDB: | ||
| 346 | <literallayout class='monospaced'> | ||
| 347 | (gdb) break main | ||
| 348 | (gdb) continue | ||
| 349 | </literallayout> | ||
| 350 | </para> | ||
| 351 | |||
| 352 | <para> | ||
| 353 | For more information about using GDB, see the project's online documentation at | ||
| 354 | <ulink url="http://sourceware.org/gdb/download/onlinedocs/"/>. | ||
| 355 | </para> | ||
| 356 | </section> | ||
| 357 | </section> | ||
| 358 | </section> | ||
| 359 | |||
| 360 | <section id="platdev-oprofile"> | ||
| 361 | <title>Profiling with OProfile</title> | ||
| 362 | |||
| 363 | <para> | ||
| 364 | <ulink url="http://oprofile.sourceforge.net/">OProfile</ulink> is a | ||
| 365 | statistical profiler well suited for finding performance | ||
| 366 | bottlenecks in both userspace software and in the kernel. | ||
| 367 | This profiler provides answers to questions like "Which functions does my application spend | ||
| 368 | the most time in when doing X?" | ||
| 369 | Because the Yocto Project is well integrated with OProfile, it makes profiling applications on target | ||
| 370 | hardware straightforward. | ||
| 371 | </para> | ||
| 372 | |||
| 373 | <para> | ||
| 374 | To use OProfile, you need an image that has OProfile installed. | ||
| 375 | The easiest way to do this is with <filename>tools-profile</filename> in the | ||
| 376 | <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename> variable. | ||
| 377 | You also need debugging symbols to be available on the system where the analysis | ||
| 378 | takes place. | ||
| 379 | You can gain access to the symbols by using <filename>dbg-pkgs</filename> in the | ||
| 380 | <filename>IMAGE_FEATURES</filename> variable or by | ||
| 381 | installing the appropriate <filename>-dbg</filename> packages. | ||
| 382 | </para> | ||
| 383 | |||
| 384 | <para> | ||
| 385 | For successful call graph analysis, the binaries must preserve the frame | ||
| 386 | pointer register and should also be compiled with the | ||
| 387 | <filename>-fno-omit-framepointer</filename> flag. | ||
| 388 | In the Yocto Project you can achieve this by setting the | ||
| 389 | <filename><link linkend='var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION | ||
| 390 | </link></filename> variable to | ||
| 391 | <filename>-fexpensive-optimizations -fno-omit-framepointer -frename-registers -O2</filename>. | ||
| 392 | You can also achieve it by setting the | ||
| 393 | <filename><link linkend='var-DEBUG_BUILD'>DEBUG_BUILD</link></filename> variable to "1" in | ||
| 394 | the <filename>local.conf</filename> configuration file. | ||
| 395 | If you use the <filename>DEBUG_BUILD</filename> variable you will also add extra debug information | ||
| 396 | that can make the debug packages large. | ||
| 397 | </para> | ||
| 398 | |||
| 399 | <section id="platdev-oprofile-target"> | ||
| 400 | <title>Profiling on the Target</title> | ||
| 401 | |||
| 402 | <para> | ||
| 403 | Using OProfile you can perform all the profiling work on the target device. | ||
| 404 | A simple OProfile session might look like the following: | ||
| 405 | </para> | ||
| 406 | |||
| 407 | <para> | ||
| 408 | <literallayout class='monospaced'> | ||
| 409 | # opcontrol --reset | ||
| 410 | # opcontrol --start --separate=lib --no-vmlinux -c 5 | ||
| 411 | . | ||
| 412 | . | ||
| 413 | [do whatever is being profiled] | ||
| 414 | . | ||
| 415 | . | ||
| 416 | # opcontrol --stop | ||
| 417 | $ opreport -cl | ||
| 418 | </literallayout> | ||
| 419 | </para> | ||
| 420 | |||
| 421 | <para> | ||
| 422 | In this example, the <filename>reset</filename> command clears any previously profiled data. | ||
| 423 | The next command starts OProfile. | ||
| 424 | The options used when starting the profiler separate dynamic library data | ||
| 425 | within applications, disable kernel profiling, and enable callgraphing up to | ||
| 426 | five levels deep. | ||
| 427 | <note> | ||
| 428 | To profile the kernel, you would specify the | ||
| 429 | <filename>--vmlinux=/path/to/vmlinux</filename> option. | ||
| 430 | The <filename>vmlinux</filename> file is usually in the Yocto Project file's | ||
| 431 | <filename>/boot/</filename> directory and must match the running kernel. | ||
| 432 | </note> | ||
| 433 | </para> | ||
| 434 | |||
| 435 | <para> | ||
| 436 | After you perform your profiling tasks, the next command stops the profiler. | ||
| 437 | After that, you can view results with the <filename>opreport</filename> command with options | ||
| 438 | to see the separate library symbols and callgraph information. | ||
| 439 | </para> | ||
| 440 | |||
| 441 | <para> | ||
| 442 | Callgraphing logs information about time spent in functions and about a function's | ||
| 443 | calling function (parent) and called functions (children). | ||
| 444 | The higher the callgraphing depth, the more accurate the results. | ||
| 445 | However, higher depths also increase the logging overhead. | ||
| 446 | Consequently, you should take care when setting the callgraphing depth. | ||
| 447 | <note> | ||
| 448 | On ARM, binaries need to have the frame pointer enabled for callgraphing to work. | ||
| 449 | To accomplish this use the <filename>-fno-omit-framepointer</filename> option | ||
| 450 | with <filename>gcc</filename>. | ||
| 451 | </note> | ||
| 452 | </para> | ||
| 453 | |||
| 454 | <para> | ||
| 455 | For more information on using OProfile, see the OProfile | ||
| 456 | online documentation at | ||
| 457 | <ulink url="http://oprofile.sourceforge.net/docs/"/>. | ||
| 458 | </para> | ||
| 459 | </section> | ||
| 460 | |||
| 461 | <section id="platdev-oprofile-oprofileui"> | ||
| 462 | <title>Using OProfileUI</title> | ||
| 463 | |||
| 464 | <para> | ||
| 465 | A graphical user interface for OProfile is also available. | ||
| 466 | You can download and build this interface from the Yocto Project at | ||
| 467 | <ulink url="&YOCTO_GIT_URL;/cgit.cgi/oprofileui/"></ulink>. | ||
| 468 | If the "tools-profile" image feature is selected, all necessary binaries | ||
| 469 | are installed onto the target device for OProfileUI interaction. | ||
| 470 | </para> | ||
| 471 | |||
| 472 | <para> | ||
| 473 | Even though the Yocto Project usually includes all needed patches on the target device, you | ||
| 474 | might find you need other OProfile patches for recent OProfileUI features. | ||
| 475 | If so, see the <ulink url='&YOCTO_GIT_URL;/cgit.cgi/oprofileui/tree/README'> | ||
| 476 | OProfileUI README</ulink> for the most recent information. | ||
| 477 | </para> | ||
| 478 | |||
| 479 | <section id="platdev-oprofile-oprofileui-online"> | ||
| 480 | <title>Online Mode</title> | ||
| 481 | |||
| 482 | <para> | ||
| 483 | Using OProfile in online mode assumes a working network connection with the target | ||
| 484 | hardware. | ||
| 485 | With this connection, you just need to run "oprofile-server" on the device. | ||
| 486 | By default, OProfile listens on port 4224. | ||
| 487 | <note> | ||
| 488 | You can change the port using the <filename>--port</filename> command-line | ||
| 489 | option. | ||
| 490 | </note> | ||
| 491 | </para> | ||
| 492 | |||
| 493 | <para> | ||
| 494 | The client program is called <filename>oprofile-viewer</filename> and its UI is relatively | ||
| 495 | straightforward. | ||
| 496 | You access key functionality through the buttons on the toolbar, which | ||
| 497 | are duplicated in the menus. | ||
| 498 | Here are the buttons: | ||
| 499 | <itemizedlist> | ||
| 500 | <listitem><para><emphasis>Connect:</emphasis> Connects to the remote host. | ||
| 501 | You can also supply the IP address or hostname.</para></listitem> | ||
| 502 | <listitem><para><emphasis>Disconnect:</emphasis> Disconnects from the target. | ||
| 503 | </para></listitem> | ||
| 504 | <listitem><para><emphasis>Start:</emphasis> Starts profiling on the device. | ||
| 505 | </para></listitem> | ||
| 506 | <listitem><para><emphasis>Stop:</emphasis> Stops profiling on the device and | ||
| 507 | downloads the data to the local host. | ||
| 508 | Stopping the profiler generates the profile and displays it in the viewer. | ||
| 509 | </para></listitem> | ||
| 510 | <listitem><para><emphasis>Download:</emphasis> Downloads the data from the | ||
| 511 | target and generates the profile, which appears in the viewer.</para></listitem> | ||
| 512 | <listitem><para><emphasis>Reset:</emphasis> Resets the sample data on the device. | ||
| 513 | Resetting the data removes sample information collected from previous | ||
| 514 | sampling runs. | ||
| 515 | Be sure you reset the data if you do not want to include old sample information. | ||
| 516 | </para></listitem> | ||
| 517 | <listitem><para><emphasis>Save:</emphasis> Saves the data downloaded from the | ||
| 518 | target to another directory for later examination.</para></listitem> | ||
| 519 | <listitem><para><emphasis>Open:</emphasis> Loads previously saved data. | ||
| 520 | </para></listitem> | ||
| 521 | </itemizedlist> | ||
| 522 | </para> | ||
| 523 | |||
| 524 | <para> | ||
| 525 | The client downloads the complete 'profile archive' from | ||
| 526 | the target to the host for processing. | ||
| 527 | This archive is a directory that contains the sample data, the object files, | ||
| 528 | and the debug information for the object files. | ||
| 529 | The archive is then converted using the <filename>oparchconv</filename> script, which is | ||
| 530 | included in this distribution. | ||
| 531 | The script uses <filename>opimport</filename> to convert the archive from | ||
| 532 | the target to something that can be processed on the host. | ||
| 533 | </para> | ||
| 534 | |||
| 535 | <para> | ||
| 536 | Downloaded archives reside in the Yocto Project's build directory in | ||
| 537 | <filename>/tmp</filename> and are cleared up when they are no longer in use. | ||
| 538 | </para> | ||
| 539 | |||
| 540 | <para> | ||
| 541 | If you wish to perform kernel profiling, you need to be sure | ||
| 542 | a <filename>vmlinux</filename> file that matches the running kernel is available. | ||
| 543 | In the Yocto Project, that file is usually located in | ||
| 544 | <filename>/boot/vmlinux-KERNELVERSION</filename>, where | ||
| 545 | <filename>KERNEL-version</filename> is the version of the kernel. | ||
| 546 | The Yocto Project generates separate <filename>vmlinux</filename> packages for each kernel | ||
| 547 | it builds. | ||
| 548 | Thus, it should just be a question of making sure a matching package is | ||
| 549 | installed (e.g. <filename>opkg install kernel-vmlinux</filename>. | ||
| 550 | The files are automatically installed into development and profiling images | ||
| 551 | alongside OProfile. | ||
| 552 | A configuration option exists within the OProfileUI settings page that you can use to | ||
| 553 | enter the location of the <filename>vmlinux</filename> file. | ||
| 554 | </para> | ||
| 555 | |||
| 556 | <para> | ||
| 557 | Waiting for debug symbols to transfer from the device can be slow, and it | ||
| 558 | is not always necessary to actually have them on the device for OProfile use. | ||
| 559 | All that is needed is a copy of the filesystem with the debug symbols present | ||
| 560 | on the viewer system. | ||
| 561 | The "<link linkend='platdev-gdb-remotedebug-launch-gdb'>Launching GDB on the Host Computer</link>" | ||
| 562 | section covers how to create such a directory with | ||
| 563 | the Yocto Project and how to use the OProfileUI Settings dialog to specify the location. | ||
| 564 | If you specify the directory, it will be used when the file checksums | ||
| 565 | match those on the system you are profiling. | ||
| 566 | </para> | ||
| 567 | </section> | ||
| 568 | |||
| 569 | <section id="platdev-oprofile-oprofileui-offline"> | ||
| 570 | <title>Offline Mode</title> | ||
| 571 | |||
| 572 | <para> | ||
| 573 | If network access to the target is unavailable, you can generate | ||
| 574 | an archive for processing in <filename>oprofile-viewer</filename> as follows: | ||
| 575 | <literallayout class='monospaced'> | ||
| 576 | # opcontrol --reset | ||
| 577 | # opcontrol --start --separate=lib --no-vmlinux -c 5 | ||
| 578 | . | ||
| 579 | . | ||
| 580 | [do whatever is being profiled] | ||
| 581 | . | ||
| 582 | . | ||
| 583 | # opcontrol --stop | ||
| 584 | # oparchive -o my_archive | ||
| 585 | </literallayout> | ||
| 586 | </para> | ||
| 587 | |||
| 588 | <para> | ||
| 589 | In the above example, <filename>my_archive</filename> is the name of the | ||
| 590 | archive directory where you would like the profile archive to be kept. | ||
| 591 | After the directory is created, you can copy it to another host and load it | ||
| 592 | using <filename>oprofile-viewer</filename> open functionality. | ||
| 593 | If necessary, the archive is converted. | ||
| 594 | </para> | ||
| 595 | </section> | ||
| 596 | </section> | ||
| 597 | </section> | ||
| 598 | |||
| 599 | |||
| 600 | |||
| 601 | </chapter> | 120 | </chapter> |
| 602 | <!-- | 121 | <!-- |
| 603 | vim: expandtab tw=80 ts=4 | 122 | vim: expandtab tw=80 ts=4 |
