<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.6(BH)" -->
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>chinook</title>
        <description></description>
        <link>http://maemo.org/development/tools/doc/chinook/</link>
        <lastBuildDate>Mon, 17 Aug 2020 04:12:33 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <item>
            <title>chinook</title>
            <link>http://maemo.org/development/tools/doc/chinook/</link>
            <description>&lt;p&gt;The SDK tools documentation for maemo 4 Chinook is available from the chinook tools page:&lt;/p&gt;

&lt;p&gt;
 &lt;a href=&quot;/development/tools/chinook.html&quot;&gt;http://maemo.org/development/tools/chinook.html&lt;/a&gt;
&lt;/p&gt;
</description>
            <author>Midgard Administrator</author>
            <pubDate>Tue, 24 Jun 2008 11:14:35 +0000</pubDate>
        </item>
        <item>
            <title>sp-endurance</title>
            <link>http://maemo.org/development/tools/doc/chinook/sp-endurance/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;sp-endurance provides tools to save various system endurance related
information (resource usage, errors) on device.&lt;/p&gt;

&lt;p&gt;Provided tools include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;binaries for saving /proc and X client resource usage as CSV&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a script for saving these along with syslog, SMAPS data, df and
ifconfig output etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a script for getting quick system memory usage change overview from
the endurance data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The endurance data can be used for detecting and measuring resource
leakage and application errors.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sp-endurance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sp-endurance&lt;/p&gt;

&lt;h1&gt;Usage&lt;/h1&gt;

&lt;p&gt;Because resource leakage detection requires repeating the given
use-cases many times, it's best to automate the running of the
test-cases. Both before the first and after each additional test-case
run the following can be done:&lt;/p&gt;

&lt;pre&gt;
# save-incremental-endurance-stats use-case-name
# cat /dev/null &amp;gt; /var/log/syslog
# cat /dev/null &amp;gt; /var/log/syslog.old
&lt;/pre&gt;

&lt;p&gt;This will create a directory called use-case-name (if it doesn't
exist) and add on each invocation a new subdirectory with the current
endurance data. The subdirectories are named 101, 102 and so on.&lt;/p&gt;

&lt;p&gt;Syslogs can be large and they are included into the endurance data so
it's best to clear syslog(s) (as indicated above) after the endurance
data is stored. Otherwise storing the data can take quite a long time
and potentially consume huge amounts of disk space.&lt;/p&gt;

&lt;p&gt;Note: If you run this in the device over ssh instead of from console,
you might not have DISPLAY set correctly and then xmeminfo complains
that it cannot connect to X server. In that case, just enter:&lt;/p&gt;

&lt;pre&gt;
# export DISPLAY=:0
&lt;/pre&gt;

&lt;p&gt;before starting your testing.&lt;/p&gt;

&lt;h2&gt;Emphasizing leakage&lt;/h2&gt;

&lt;p&gt;Sometimes it is not clear from the endurance data whether there's a
memory leak or not. Increasing the number of test-case runs helps, but
getting more measurements doesn't necessarily make it easier to see
the leakage. In this case it is best to emphasize the leakage by
increasing the number of test-case repeats between measurements
exponentially, like this:&lt;/p&gt;

&lt;pre&gt;
#!/bin/sh
measurements=5
repeats=1
for round in $(seq $measurements); do
        echo &amp;quot;round $round:&amp;quot;
        # repeat the test-case round^2 times
        for repeat in $(seq $repeats); do
                echo -n &amp;quot; $repeat&amp;quot;
                # RUN THE TEST-CASE HERE
        done
        repeats=$(($repeats+$repeats))
        save-incremental-endurance-stats use-case-name
        cat /dev/null &amp;gt;/var/log/syslog
        cat /dev/null &amp;gt;/var/log/syslog.old
done
&lt;/pre&gt;

&lt;h2&gt;Post-processing&lt;/h2&gt;

&lt;p&gt;After the tests have been completed, the stored endurance data can
then be transferred to PC for post-processing with
&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/sp-endurance-postproc/&quot; class=&quot;wikipage default&quot; title=&quot;sp-endurance-postproc&quot;&gt;sp-endurance-postproc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that the post-processing tools create the error and resource
leakage summary from the differences between 2nd and last
measurement. They assume that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;the first measurement is &amp;quot;initial state&amp;quot; i.e. the system and
application are still in a state where things needed by the test-case
are not yet initialized&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;processes involved in the test-case haven't been terminated before
the last measurement. If the process doesn't exist anymore in the last
measurement, there's nothing to differentiate&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the device a rough system memory overview of the endurance data can
be obtained with:&lt;/p&gt;

&lt;pre&gt;
# endurance-mem-overview use-case-name/*
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;Man pages:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/endurance-mem-overview.html&quot;&gt;endurance-mem-overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/proc2csv.html&quot;&gt;proc2csv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/save-incremental-endurance-stats.html&quot;&gt;save-incremental-endurance-stats&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xmeminfo.html&quot;&gt;xmeminfo&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/sp-endurance-postproc/&quot; class=&quot;wikipage default&quot; title=&quot;sp-endurance-postproc&quot;&gt;sp-endurance-postproc&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/syslog/&quot; class=&quot;wikipage default&quot; title=&quot;syslog&quot;&gt;syslog&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 10:07:01 +0000</pubDate>
        </item>
        <item>
            <title>oprofile</title>
            <link>http://maemo.org/development/tools/doc/chinook/oprofile/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Oprofile is a low overhead system-wide profiler for linux. It can be
used to find CPU usage bottlenecks in the whole system and within
processes.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: oprofile&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: oprofile, oprofile-common, oprofile-common-dbg&lt;/p&gt;

&lt;h1&gt;Installing Oprofile&lt;/h1&gt;

&lt;h2&gt;Configuring the device&lt;/h2&gt;

&lt;p&gt;In order to run oprofile on your device, the device's kernel needs to
be oprofile-enabled. A pre-compiled kernel with oprofile support is
provided in the rx-34-kernel-oprofile package.&lt;/p&gt;

&lt;h2&gt;Getting a new kernel&lt;/h2&gt;

&lt;p&gt;The kernel package can be downloaded from the Chinook SDK repository
in scratchbox environment (in an ARM target) with the command&lt;/p&gt;

&lt;pre&gt;
(sbox-arm: ~) &amp;gt; fakeroot apt-get install rx-34-kernel-oprofile
&lt;/pre&gt;

&lt;p&gt;This will install the kernel image to /usr/share/osso/kernels/&lt;/p&gt;

&lt;pre&gt;
(sbox-arm: ~) &amp;gt; ls -l /usr/share/osso/kernels/
-rw-r--r--  1 user users 1536760 Oct 24 11:13 zImage-oprofile-rx-34-200743
&lt;/pre&gt;

&lt;p&gt;the numbers at the end of the filename resemble a date and will be
different if the kernel has been updated since the writing of this
document.&lt;/p&gt;

&lt;p&gt;By copying the image to outside of the scratchbox chroot environment,
you'll be able to easily access it when you're ready to flash the
image.&lt;/p&gt;

