summaryrefslogtreecommitdiffstats
path: root/scripts/crosstap
diff options
context:
space:
mode:
authorTom Zanussi <tom.zanussi@intel.com>2012-08-31 00:06:57 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-09-02 05:52:13 -0700
commit17b97774c2069015f6eec6736cace3271ab6b82a (patch)
tree161f1eaa3b143962efc98da9258ad4f6c2aa60b8 /scripts/crosstap
parent0f9820f9753400d7e9b588921cb394129282af18 (diff)
downloadpoky-17b97774c2069015f6eec6736cace3271ab6b82a.tar.gz
crosstap: new script
This script makes it easy to run a systemtap script on a remote target from a build host. The script itself contains documentation on basic setup and usage - see that for details. In a nutshell, if you have a systemtap script on the build host, this script allows that systemtap script to be compiled and run on the target host and for the output appear on the host terminal. The crosstap script requires to an sdk build of the target (or a build with 'tools-profile' added to EXTRA_IMAGE_FEATURES) because it needs to be able to run the native systemtap built by the systemtap recipe, which in turn needs access to the kernel built for the target in order to build the kernel modules that implement the systemtap probe specified by the systemtap script and which ultimately get shipped to the target and insmod'ed there. The crosstap script also needs to be able to ssh to the target host in order insert the modules on the target, so the target system needs to support incoming ssh connections. (From OE-Core rev: c6da6b648328377ba3590fd38cb12dad26a46a13) Signed-off-by: Tom Zanussi <tom.zanussi@intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/crosstap')
-rwxr-xr-xscripts/crosstap148
1 files changed, 148 insertions, 0 deletions
diff --git a/scripts/crosstap b/scripts/crosstap
new file mode 100755
index 0000000000..783bf2ffbe
--- /dev/null
+++ b/scripts/crosstap
@@ -0,0 +1,148 @@
1#!/bin/bash
2#
3# Run a systemtap script on remote target
4#
5# Examples (run on build host, target is 192.168.1.xxx):
6# $ source oe-init-build-env"
7# $ cd ~/my/systemtap/scripts"
8#
9# $ crosstap root@192.168.1.xxx myscript.stp"
10# $ crosstap root@192.168.1.xxx myscript-with-args.stp 99 ninetynine"
11#
12# Copyright (c) 2012, Intel Corporation.
13# All rights reserved.
14#
15# This program is free software; you can redistribute it and/or modify
16# it under the terms of the GNU General Public License version 2 as
17# published by the Free Software Foundation.
18#
19# This program is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22# See the GNU General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with this program; if not, write to the Free Software
26# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
28function usage() {
29 echo "Usage: $0 <user@hostname> <sytemtap-script> [additional systemtap-script args]"
30}
31
32function setup_usage() {
33 echo ""
34 echo "'crosstap' requires a local sdk build of the target system"
35 echo "(or a build that includes 'tools-profile') in order to build"
36 echo "kernel modules that can probe the target system."
37 echo ""
38 echo "Practically speaking, that means you need to do the following:"
39 echo " - If you're running a pre-built image, download the release"
40 echo " and/or BSP tarballs used to build the image."
41 echo " - If you're working from git sources, just clone the metadata"
42 echo " and BSP layers needed to build the image you'll be booting."
43 echo " - Make sure you're properly set up to build a new image (see"
44 echo " the BSP README and/or the widely available basic documentation"
45 echo " that discusses how to build images)."
46 echo " - Build an -sdk version of the image e.g.:"
47 echo " $ bitbake core-image-sato-sdk"
48 echo " OR"
49 echo " - Build a non-sdk image but include the profiling tools:"
50 echo " [ edit local.conf and add 'tools-profile' to the end of"
51 echo " the EXTRA_IMAGE_FEATURES variable ]"
52 echo " $ bitbake core-image-sato"
53 echo ""
54 echo " [ NOTE that 'crosstap' needs to be able to ssh into the target"
55 echo " system, which isn't enabled by default in -minimal images. ]"
56 echo ""
57 echo "Once you've build the image on the host system, you're ready to"
58 echo "boot it (or the equivalent pre-built image) and use 'crosstap'"
59 echo "to probe it (you need to source the environment as usual first):"
60 echo ""
61 echo " $ source oe-init-build-env"
62 echo " $ cd ~/my/systemtap/scripts"
63 echo " $ crosstap root@192.168.1.xxx myscript.stp"
64 echo ""
65}
66
67function systemtap_target_arch() {
68 SYSTEMTAP_TARGET_ARCH=$1
69 case $SYSTEMTAP_TARGET_ARCH in
70 i?86)
71 SYSTEMTAP_TARGET_ARCH="i386"
72 ;;
73 x86_64*)
74 SYSTEMTAP_TARGET_ARCH="x86_64"
75 ;;
76 arm*)
77 SYSTEMTAP_TARGET_ARCH="arm"
78 ;;
79 powerpc*)
80 SYSTEMTAP_TARGET_ARCH="powerpc"
81 ;;
82 *)
83 ;;
84 esac
85}
86
87if [ $# -lt 2 ]; then
88 usage
89 exit 1
90fi
91
92if [ -z "$BUILDDIR" ]; then
93 echo "Error: Unable to find the BUILDDIR environment variable."
94 echo "Did you forget to source your build system environment setup script?"
95 exit 1
96fi
97
98pushd $PWD
99cd $BUILDDIR
100BITBAKE_VARS=`bitbake -e virtual/kernel`
101popd
102
103STAGING_BINDIR_TOOLCHAIN=$(echo "$BITBAKE_VARS" | grep ^STAGING_BINDIR_TOOLCHAIN \
104 | cut -d '=' -f2 | cut -d '"' -f2)
105STAGING_BINDIR_TOOLPREFIX=$(echo "$BITBAKE_VARS" | grep ^TARGET_PREFIX \
106 | cut -d '=' -f2 | cut -d '"' -f2)
107SYSTEMTAP_HOST_INSTALLDIR=$(echo "$BITBAKE_VARS" | grep ^STAGING_DIR_NATIVE \
108 | cut -d '=' -f2 | cut -d '"' -f2)
109TARGET_ARCH=$(echo "$BITBAKE_VARS" | grep ^TRANSLATED_TARGET_ARCH \
110 | cut -d '=' -f2 | cut -d '"' -f2)
111TARGET_KERNEL_BUILDDIR=$(echo "$BITBAKE_VARS" | grep ^B= \
112 | cut -d '=' -f2 | cut -d '"' -f2)
113
114systemtap_target_arch "$TARGET_ARCH"
115
116if [ ! -d $TARGET_KERNEL_BUILDDIR ] ||
117 [ ! -f $TARGET_KERNEL_BUILDDIR/vmlinux ]; then
118 echo -e "\nError: No target kernel build found."
119 echo -e "Did you forget to create a local build of your image?"
120 setup_usage
121 exit 1
122fi
123
124if [ ! -f $SYSTEMTAP_HOST_INSTALLDIR/usr/bin/stap ]; then
125 echo -e "\nError: Native (host) systemtap not found."
126 echo -e "Did you accidentally build a local non-sdk image? (or forget to"
127 echo -e "add 'tools-profile' to EXTRA_IMAGE_FEATURES in your local.conf)?"
128 setup_usage
129 exit 1
130fi
131
132target_user_hostname="$1"
133full_script_name="$2"
134script_name=$(basename "$2")
135script_base=${script_name%.*}
136shift 2
137
138${SYSTEMTAP_HOST_INSTALLDIR}/usr/bin/stap \
139 -a ${SYSTEMTAP_TARGET_ARCH} \
140 -B CROSS_COMPILE="${STAGING_BINDIR_TOOLCHAIN}/${STAGING_BINDIR_TOOLPREFIX}" \
141 -r ${TARGET_KERNEL_BUILDDIR} \
142 -I ${SYSTEMTAP_HOST_INSTALLDIR}/usr/share/systemtap/tapset \
143 -R ${SYSTEMTAP_HOST_INSTALLDIR}/usr/share/systemtap/runtime \
144 --remote=$target_user_hostname \
145 -m $script_base \
146 $full_script_name "$@"
147
148exit 0