LTTng for Xilinx Zynq Linux
Table of Contents
This page describes how to build and run LTTng(with limited functionality) on Xilnx Zynq Linux.
Table of Contents
Table of Contents
Overview
The LTTng(Linux Trace Toolkit - next generation) project aims at efficient tracing tools for Linux. LTTng consists of kernel tracer and user tracer, and as a part of project, there are multiple viewers to show and analyze traces. LTTng can trace a lot of kernel functions such as memory, scheduling, filesystem, network, and more.Requirements
Required modules for LTTng for Xilinx Zynq Linux- Xilinx Zynq Linux : Zynq Linux with tracepoints feature(CONFIG_TRACEPOINTS) on
- LTTng modules : kernel modules for LTTng
- LTTng tools : userspace daemons and tools
- userspace rcu : userspace rcu library used by LTTng tools
- libpopt : used by LTTng tools
Note:
|
Build Process
Build Directory Hierachy
lttng-build-root /| - linux-xlnx : Xilinx Zynq Linux for LTTng
| - lttng-modules-xlnx : LTTng kernel modules for Xilinx Zynq linux
| - kos : generated LTTng kernel modules
| - popt-1.16-xlnx : libpopt for LLTng tools
| - userspace-rcu-xlnx : userspace rcu library for LLTng tools
| - lttng-tools-xlnx : LTTng tools
/tmp/<YOUR_LTTNG_ROOT> : the build root directory where all created binaries are placed. (YOUR_LTTNG_ROOT=username-lttng-root for this page)
Building Xilinx Zynq Linux for LTTng
The kernel can be downloaded from Xilinx git,Code Block | ||
---|---|---|
| ||
build > git clone git://github.com/Xilinx/linux-xlnx.git linux-xlnx build > cd linux-xlnx |
Code Block | ||
---|---|---|
| ||
diff --git a/arch/arm/configs/xilinx_zynq_defconfig b/arch/arm/configs/xilinx_zynq_defconfig index 58c226e..e9c069c 100644 --- a/arch/arm/configs/xilinx_zynq_defconfig +++ b/arch/arm/configs/xilinx_zynq_defconfig @@ -30,7 +30,8 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_EXPERIMENTAL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" -CONFIG_LOCALVERSION="-xilinx" +CONFIG_LOCALVERSION="-xilinx-lttng" +CONFIG_TRACEPOINTS=y CONFIG_LOCALVERSION_AUTO=y CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y diff --git a/arch/arm/mach-zynq/Kconfig b/arch/arm/mach-zynq/Kconfig index 96e1668..7a557c3 100644 --- a/arch/arm/mach-zynq/Kconfig +++ b/arch/arm/mach-zynq/Kconfig @@ -54,3 +54,10 @@ config XILINX_AXIPCIE endmenu endif + +config TRACEPOINTS + bool "Tracepoints for lttng modules" + default y + help + Enable tracepoints for lttng modules + |
Code Block | ||
---|---|---|
| ||
build > make ARCH=arm xilinx_zynq_defconfig |
Code Block | ||
---|---|---|
| ||
build > make ARCH=arm uImage UIMAGE_LOADADDR=0x8000 |
Return to the build root,
Code Block | ||
---|---|---|
| ||
build > cd .. |
Building LTTng Kernel Modules
The source code can be downloaded by the following command
Code Block | ||
---|---|---|
| ||
build > wget https://lttng.org/files/lttng-modules/lttng-modules-2.1.1.tar.bz2 build > tar -xf lttng-modules-2.1.1.tar.bz2 build > cd lttng-modules-2.1.1 |
Code Block | ||
---|---|---|
| ||
--- /instrumentation/events/lttng-module/sched.h <span style="font-family: arial,helvetica,sans-serif; line-height: 1.5;">@@ -5,6 +5,7 @@ #define _TRACE_SCHED_H #include <linux/sched.h> +#include <linux/sched/rt.h> #include <linux/tracepoint.h> #ifndef _TRACE_SCHED_DEF_ |
Code Block | ||
---|---|---|
| ||
--- /instrumentation/syscalls/headers/arm-32-syscalls-2.6.38_integers_override.h @@ -2,7 +2,6 @@ #define OVERRIDE_TABLE_32_sys_arm_fadvise64_64 #define OVERRIDE_TABLE_32_sys_sync_file_range2 -#define OVERRIDE_TABLE_32_sys_set_tls #ifndef CREATE_SYSCALL_TABLE @@ -38,18 +37,6 @@ SC_TRACE_EVENT(sys_sync_file_range2, TP_printk() ) -SC_TRACE_EVENT(sys_set_tls, - TP_PROTO(unsigned int tid, unsigned long tls), - TP_ARGS(tid, tls), - TP_STRUCT__entry( - __field(unsigned int, tid) - __field_hex(unsigned int, tls)), - TP_fast_assign( - tp_assign(tid, tid) - tp_assign(tls, tls)), - TP_printk() -) - #else /* CREATE_SYSCALL_TABLE */ #define OVVERRIDE_TABLE_32_sys_mmap @@ -59,9 +46,6 @@ TRACE_SYSCALL_TABLE(sys_mmap, sys_mmap, 90, 6) TRACE_SYSCALL_TABLE(sys_arm_fadvise64_64, sys_arm_fadvise64_64, 270, 4) #define OVERRIDE_TABLE_32_sys_sync_file_range2 TRACE_SYSCALL_TABLE(sys_sync_file_range2, sys_sync_file_range2, 341, 4) -#define OVERRIDE_TABLE_32_sys_set_tls -TRACE_SYSCALL_TABLE(sys_set_tls, sys_set_tls, 0xf0005, 2) - #endif /* CREATE_SYSCALL_TABLE */ |
Code Block | ||
---|---|---|
| ||
build > make KERNELDIR=lttng-build-root/linux-xlnx ARCH=arm |
Code Block | ||
---|---|---|
| ||
build > mkdir lttng-build-root/kos build > find . -name "*.ko" -exec cp -i {} lttng-build-root/kos/. \; |
Code Block | ||
---|---|---|
| ||
build > cd .. |
Building libpopt for LTTng Tools
libpopt and userspace rcu should be built before building LTTng tools.
libpopt can be downloaded from the following link,
Code Block | ||
---|---|---|
| ||
build > wget http://rpm5.org/files/popt/popt-1.16.tar.gz build > tar -xf popt-1.16.tar.gz build > cd popt-1.16 |
Code Block | ||
---|---|---|
| ||
build > ./configure --prefix=/tmp/username-lttng-root/ --host=arm-xilinx-linux-gnueabi build > make install |
Code Block | ||
---|---|---|
| ||
build > cd .. |
Building userspace rcu library for LTTng tools
Userspace rcu can be downloaded using the command show below
Code Block | ||
---|---|---|
| ||
build > wget https://lttng.org/files/urcu/userspace-rcu-0.7.6.tar.bz2 build > tar -xf userspace-rcu-0.7.6.tar.bz2 build > cd userspace-rcu-0.7.6 |
Code Block | ||
---|---|---|
| ||
build > ./configure --prefix=/tmp/username-lttng-root/ --host=arm-xilinx-linux-gnueabi |
Code Block | ||
---|---|---|
| ||
+++ config.h @@ -45,7 +45,7 @@ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ -#define HAVE_MALLOC 0 +#define HAVE_MALLOC 1 /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 @@ -136,7 +136,7 @@ #endif /* Define to rpl_malloc if the replacement function should be used. */ -#define malloc rpl_malloc +/*#define malloc rpl_malloc*/ /* Define to `int' if <sys/types.h> does not define. */ /* #undef pid_t */ |
Code Block | ||
---|---|---|
| ||
build > make install |
Code Block | ||
---|---|---|
| ||
build > cd .. |
Building LTTng Tools
Since all dependent libraries are built, LTTng tools can be built upon those. The source tree can be downloaded by the following command,
Code Block | ||
---|---|---|
| ||
build > wget https://lttng.org/files/lttng-tools/lttng-tools-2.1.1.tar.bz2 build > tar -xf lttng-tools-2.1.1.tar.bz2 build > cd lttng-tools-2.1.1 |
Code Block | ||
---|---|---|
| ||
build > ./configure --prefix=/tmp/username-lttng-root/ --host=arm-xilinx-linux-gnueabi LDFLAGS=-L/tmp/username-lttng-root/lib CPPFLAGS="-I/tmp/username-lttng-root/include -DXILINX_MOD" --disable-lttng-ust |
Code Block | ||
---|---|---|
| ||
+++ src/common/defaults.h @@ -32,8 +32,13 @@ /* Environment variable to set session daemon binary path. */ #define DEFAULT_SESSIOND_PATH_ENV "LTTNG_SESSIOND_PATH" +#ifdef XILINX_MOD +/* Default trace output directory name */ +#define DEFAULT_TRACE_DIR_NAME "/tmp/lttng-traces" +#else /* Default trace output directory name */ #define DEFAULT_TRACE_DIR_NAME "lttng-traces" +#endif /* Default size of a hash table */ #define DEFAULT_HT_SIZE 4 @@ -77,7 +82,11 @@ /* Default lttng run directory */ +#ifdef XILINX_MOD +#define DEFAULT_LTTNG_RUNDIR "/tmp/lttng" +#else #define DEFAULT_LTTNG_RUNDIR "/var/run/lttng" +#endif #define DEFAULT_LTTNG_HOME_RUNDIR "%s/.lttng" #define DEFAULT_LTTNG_SESSIOND_PIDFILE "lttng-sessiond.pid" |
Code Block | ||
---|---|---|
| ||
build > make install |
Code Block | ||
---|---|---|
| ||
build > cd .. |
Running Process
Running LTTng on Xilinx Zynq Linux
Make sure its the kernel built from previous steps by checking if its uname is '3.6.0-linux-xilinx-lttng-dirty',Code Block | ||
---|---|---|
| ||
zynq > uname -r 3.6.0-linux-xilinx-lttng-dirty |
Code Block | ||
---|---|---|
| ||
zynq > mkdir -p /lib/modules/$(uname -r) |
A LTTng session needs to be created,
Code Block | ||
---|---|---|
| ||
zynq > /tmp/username-lttng-root/bin/lttng create <YOUR_SESSION> |
Code Block | ||
---|---|---|
| ||
zynq > /tmp/username-lttng-root/bin/lttng list -k |
Code Block | ||
---|---|---|
| ||
zynq > /tmp/username-lttng-root/bin/lttng enable-event -k -a |
Code Block | ||
---|---|---|
| ||
zynq > /tmp/username-lttng-root/bin/lttng start zynq > /tmp/username-lttng-root/bin/lttng stop |
Code Block | ||
---|---|---|
| ||
zynq > /tmp/username-lttng-root/bin/lttng destroy |