&lt;pre&gt;
(sbox-arm: ~) &amp;gt; cp /usr/share/osso/kernels/zImage-oprofile-rx-34-200743 /tmp
&lt;/pre&gt;

&lt;h2&gt;Using the new kernel&lt;/h2&gt;

&lt;p&gt;There are &lt;strong&gt;two&lt;/strong&gt; ways to use the kernel image. You can flash it to the
device or you can just boot the device so that it uses this kernel
until you reboot it again.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Option 1: Flashing the kernel&lt;/p&gt;

&lt;p&gt;To flash your new kernel image, use the linux flasher utility (as root)&lt;/p&gt;

&lt;pre&gt;
$ flasher -f --kernel /tmp/zImage-oprofile-rx-34-200743 -R
&lt;/pre&gt;

&lt;p&gt;Flashing just the kernel does not destroy your other data. After
the flasher has finished, your device is ready for oprofile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Option 2: Boot with the new kernel&lt;/p&gt;

&lt;pre&gt;
$ flasher --load --boot --kernel /tmp/zImage-oprofile-rx-34-200743
&lt;/pre&gt;

&lt;p&gt;With the boot option the power cord has to be kept plugged in until
you want to revert back to the previous kernel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Restoring the normal kernel&lt;/h2&gt;

&lt;p&gt;After you are done with oprofile you can restore the normal
kernel. How you do this depends on which one of the options above you
used to load the oprofile kernel.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Option 1: You chose to flash the oprofile kernel&lt;/p&gt;

&lt;p&gt;In this case the normal kernel needs to be re-flashed:&lt;/p&gt;

&lt;pre&gt;
$ flasher -f --flash-only kernel -F &amp;lt;FIASCO image&amp;gt; -R


# The FIASCO image is the whole product image with a name like:
# RX-44_2008SE_1.2007.42-18_PR_COMBINED_MR0_ARM.bin
&lt;/pre&gt;

&lt;p&gt;Note that just re-flashing the kernel part does not overwrite any of
the other parts, so your data and settings will be intact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Option 2: You chose to just boot with the new kernel&lt;/p&gt;

&lt;p&gt;Restoring the old kernel is as easy as unplugging the power cable
and power cycling the device.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Recognizing a suitable kernel&lt;/h2&gt;

&lt;p&gt;It's easy to see if your current kernel does not support oprofile by
testing it with opcontrol:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opcontrol --status
modprobe: cannot parse modules.dep
modprobe: cannot parse modules.dep
Kernel doesn't support oprofile
&lt;/pre&gt;

&lt;h2&gt;Installing oprofile to the device&lt;/h2&gt;

&lt;p&gt;Providing that you have the Chinook SDK repository in your APT
sources.list, the easiest way to install oprofile is using apt.&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# apt-get install oprofile
&lt;/pre&gt;

&lt;p&gt;This will also install binutils, libpopt and oprofile-common.&lt;/p&gt;

&lt;h2&gt;Installing debug symbols&lt;/h2&gt;

&lt;p&gt;In order to view any useful profiling information at functions level,
you will have to install debugging symbols. Debugging symbols normally
come with debugging (-dbg) packages. The easiest way to install all
dbg packages required for a given binary is to use debug-dep-install
script which comes with the maemo-debug-scripts package:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# apt-get install maemo-debug-scripts
Nokia-N810:~# debug-dep-install /usr/bin/osso-xterm.launch
&lt;/pre&gt;

&lt;h1&gt;Usage&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;On the device, type:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opcontrol --init
Nokia-N810:~# opcontrol --no-vmlinux
Nokia-N810:~# opcontrol -e=CPU_CYCLES:100000
&lt;/pre&gt;

&lt;p&gt;100000 indicates the number of CPU cycles between interrupts. Increasing this number lowers down the accuracy but decreases the CPU overhead. --no-vmlinux indicates we are not interested in the kernel or do not have an unstripped kernel image.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start the usecase you are interested in and type:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opcontrol --start
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you've finished, type:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opcontrol --stop
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you've collected the data.&lt;/p&gt;

&lt;h2&gt;Viewing profile reports&lt;/h2&gt;

&lt;p&gt;To see basic per-process picture, type opreport:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opreport
CPU: ARM11 PMU, speed 0 MHz (estimated)
Counted CPU_CYCLES events (clock cycles counter) with a unit mask of 0x00 (No unit mask) count 100000
CPU_CYCLES:100000|
  samples|      %|
------------------
     1677 69.1546 no-vmlinux
      240  9.8969 libc-2.5.so
      230  9.4845 busybox
      215  8.8660 ld-2.5.so
       58  2.3918 oprofiled
    3  0.1237 ophelp
    2  0.0825 libcrypt-2.5.so
&lt;/pre&gt;

&lt;p&gt;To see more detailed symbol analysis use opreport -l:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opreport -l|more
warning: /no-vmlinux could not be found.
BFD: /usr/lib/debug/lib/ld-2.5.so: warning: sh_link not set for section `.ARM.exidx'
BFD: /usr/lib/debug/lib/libc-2.5.so: warning: sh_link not set for section `.ARM.exidx'
CPU: ARM11 PMU, speed 0 MHz (estimated)
Counted CPU_CYCLES events (clock cycles counter) with a unit mask of 0x00 (No unit mask) count 100000
samples  %        app name                 symbol name
1695     65.3179  no-vmlinux               (no symbols)
255       9.8266  busybox                  (no symbols)
222       8.5549  oprofiled                (no symbols)
43        1.6570  libc-2.5.so              strchr
37        1.4258  ld-2.5.so                check_match.0
32        1.2331  ld-2.5.so                do_lookup_x
17        0.6551  ld-2.5.so                _dl_relocate_object
17        0.6551  libc-2.5.so              _dl_addr
16        0.6166  ld-2.5.so                strcmp
14        0.5395  ld-2.5.so                _dl_lookup_symbol_x
13        0.5010  ld-2.5.so                __udivsi3
13        0.5010  ld-2.5.so                _dl_fixup
12        0.4624  libc-2.5.so              _int_malloc
10        0.3854  libc-2.5.so              strcmp
8         0.3083  ophelp                   (no symbols)
7         0.2697  libc-2.5.so              strpbrk
7         0.2697  libc-2.5.so              vfprintf
&lt;/pre&gt;

&lt;h2&gt;Profiling with callgraphs&lt;/h2&gt;

&lt;p&gt;Quite often a basic flat profile is useless. In such a cases a
callgraph profile can be used. In order to profile code with
callgraphs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Add -fno-omit-frame-pointer to GCC options and recompile all the
code (binaries, libraries) involved. You can do this without
changing the package build rules by setting the appropriate scratchbox
environment variable (documented in the Scratchbox installation
/scratchbox/doc/variables.txt file) before re-building the
packages:&lt;/p&gt;

&lt;pre&gt;
(sbox-arm: ~) &amp;gt; export SBOX_BLOCK_COMPILER_ARGS=&amp;quot;-fomit-frame-pointer&amp;quot;
(sbox-arm: ~) &amp;gt; export SBOX_EXTRA_COMPILER_ARGS=&amp;quot;-fno-omit-frame-pointer&amp;quot;
(sbox-arm: ~) &amp;gt; cd package-1/
(sbox-arm: ~/package-1) &amp;gt; dpkg-buildpackage -rfakeroot
(sbox-arm: ~/package-1) &amp;gt; cd ../package-2/
(sbox-arm: ~/package-2) &amp;gt; dpkg-buildpackage -rfakeroot
...
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install re-built code and debug packages on the device&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Init oprofile as usually, but add -c parameter:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opcontrol --init
Nokia-N810:~# opcontrol --no-vmlinux
Nokia-N810:~# opcontrol -e=CPU_CYCLES:100000 -c
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add -c to opreport:&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# opreport -l -c
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Viewing reports from a PC&lt;/h2&gt;

&lt;p&gt;opreport -l, and especially opreport -c -l can take quite a long time
(10 minutes) when fired up on N800/N810 devices. Therefore, it often
makes sense to run opreport in scratchbox.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Configure scratchbox target in a way that its binaries and libraries 100% match the target's.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collect profiling data as usual&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy contents of /var/lib/oprofile from the device to the corresponding directory in scratchbox target.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;in scratchbox, apt-get install maemo-debug-scripts (this may not be omitted)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;install debug packages either with debug-dep-install or by hand&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: the binaries and libraries in the scratchbox target must match
what's in the device, otherwise you will get bogus results.&lt;/p&gt;

&lt;h2&gt;Oprofile with kcachegrind&lt;/h2&gt;

&lt;p&gt;kcachegrind is a useful GUI tool for viewing performance data
interactively. It comes with many modern linux distros.&lt;/p&gt;

&lt;p&gt;To use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Get the callgraph oprofile data (see above) and install the same packages also to scratchbox.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the profile data to scratchbox session as described above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;install kcachegrind-converters package on HOST (debian, ubuntu)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;in scratchbox: opreport -gdf | op2calltree (you might want to copy op2calltree script somewhere on target)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the resulting files can now be opened with kcachegrind on host, provided you set it to display ALL files (extensions are wrong)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/oprofile.html&quot;&gt;oprofile man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/oprofileui/&quot; class=&quot;wikipage default&quot; title=&quot;oprofileui&quot;&gt;oprofileui&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 10:02:04 +0000</pubDate>
        </item>
        <item>
            <title>traceroute</title>
            <link>http://maemo.org/development/tools/doc/chinook/traceroute/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Traceroute prints the route packets take to a network host. It
displays each network hop and the time taken to reach it.&lt;/p&gt;

&lt;p&gt;Traceroute is similar to tracepath, but offers more options and
with some options requires superuser priviledges to run.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: traceroute&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: traceroute&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Find out the route the packets take from your machine to &lt;em&gt;www.maemo.org&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;
# traceroute www.maemo.org
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/traceroute.html&quot;&gt;traceroute man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/iputils/&quot; class=&quot;wikipage default&quot; title=&quot;iputils&quot;&gt;iputils&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 10:01:22 +0000</pubDate>
        </item>
        <item>
            <title>netcat</title>
            <link>http://maemo.org/development/tools/doc/chinook/netcat/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Netcat is a simple unix utility which reads and writes data across
network connections, using TCP or UDP protocol.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: netcat&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: netcat&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;The utility is actually named &lt;em&gt;nc&lt;/em&gt;. Here's an example of how to open
up a TCP listening socket on port 5060. If someone connects to and
sends data to that port, it will be printed on the screen.&lt;/p&gt;

&lt;pre&gt;
# nc -l -p 5060
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/nc.html&quot;&gt;netcat man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/iputils/&quot; class=&quot;wikipage default&quot; title=&quot;iputils&quot;&gt;iputils&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/tcpdump/&quot; class=&quot;wikipage default&quot; title=&quot;tcpdump&quot;&gt;tcpdump&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 10:00:34 +0000</pubDate>
        </item>
        <item>
            <title>iputils</title>
            <link>http://maemo.org/development/tools/doc/chinook/iputils/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;iputils is a small collection of TCP/IP related utilities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;ping&lt;/em&gt;: is already provided on the device by BusyBox and it's a tool
to monitor and test network functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;arping&lt;/em&gt;: sends ARP requests to a host.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;tracepath&lt;/em&gt;: trace a path to a host discovering MTU along the
way. This is similar to &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/traceroute/&quot; class=&quot;wikipage default&quot; title=&quot;traceroute&quot;&gt;traceroute&lt;/a&gt;, but does not require superuser
rights or offer fancy options.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: iputils&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: iputils-ping, iputils-arping, iputils-tracepath&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;To test if a host is in the network and responding to ping:&lt;/p&gt;

&lt;pre&gt;
# ping host.name.net
&lt;/pre&gt;

&lt;p&gt;Send four ARP requests to host:&lt;/p&gt;

&lt;pre&gt;
# arping -c 4 host.name.net
&lt;/pre&gt;

&lt;p&gt;Discover the path to &lt;em&gt;www.maemo.org&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;
# tracepath www.maemo.org
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/arping.html&quot;&gt;arping man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/tracepath.html&quot;&gt;tracepath man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/netcat/&quot; class=&quot;wikipage default&quot; title=&quot;netcat&quot;&gt;netcat&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/tcpdump/&quot; class=&quot;wikipage default&quot; title=&quot;tcpdump&quot;&gt;tcpdump&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/traceroute/&quot; class=&quot;wikipage default&quot; title=&quot;traceroute&quot;&gt;traceroute&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 10:00:07 +0000</pubDate>
        </item>
        <item>
            <title>xresponse</title>
            <link>http://maemo.org/development/tools/doc/chinook/xresponse/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Xresponse synthetizes X stylus events and outputs screen update sizes
and their timestamps.&lt;/p&gt;

&lt;p&gt;Xresponse can catch applications doing screen updates which are not
done as a response to user input/request and updates of unnecessary
parts of application UIs. These are detrimental to application
performance and device use-time.&lt;/p&gt;

&lt;p&gt;Xresponse can also be used to time the applications screen updates
i.e. their response time.&lt;/p&gt;

&lt;p&gt;The screen update areas are output in the &amp;quot;X geometry&amp;quot; format (WIDTH x HEIGHT + X + Y).&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: xresponse&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: xresponse&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;h2&gt;Monitoring screen updates&lt;/h2&gt;

&lt;p&gt;Xresponse can be used to monitor how large parts of the screen and how
often an application is updating them. To run it in the screen update
monitoring mode, use:&lt;/p&gt;

&lt;pre&gt;
# xresponse -w 0 -i 
&lt;/pre&gt;

&lt;p&gt;Then just use the applications.&lt;/p&gt;

&lt;h2&gt;Timing application response / screen updates&lt;/h2&gt;

&lt;p&gt;Xresponse can synthetize stylus taps, just specify where they should
happen with the -c option and how long Xresponse should wait for the
screen updates before proceeding with the -w option:&lt;/p&gt;

&lt;pre&gt;
# xresponse -w 5 -c 200x20 
&lt;/pre&gt;

&lt;p&gt;If you want to monitor only part of the screen, e.g. toolbar, you can
give which area of the screen is monitored with the -m option:&lt;/p&gt;

&lt;pre&gt;
# xresponse -m 800x80+0+400 -w 20 -c 650x430 
&lt;/pre&gt;

&lt;p&gt;(This is useful for example if an application like Browser can be
updating the normal application area also without user interaction.)&lt;/p&gt;

&lt;p&gt;To time application startup, open the Task Navigator application menu,
synthetize a tap to the menu item starting the application and monitor
the screen updates. With most applications the last screen update is
the time when the application is fully initialized and ready for use.&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xresponse.html&quot;&gt;xresponse man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/xnee/&quot; class=&quot;wikipage default&quot; title=&quot;xnee&quot;&gt;xnee&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:59:22 +0000</pubDate>
        </item>
        <item>
            <title>nano</title>
            <link>http://maemo.org/development/tools/doc/chinook/nano/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;nano&lt;/em&gt; is a small and friendly editor that also supports stylus clicks
to place the cursor and to execute shortcuts.&lt;/p&gt;

&lt;p&gt;nano-tiny is a special minimal build of nano aimed for boot-floppies
or emergency disks.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: nano&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: nano, nano-tiny&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Open up a file for viewing and editing. You can move around the file
with the cursor keys.&lt;/p&gt;

&lt;pre&gt;
# nano myfile.txt
&lt;/pre&gt;

&lt;p&gt;Exit from nano: Press &lt;em&gt;control-x&lt;/em&gt; or click &lt;em&gt;Exit&lt;/em&gt; with the stylus.&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/nano.html&quot;&gt;nano man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/nano-tiny.html&quot;&gt;nano-tiny man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/vi/&quot; class=&quot;wikipage default&quot; title=&quot;vi&quot;&gt;vi&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:58:21 +0000</pubDate>
        </item>
        <item>
            <title>x-debug-tools</title>
            <link>http://maemo.org/development/tools/doc/chinook/x-debug-tools/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;A set of basic X window system debugging tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;xev: monitor X events to a window&lt;/li&gt;
&lt;li&gt;xlsatoms: list interned atoms defined on server&lt;/li&gt;
&lt;li&gt;xlsclients: list client applications running on a display&lt;/li&gt;
&lt;li&gt;xprop: list properties of the given window&lt;/li&gt;
&lt;li&gt;xwininfo: show information abut a given window&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: x-debug-tools&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: x-debug-tools&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;List all windows on screen:&lt;/p&gt;

&lt;pre&gt;
# xwininfo -tree -root
&lt;/pre&gt;

&lt;p&gt;What application owns the window/dialog/popup covering the screen:&lt;/p&gt;

&lt;pre&gt;
# xprop | grep WM_NAME (and click the window)
&lt;/pre&gt;

&lt;p&gt;Is my window receiving the events it should:&lt;/p&gt;

&lt;pre&gt;
# xwininfo | grep id: (click the window)
# xev -id 0xWINDOW_ID
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xev.html&quot;&gt;xev man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xprop.html&quot;&gt;xprop man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xlsatoms.html&quot;&gt;xlsatoms man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xlsclients.html&quot;&gt;xlsclients man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xwininfo.html&quot;&gt;xwininfo man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/xrestop/&quot; class=&quot;wikipage default&quot; title=&quot;xrestop&quot;&gt;xrestop&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:57:20 +0000</pubDate>
        </item>
        <item>
            <title>sp-startup-time</title>
            <link>http://maemo.org/development/tools/doc/chinook/sp-startup-time/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;sp-startup-time&lt;/em&gt; provides a library that can be preloaded with
&lt;code&gt;LD_PRELOAD&lt;/code&gt; to measure the startup time of Gtk applications.&lt;/p&gt;

&lt;p&gt;You can use it to identify bottlenecks in your application's startup
and possibly to improve the user experience by providing you
information to optimize the startup time.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sp-startup-time&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sp-startup-time&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;h2&gt;How it works&lt;/h2&gt;

&lt;p&gt;There are a few functions that are typically called during a Gtk
application's startup and &lt;em&gt;libstartup&lt;/em&gt; intercepts these function calls
and collects the time each of them was called. The startup is
considered finished once the installed Gtk idle callback is called.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LD_PRELOAD&lt;/code&gt; has some shortcomings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It can be used only if the applications can be run directly,
i.e. it does not work with maemo-launched Gtk applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prelink information cannot be used with &lt;code&gt;LD_PRELOAD&lt;/code&gt;.
This means that prelinked applications spend time in resolving
library symbols when this is used.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;frame note&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
Note!
&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
In scratchbox &lt;code&gt;LD_PRELOAD&lt;/code&gt; does not work directly because scratchbox uses
that by itself, use the &lt;em&gt;run-with-startup-time&lt;/em&gt; script instead.
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If instructed, &lt;em&gt;libstartup&lt;/em&gt; will also write a full log of the
intercepted calls. This is done at the time the application is
unloaded.&lt;/p&gt;

&lt;h2&gt;Preloading&lt;/h2&gt;

&lt;p&gt;You can use two methods for preloading the &lt;em&gt;libstartup&lt;/em&gt; binary
during application execution; environment or global &lt;code&gt;ld.so&lt;/code&gt;
configuration.&lt;/p&gt;

&lt;p&gt;Setting the &lt;code&gt;LD_PRELOAD&lt;/code&gt; environment variable like below is
preferred as that way it doesn't affect any other programs:&lt;/p&gt;

&lt;pre&gt;
# LD_PRELOAD=/usr/lib/sp-startup-time/libstartup.so app-to-run
&lt;/pre&gt;

&lt;p&gt;However if the &amp;quot;app-to-run&amp;quot; happens to be a launcher
script, not a real binary you might need to edit the script
itself to contain the preload setting like this:&lt;/p&gt;

&lt;pre&gt;
#!/bin/sh
export LD_PRELOAD=/usr/lib/sp-startup-time/libstartup.so
app-to-run
&lt;/pre&gt;

&lt;p&gt;Apart from the environment you can use the global &lt;code&gt;ld.so&lt;/code&gt;
configuration to force preloading libstartup for all
applications by editing the &lt;code&gt;/etc/ld.so.preload&lt;/code&gt; file. This
is not however encouraged as any mistake might make the
system unbootable.&lt;/p&gt;

&lt;h2&gt;Configuration&lt;/h2&gt;

&lt;p&gt;Normally &lt;em&gt;libstartup&lt;/em&gt; writes the time application used to reach
Gtk idle into syslog, but you can get more detailed information
and direct it also to elsewhere with something like this:&lt;/p&gt;

&lt;pre&gt;
export STARTUP_IDLE_QUIT=yes
export STARTUP_WRITE_LOG=yes
export STARTUP_LOG_FILE=/home/user/startup-log.csv
&lt;/pre&gt;

&lt;p&gt;See also &amp;quot;How to interpret the results&amp;quot; below.&lt;/p&gt;

&lt;p&gt;The environment variables and how they control the runtime
behavior of libstartup are:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
STARTUP_LOG_DIR
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Explicitly set the directory where &lt;em&gt;libstartup&lt;/em&gt; will write the logs.&lt;/p&gt;

&lt;p&gt;If not set the logs will be written to the current working directory
of the process at the time when libstartup init is called - that is
just before the main function is entered.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
STARTUP_LOG_FILE
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Explicitly set path used for writing logs.&lt;/p&gt;

&lt;p&gt;If not set
&lt;code&gt;&amp;lt;$STARTUP_LOG_DIR&amp;gt;/&amp;lt;appname&amp;gt;--&amp;lt;pid&amp;gt;.startup&lt;/code&gt;
will be used.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
STARTUP_WRITE_LOG
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If set to '&lt;code&gt;yes&lt;/code&gt;', and the process reaches Gtk idle state,
the full startup log will be written.&lt;/p&gt;

&lt;p&gt;If set to '&lt;code&gt;force&lt;/code&gt;' the startup log will be written always,
not just for Gtk apps.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
STARTUP_IDLE_QUIT
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If set (to anything) &lt;code&gt;gtk_main_quit()&lt;/code&gt; will be called when
idle state is reached. This is useful for batch testing several runs /
applications.&lt;/p&gt;

&lt;p&gt;The values can also be set by writing them to
&lt;code&gt;/tmp/startup.env&lt;/code&gt;. This allows changing configuration for
applications for which the environment values would be hard to
modify. You could for example use &lt;code&gt;/etc/ld.so.preload&lt;/code&gt; to
globally enable libstartup use for all applications and then set the
configuration options via &lt;code&gt;/tmp/startup.env&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Custom timestamps&lt;/h2&gt;

&lt;p&gt;Sometimes you might want to add application specific
measurement points to the libstartup log. This can be
accomplished by inserting code similar to the example
below to the application source file(s):&lt;/p&gt;

&lt;pre&gt;
+------- hello.c -------------------------------------------
#include &amp;lt;stdio.h&amp;gt;

void __cyg_profile_func_enter(const void *, const void *);

#define libstartup_custom_timestamp(text) \
  __cyg_profile_func_enter((void *)(-1),text)

int main(void)
{
  sleep(1);

  libstartup_custom_timestamp(&amp;quot;main1&amp;quot;);
  printf(&amp;quot;hello, &amp;quot;); fflush(stdout);
  sleep(1);

  libstartup_custom_timestamp(&amp;quot;main2&amp;quot;);
  printf(&amp;quot;world\n&amp;quot;); fflush(stdout);
  sleep(1);

  libstartup_custom_timestamp(&amp;quot;main3&amp;quot;);

  sleep(1);
  return 0;
}
+------- hello.c -------------------------------------------
&lt;/pre&gt;

&lt;p&gt;It compiles as usual:&lt;/p&gt;

&lt;pre&gt;
# gcc -o hello hello.c
&lt;/pre&gt;

&lt;p&gt;It executes as normal without &lt;em&gt;libstartup&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;
# ./hello 
hello, world
&lt;/pre&gt;

&lt;p&gt;And you get the custom timestamps with:&lt;/p&gt;

&lt;pre&gt;
# on device:
$ STARTUP_WRITE_LOG=f LD_PRELOAD=/usr/lib/sp-startup-time/libstartup.so ./hello

# in scratchbox:
$ STARTUP_WRITE_LOG=f run-with-startup ./hello

hello, world

# a file will be created:
+------- hello--5092.startup -------------------------------
generator=sp-startup-time 0.0.7
create_tod=1195657960.406658

t_tod,t_real,t_user,t_sys,f_real,f_user,f_sys,name
1195657960.406658,0.000,0.000,0.000,0.000,0.000,0.000,create
1195657960.406660,0.000,0.000,0.000,0.000,0.000,0.000,lib_init
1195657961.412616,1.000,0.000,0.000,0.000,0.000,0.000,main1
1195657962.422009,2.010,0.000,0.000,0.000,0.000,0.000,main2
1195657963.427050,3.020,0.000,0.000,0.000,0.000,0.000,main3
1195657964.432335,4.020,0.000,0.000,0.000,0.000,0.000,lib_exit
1195657964.432337,4.020,0.000,0.000,0.000,0.000,0.000,lib_fini
+------- hello--5092.startup -------------------------------
&lt;/pre&gt;

&lt;p&gt;The rationale behind hijacking &lt;code&gt;__cyg_profile_func_enter()&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;we can't override functions defined in the main application
binary using &lt;code&gt;LD_PRELOAD&lt;/code&gt; -&amp;gt; it must be in some library&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;we could provide dummy library with some kind of hook, but
that would require modifying the application linking, not
just the source code&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;=&amp;gt; we use a dummy function provided by gnu libc&lt;/p&gt;

&lt;p&gt;Note: The amount of measurement points is currently limited to 32. For
Gtk applications this should leave 20 or so custom entries.&lt;/p&gt;

&lt;p&gt;Note: If the same custom tag is used several times, only the last
occurence is placed to the log file.&lt;/p&gt;

&lt;h2&gt;How to interpret the results&lt;/h2&gt;

&lt;h3&gt;syslog&lt;/h3&gt;

&lt;pre&gt;
Jan 27 14:33:51 localhost libstartup[12706]: firefox-bin=1.19 seconds
Jan 27 14:34:32 localhost libstartup[12727]: firefox-bin=1.13 seconds
&lt;/pre&gt;

&lt;p&gt;The elapsed wall-clock time from process creation to Gtk idle time is
written as seconds.&lt;/p&gt;

&lt;h3&gt;startup log&lt;/h3&gt;

&lt;p&gt;Entry time stamp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;t_tod&lt;/code&gt; time since epoch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t_real&lt;/code&gt; elapsed time since process create&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t_user&lt;/code&gt; CPU time spent in user land before call&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t_sys&lt;/code&gt;  CPU time spent in kernel space before call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Time within:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;f_real&lt;/code&gt; elapsed time within entry&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t_user&lt;/code&gt; CPU time spent in user land during the call&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t_sys&lt;/code&gt;  CPU time spent in kernel space during the call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entry identification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;   name of called function, or function1.leave-&amp;gt;function2.entry transition&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;
+------- firefox-bin--12727.startup ------------------------
generator=sp-startup-time 0.0.7
create_tod=1195658611.448291

t_tod,t_real,t_user,t_sys,f_real,f_user,f_sys,name
1195658611.448291,0.000,0.000,0.000,0.280,0.000,0.010,create
1195658611.728293,0.280,0.000,0.010,0.000,0.000,0.000,lib_init
1195658611.729729,0.280,0.000,0.010,0.000,0.000,0.000,gtk_init
1195658611.735175,0.280,0.000,0.010,3.010,0.110,0.040,gtk_init-&amp;gt;gtk_main
1195658614.744454,3.290,0.110,0.050,0.000,0.000,0.000,gtk_main
1195658614.744454,3.290,0.110,0.050,2.290,0.290,0.030,gtk_main-&amp;gt;gui_idle
1195658617.032341,5.580,0.400,0.080,0.000,0.000,0.000,gui_idle
1195658617.032341,5.580,0.400,0.080,18.740,0.120,0.020,gui_idle-&amp;gt;gtk_main_quit
1195658635.775691,24.320,0.520,0.100,0.010,0.000,0.000,gtk_main_quit
1195658635.775702,24.330,0.520,0.100,0.080,0.050,0.000,gtk_main_quit-&amp;gt;lib_exit
1195658635.855718,24.410,0.570,0.100,0.000,0.000,0.000,lib_exit
1195658635.855720,24.410,0.570,0.100,0.000,0.000,0.000,lib_fini
+------- firefox-bin--12727.startup ------------------------
&lt;/pre&gt;

&lt;p&gt;The following calls are intercepted and logged. The entries
with preceding '+' will have time stamps for both entry to
and leave from function. The ones marked with '-' will have
only entry time stamps.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
+ create&lt;br /&gt;
+ lib_init  (installs lib_exit as atexit handler)&lt;br /&gt;
+ gtk_init  (installs gui_idle as gtk idle handler)&lt;br /&gt;
- gtk_main&lt;br /&gt;
- gui_idle&lt;br /&gt;
+ gtk_main_quit&lt;br /&gt;
- lib_exit&lt;br /&gt;
- lib_fini&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The timestamps are obtained with &lt;code&gt;times()&lt;/code&gt; syscall which allows
us to trace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;real time&lt;/code&gt; (elapsed wall clock time)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user time&lt;/code&gt; (time spent executing code)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sys time&lt;/code&gt;  (time spent in kernel servicing the process)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If there time difference between leaving the previous traced function
and entering the next, a transition entry will be written. The
interpretation of these transition entries depends on the situation,
but generally:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lib_init -&amp;gt; gtk_init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Usually libstartup initialization is executed just before control is
yielded to &lt;code&gt;main()&lt;/code&gt; entry of the application.  So this
transition can be considered as &amp;quot;non-gui-init&amp;quot;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gtk_init -&amp;gt; gtk_main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Setting up application main GUI.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gtk_main -&amp;gt; gui_idle&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Realizing application main GUI.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gui_idle -&amp;gt; gtk_main_quit&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Normal application operation.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gtk_main_quit -&amp;gt; lib_exit&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Application shutdown&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lib_exit -&amp;gt; lib_fini&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As the &lt;code&gt;lib_exit&lt;/code&gt; is most likely the last
&lt;code&gt;atexit&lt;/code&gt; handler called and &lt;code&gt;lib_fini&lt;/code&gt; the first
library unload code executed, this is very unlikely to have nonzero
time.&lt;/p&gt;

&lt;p&gt;The &amp;quot;create&amp;quot; entry needs a bit of explanation too. The idea is that
this contains time taken by the dynamic linker to bind the various
binaries to the process. As the init code from &lt;em&gt;libstartup&lt;/em&gt; is if not
the last at least one of the last things done before entering
application &lt;code&gt;main()&lt;/code&gt; function, we can guess that the CPU
time spent before this is from the dynamic loader. Perhaps
surprisingly determining the real time is quite difficult. The reason
is that the syscalls that can be used to query time values return
corrected real time and the process create time (as available via
&lt;code&gt;/proc/pid/status&lt;/code&gt;) contains uncorrected jiffies value. To
overcome this the &lt;em&gt;libstartup&lt;/em&gt; forks a child process and uses the
create time difference between parent and child as elapsed real time
estimate. The child process is terminated right after the time
difference evaluation.&lt;/p&gt;

&lt;p&gt;The idle detection is also not without problems. It is common that
there is a brief idle period right after entering
&lt;code&gt;gtk_main&lt;/code&gt;. For this reason the idle status is is noted
only when the idle handler is called enough times without using CPU
for other purposes (in the context of the application process).&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/run-with-startup-time.html&quot;&gt;run-with-startup-time man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/syslog/&quot; class=&quot;wikipage default&quot; title=&quot;syslog&quot;&gt;syslog&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:56:09 +0000</pubDate>
        </item>
        <item>
            <title>sp-rich-core</title>
            <link>http://maemo.org/development/tools/doc/chinook/sp-rich-core/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;sp-rich-core&lt;/em&gt; is a package that installs an init script that pipes
core dumps through a script. This script collects lots of information
from the system and then saves that and the core dump data compressed
into a file (by default onto an MMC card). The collected information
includes process SMAPS data, most of /proc data, last lines from
syslog, df and ifconfig output etc.&lt;/p&gt;

&lt;p&gt;Compressing the core dumps (with lzo) actually speeds up saving them.&lt;/p&gt;

&lt;p&gt;Use &lt;em&gt;rich-core-extract&lt;/em&gt; (from &lt;strong&gt;sp-rich-core-postproc&lt;/strong&gt; package) to extract
the information from a rich core dump.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sp-rich-core&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sp-rich-core, sp-rich-core-postproc&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;In order to get core dumps, one of these directories needs to exist:
&lt;em&gt;/media/mmc1/core-dumps&lt;/em&gt; or &lt;em&gt;/media/mmc2/core-dumps&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Create a small program that's sure to crash:&lt;/p&gt;

&lt;pre&gt;
- - - snip crasher.c - - -
int main()
{
   char *p = 0;
   memcpy(p, 0x00, sizeof(p));

}
- - - snap crasher.c - - -

# gcc -g -o crasher crasher.c
&lt;/pre&gt;

&lt;p&gt;After copying the &lt;em&gt;crasher&lt;/em&gt; program to your device and having installed
the sp-rich-core package, you can now run the program.&lt;/p&gt;

&lt;pre&gt;
Nokia-N810:~# ./crasher
Segmentation fault (core dumped)

Nokia-N810:~# cd /media/mmc1/core-dumps
Nokia-N810:~# rich-core-extract crasher-11-1452.rcore

# by default this will create a directory of the same name without the
# suffix

Nokia-N810:~# ls -l crasher-11-1452/
-rw-r--r-- 1 user root      9 2007-11-19 08:40 cmdline
-rw-r--r-- 1 user root     54 2007-11-19 08:40 component_version
-rw-r--r-- 1 user root 135168 2007-11-19 08:40 coredump
-rw-r--r-- 1 user root     32 2007-11-19 08:40 date
-rw-r--r-- 1 user root    589 2007-11-19 08:40 df
-rw-r--r-- 1 user root    217 2007-11-19 08:40 fd
-rw-r--r-- 1 user root    766 2007-11-19 08:40 ifconfig
-rw-r--r-- 1 user root   1284 2007-11-19 08:40 ls_proc
-rw-r--r-- 1 user root    410 2007-11-19 08:40 osso-product-info
-rw-r--r-- 1 user root     40 2007-11-19 08:40 osso_software_version
-rw-r--r-- 1 user root  28911 2007-11-19 08:40 proc2csv
-rw-r--r-- 1 user root  11983 2007-11-19 08:40 slabinfo
-rw-r--r-- 1 user root   2653 2007-11-19 08:40 smaps
&lt;/pre&gt;

&lt;p&gt;The directory will contain lots of potentially useful information in
addition to the core dump file.&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/rich-core-dumper.html&quot;&gt;rich-core-dumper man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/rich-core-extract.html&quot;&gt;rich-core-extract man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/sp-endurance/&quot; class=&quot;wikipage default&quot; title=&quot;sp-endurance&quot;&gt;sp-endurance&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:55:36 +0000</pubDate>
        </item>
        <item>
            <title>sp-error-visualizer</title>
            <link>http://maemo.org/development/tools/doc/chinook/sp-error-visualizer/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;sp-error-visualizer&lt;/em&gt; is a small utility that's designed to help you
in noticing errors that are written to syslog.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sp-error-visualizer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sp-error-visualizer&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Just install the &lt;em&gt;sp-error-visualizer&lt;/em&gt; package and it will immediately
start tracking syslogged messages. It's also started automatically on
bootup. If syslog is not running, it provides itself the syslog
socket for the applications.&lt;/p&gt;

&lt;p&gt;The error visualizer can be disabled by running the following command
or uninstalling the package.&lt;/p&gt;

&lt;pre&gt;
# /etc/init.d/sp-error-visualizer stop 
&lt;/pre&gt;

&lt;p&gt;The search strings for the errors that are shown from syslog are
configured in: &lt;em&gt;/usr/share/sp-error-visualizer/data/syslog-common-errors.conf&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sp-error-visualizer.html&quot;&gt;sp-error-visualizer man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/syslog/&quot; class=&quot;wikipage default&quot; title=&quot;syslog&quot;&gt;syslog&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:55:11 +0000</pubDate>
        </item>
        <item>
            <title>ltrace</title>
            <link>http://maemo.org/development/tools/doc/chinook/ltrace/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Ltrace traces both system and library calls.&lt;/p&gt;

&lt;p&gt;Ltrace is quite similar to &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/strace/&quot; class=&quot;wikipage default&quot; title=&quot;strace&quot;&gt;strace&lt;/a&gt; the main differences being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ltrace can trace also function calls between shared libraries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ltrace does not work over clone(). If threading or forking is used,
ltrace needs to be attached to the process after that has happened.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: ltrace&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: ltrace&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Attach to the process with process id pid and begin tracing:&lt;/p&gt;

&lt;pre&gt;
# ltrace -p pid
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/ltrace.html&quot;&gt;ltrace man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/strace/&quot; class=&quot;wikipage default&quot; title=&quot;strace&quot;&gt;strace&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:54:12 +0000</pubDate>
        </item>
        <item>
            <title>maemo-debug-scripts</title>
            <link>http://maemo.org/development/tools/doc/chinook/maemo-debug-scripts/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;maemo-debug-scripts&lt;/em&gt; is a convenience package for maemo developers
needing to debug their programs. The package will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Post-install a symlink required by Gdb/Valgrind/Oprofile to find
the debug symbol files in Scratchbox.  The files are installed
in &lt;em&gt;/usr/lib/debug/&amp;lt;library path&amp;gt;&lt;/em&gt;, but in Scratchbox the library
realpaths are &lt;em&gt;/targets/&amp;lt;target name&amp;gt;/&amp;lt;library path&amp;gt;&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Depend from libc6-dbg.  Without libc6-dbg threads cannot be
debugged with Gdb and Valgrind reports redundant errors for the
dynamic loader (its error suppressions for /lib/ld functions can
match them only with the debug symbol file as stripped binary
doesn't contain static function names)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Depend from target native Gdb.  The Scratchbox host version of Gdb
(cross-gdb) doesn't know how to load the correct thread library
(even on x86) and it cannot debug ARM core-dumps.  Native one can.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install a few helper scripts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;native-gdb&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;runs the target native Gdb (by default Scratchbox runs
the host binary if it exists, this script overrides that)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;debug-dep-install&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;installs debug symbols for given binaries and their dependencies
listed by &amp;quot;ldd&amp;quot;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;debug-pkg-check&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;checks the correctness of a debug package for a given package&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;list-mmapped-libs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;lists all packages containing libs and binaries that given process
uses.  It can be used to find out the libraries mmap()ed through
dlopen that &amp;quot;ldd&amp;quot; (used by debug-deb-install script) doesn't find&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;run-with-valgrind&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;helper script for running a binary with Valgrind memcheck plugin
(memory access errors, leaks etc) so that all suitable options
are set for it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;run-with-callgrind&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;helper script for running a binary with Valgrind callgrind plugin
(performance profiling) so that all suitable options are set for it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;run-with-massif&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;helper script for running a binary with Valgrind massif plugin
(memory usage visualization) so that all suitable options
are set for it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;run-with-strace&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;helper script for running a binary with strace.  Like above
helper scripts, handles maemo-launched binaries automatically&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: maemo-debug-scripts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: maemo-debug-scripts&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/debug-dep-install.html&quot;&gt;debug-dep-install man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/debug-pkg-check.html&quot;&gt;debug-pkg-check man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/list-mmapped-libs.html&quot;&gt;list-mmapped-libs man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/native-gdb.html&quot;&gt;native-gdb man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/run-with-callgrind.html&quot;&gt;run-with-callgrind man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/run-with-massif.html&quot;&gt;run-with-massif man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/run-with-memcheck.html&quot;&gt;run-with-memcheck man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/run-with-strace.html&quot;&gt;run-with-strace man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/gdb/&quot; class=&quot;wikipage default&quot; title=&quot;gdb&quot;&gt;gdb&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/valgrind/&quot; class=&quot;wikipage default&quot; title=&quot;valgrind&quot;&gt;valgrind&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/strace/&quot; class=&quot;wikipage default&quot; title=&quot;strace&quot;&gt;strace&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:53:39 +0000</pubDate>
        </item>
        <item>
            <title>wireless-tools</title>
            <link>http://maemo.org/development/tools/doc/chinook/wireless-tools/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;This package contains the Wireless tools, used to manipulate the Linux
Wireless Extensions. The Wireless Extension is an interface allowing
you to set Wireless LAN specific parameters and get the specific
stats.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;ifrename&lt;/em&gt; - rename network interfaces based on various criteria.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwconfig&lt;/em&gt; - configure a wireless network interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwevent&lt;/em&gt; - display wireless events generated by drivers and setting changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwgetid&lt;/em&gt; - report ESSID, NWID or AP/Cell Address of wireless network.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwlisst&lt;/em&gt; - get more detailed wireless information from a wireless interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwpriv&lt;/em&gt; - configure optional parameters of a wireless network interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;iwspy&lt;/em&gt; - Get wireless statistics from specific nodes. &lt;strong&gt;NOTE: This tool does not currently work!&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: wireless-tools&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: wireless-tools, ifrename&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/ifrename.html&quot;&gt;ifrename man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwconfig.html&quot;&gt;iwconfig man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwevent.html&quot;&gt;iwevent man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwgetid.html&quot;&gt;iwgetid man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwlist.html&quot;&gt;iwlist man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwpriv.html&quot;&gt;iwpriv man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iwspy.html&quot;&gt;iwspy man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:48:46 +0000</pubDate>
        </item>
        <item>
            <title>bluez-hcidump</title>
            <link>http://maemo.org/development/tools/doc/chinook/bluez-hcidump/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Bluez-hcidump is the BlueZ project Bluetooth HCI data dumper.&lt;/p&gt;

&lt;p&gt;Hcidump lets you view raw HCI data to and from a Bluetooth device in a
human readable way.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: bluez-hcidump&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: bluez-hcidump&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Start hcidump like this and create a Bluetooth connection to your
phone:&lt;/p&gt;

&lt;pre&gt;
# hcidump -V -x
&lt;/pre&gt;

&lt;p&gt;you'll see a lot of verbose messages of the data and state of the
connection.&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/hcidump.html&quot;&gt;hcidump man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.bluez.org/&quot;&gt;http://www.bluez.org/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:48:19 +0000</pubDate>
        </item>
        <item>
            <title>xnee</title>
            <link>http://maemo.org/development/tools/doc/chinook/xnee/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Xnee is a suite of programs that can record, replay and distribute
user actions (X events) under the X11 environment. It can be used for
example for test automation.&lt;/p&gt;

&lt;p&gt;Xnee installs two programs; &lt;em&gt;cnee&lt;/em&gt; and &lt;em&gt;gnee&lt;/em&gt;. &lt;em&gt;cnee&lt;/em&gt; is the command
line utility and &lt;em&gt;gnee&lt;/em&gt; is the graphical user interface to &lt;em&gt;cnee&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Limitation: Xnee does not support the XInput extension used for thumb
interaction.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: xnee&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: xnee&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;Record mouse events:&lt;/p&gt;

&lt;pre&gt;
# cnee --record --mouse --events-to-record 100 -o mouse_rec.xnl
&lt;/pre&gt;

&lt;p&gt;Do some actions with the stylus and press control-C once you're done,
or continue using the stylus until 100 events are reached at which
point &lt;em&gt;cnee&lt;/em&gt; will exit.&lt;/p&gt;

&lt;p&gt;To replay back what you just recorded:&lt;/p&gt;

&lt;pre&gt;
# cnee --replay --file mouse_rec.xnl&amp;
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/cnee.html&quot;&gt;cnee man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gnu.org/software/xnee/&quot;&gt;http://www.gnu.org/software/xnee/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.linuxjournal.com/article/6660&quot;&gt;http://www.linuxjournal.com/article/6660&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/xresponse/&quot; class=&quot;wikipage default&quot; title=&quot;xresponse&quot;&gt;xresponse&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:47:37 +0000</pubDate>
        </item>
        <item>
            <title>sp-stress</title>
            <link>http://maemo.org/development/tools/doc/chinook/sp-stress/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;sp-stress&lt;/em&gt; contains utilities that can create artificial system
load. This can be useful when you want to verify that your application
works also when the system is being otherwise stressed.&lt;/p&gt;

&lt;p&gt;The utilities are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;cpuload&lt;/em&gt; for generating CPU load&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;ioload&lt;/em&gt; for generating I/O load&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;memload&lt;/em&gt; for generating memory load&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sp-stress&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sp-stress&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;To create a 30% CPU load on the system:&lt;/p&gt;

&lt;pre&gt;
# cpuload 30
&lt;/pre&gt;

&lt;p&gt;The I/O load is generated by performing read and write operations on a
file that has been created just for this purpose. The file has to be
on one of the MMC's since the device's internal flash memory is
unsuitable for these operations (see the man page for more info).&lt;/p&gt;

&lt;div class=&quot;frame note&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
Note!
&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;
The contents of the file will be *destroyed*, so do not do
this on a file that you care about.
&lt;/div&gt;
&lt;/div&gt;

&lt;pre&gt;
# ioload workfile
&lt;/pre&gt;

&lt;p&gt;To consume 20 megabytes of memory:&lt;/p&gt;

&lt;pre&gt;
# memload 20
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/cpuload.html&quot;&gt;cpuload man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/ioload.html&quot;&gt;ioload man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/memload.html&quot;&gt;memload man page&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:47:05 +0000</pubDate>
        </item>
        <item>
            <title>xrestop</title>
            <link>http://maemo.org/development/tools/doc/chinook/xrestop/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;Xrestop shows how much X resources from the X server are being used by
the X clients. It is similar to &lt;strong&gt;top&lt;/strong&gt; and &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/htop/&quot; class=&quot;wikipage default&quot; title=&quot;htop&quot;&gt;htop&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: xrestop&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: xrestop&lt;/p&gt;

&lt;h1&gt;Usage&lt;/h1&gt;

&lt;pre&gt;
# xrestop
&lt;/pre&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/xrestop.html&quot;&gt;xrestop man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.freedesktop.org/wiki/Software/xrestop&quot;&gt;http://www.freedesktop.org/wiki/Software/xrestop&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/htop/&quot; class=&quot;wikipage default&quot; title=&quot;htop&quot;&gt;htop&lt;/a&gt;, &lt;a href=&quot;http://maemo.org/development/tools/doc/chinook/x-debug-tools/&quot; class=&quot;wikipage default&quot; title=&quot;x-debug-tools&quot;&gt;x-debug-tools&lt;/a&gt;&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:46:07 +0000</pubDate>
        </item>
        <item>
            <title>sysstat</title>
            <link>http://maemo.org/development/tools/doc/chinook/sysstat/</link>
            <description>&lt;h1&gt;Description&lt;/h1&gt;

&lt;p&gt;The sysstat package contains the sar, mpstat, iostat, sadf and sa
tools for Linux.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;sar command collects and reports system activity information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;iostat command reports CPU utilization and I/O statistics for disks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;mpstat command reports global and per-processor statistics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sadf command is used to display data collected by sar in various formats.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The statistics reported by sar concern I/O transfer rates, paging
activity, process-related activities, interrupts, network activity,
memory and swap space utilization, CPU utilization, kernel activities
and TTY statistics, among others.&lt;/p&gt;

&lt;h1&gt;Packages&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;: sysstat&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;binary&lt;/strong&gt;: sysstat&lt;/p&gt;

&lt;h1&gt;Usage Examples&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;h1&gt;Links&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/iostat.html&quot;&gt;iostat man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/mpstat.html&quot;&gt;mpstat man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sa1.html&quot;&gt;sa1 man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sa2.html&quot;&gt;sa2 man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sadc.html&quot;&gt;sadc man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sadf.html&quot;&gt;sadf man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/development/documentation/man_pages/sar.html&quot;&gt;sar man page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://perso.orange.fr/sebastien.godard/&quot;&gt;http://perso.orange.fr/sebastien.godard/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;See Also&lt;/h1&gt;

&lt;p&gt;-&lt;/p&gt;
</description>
            <author>Juha Kallioinen</author>
            <pubDate>Wed, 09 Apr 2008 09:44:37 +0000</pubDate>
        </item>
    </channel>
</rss>
