http://lttng.org/download上可用的源tarball中的自述文件似乎假定一个文件构建在相同的Linux系统上,而这个系统将成为跟踪的目标。我已经找到了其他资源来解释如何做到这一点( LTTng项目YouTube信道有非常好的屏幕),但是我找不到任何关于如何交叉编译LTTng的说明(特别是,我猜,liburcu、LTTng-UST、LTTng-tools和LTTng-模块),并将其安装在嵌入式Linux系统上(在这里,我可以构建或重新构建内核,使用设备树blob,以及--目前是一个基于ramdisk的文件系统)。
我在哪里可以找到如何做到这一点的细节?
更新:,正如马尔科在下面的第一个注释中指出的,LTTng工具是使用autoconf构建的。从理论上讲,我可以找到一个configure的“--主机”选项,类似于这个答案。也许我需要一个像"ARCH=arm“这样的参数来构建内核,就像我在构建内核时所使用的那样。但是,在使用make install的同一台机器上构建LTTng组件时所使用的交叉编译等效的是什么?
发布于 2013-01-11 17:03:12
LTTng 2.x不再需要修补的内核。您需要加载内核模块(lttng-模块)才能进行内核跟踪。支持的最低Linux内核版本是2.6.38。您可以降低到2.6.32,但是根据LTTng 2.1发布说明和模块自述,您需要在内核上应用3个补丁程序。
为了回答交叉编译问题,下面是交叉编译LTTng工具链(用于用户空间跟踪)的常用过程:
export HOST=<your host triplet (e.g. arm-linux-gnueabi)>
# Make sure your cross-compiler can be found in your $PATH
export SYSROOT=<path to the target sysroot>
export CFLAGS="--sysroot=$SYSROOT"
export CPPFLAGS="-I$SYSROOT/include"
export CXXFLAGS=$CFLAGS
export LDFLAGS="--sysroot=$SYSROOT -L$SYSROOT/usr/lib -L$SYSROOT/lib"
# Fix RPL_MALLOC issue. See [Autoconf and RPL_MALLOC][3] for more details.
export ac_cv_func_malloc_0_nonnull=yes
# Cross compile userspace-rcu. You can also use a source tarball.
git clone git://git.lttng.org/userspace-rcu.git
cd userspace-rcu
./bootstrap
./configure --prefix=$SYSROOT --host=$HOST --with-sysroot=$SYSROOT
make
make install
# Cross compile lttng-ust. You can also use a source tarball.
git clone git://git.lttng.org/lttng-ust.git
cd lttng-ust
./bootstrap
./configure --prefix=$SYSROOT --host=$HOST --with-sysroot=$SYSROOT
make
make install
# Cross compile lttng-tools. You can also use a source tarball.
git clone git://git.lttng.org/lttng-tools.git
cd lttng-tools
./bootstrap
./configure --prefix=$SYSROOT --host=$HOST --with-sysroot=$SYSROOT
make
make install你应该能够适应你的平台。如果您想要进行内核跟踪,您还需要以类似的方式交叉编译lttng模块。
发布于 2013-09-05 20:57:24
更新: ARM的LTTng交叉编译现在更简单了.
首先,安装所需的依赖项。例如,使用Emdebian工具链:
xapt -a armel -m libc6-dev libpopt-dev uuid-dev liburcu-dev然后:
export HOST=arm-linux-gnueabi
export SYSROOT=<path to the target sysroot>
git clone git://git.lttng.org/lttng-ust.git
cd lttng-ust
./bootstrap
./configure --host=$HOST --prefix=$SYSROOT/usr/local
make -j8
make install
git clone git://git.lttng.org/lttng-tools.git
cd lttng-tools
./bootstrap
./configure --host=$HOST --prefix=$SYSROOT/usr/local
make -j8
make install备注:有时make失败是因为“test”子目录二进制文件。在本例中,只需从Makefile中删除‘test’(在执行./配置之后)。
发布于 2015-03-15 10:46:28
我只想分享我使用的构建脚本。它还编译了一些其他缺少的依赖项。HTH
它汇编了以下内容:
libuuid - libxml2 - popt - libiconv zlib - userspace-rcu - lttng-ust - lttng-tools -lttng-模块
#!/bin/bash
# install this stuff before
# apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 bison flex build-essential
# change your flags here
export PATH=/home/build/sam9/compiler/arm-2014.05/bin:$PATH
export ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
export HOST=arm-none-linux-gnueabi
export SYSROOT=/home/build/sam9/sysroot
G_CC=arm-none-linux-gnueabi-gcc
G_PREFIX=/usr/local
G_ARCH=arm
G_CROSS_COMPILE=arm-none-linux-gnueabi-
G_KERNELDIR=/home/build/sam9/linux-3.4.106
G_CFG_FILE="$PWD/${0%\.*}.conf" # tracking download/compile steps
G_TARBALL_DIR=$PWD/tarballs
G_SOURCES_DIR=$PWD/sources
G_BUILD_DIR=$PWD/builds
# steps for tracking progress in $G_CFG_FILE
step_start=0
step_download=1
step_compile=2
echo
echo "This script will compile and install lttng and some deps"
echo "Building for HOST=$HOST"
echo
echo "Builds are located in $G_BUILD_DIR"
echo "Sources are located in $G_SOURCES_DIR"
echo "Tarballs are located in $G_TARBALL_DIR"
echo "sysroot is located at $SYSROOT"
echo "prefix is set to $G_PREFIX"
echo
echo "press Enter to continue or CRTL-C to abort"
read
[ -e "$G_CFG_FILE" ] && . "$G_CFG_FILE" &> /dev/null
function get_src_dir()
{
local filename="$1"
tar -tf "$G_TARBALL_DIR/$filename"| sed -e 's@/.*@@' | uniq
}
function build()
{
local filename="$1"
local what="$2"
local dir_name="$3"
local state="$4"
local do_bootstrap=$5
if [ $state -eq $step_download ] ; then
if $do_bootstrap ; then
pushd $G_SOURCES_DIR/$dir_name
./bootstrap
popd
fi
mkdir -p "$G_BUILD_DIR/$dir_name"
pushd "$G_BUILD_DIR/$dir_name"
if [ -n "$patch" ] ; then
pushd "$G_SOURCES_DIR/$dir_name"
wget $patch -O- | patch -p1
popd
fi
"$G_SOURCES_DIR/$dir_name"/configure --host=$HOST --prefix=$SYSROOT/${G_PREFIX} $EXTRA_CONF
make -j3
make install && echo "$what=$step_compile" >> $G_CFG_FILE
popd
fi
if [ $state -eq $step_compile ] ; then
echo ">> $what is already compiled"
fi
}
function download()
{
local url="$1"
local what="$2"
local filename="$3"
local state="$4"
if [ $state -lt $step_download ] ; then
wget "$url" -O "$G_TARBALL_DIR/$filename"
echo "$what=$step_download" >> $G_CFG_FILE
tar -C $G_SOURCES_DIR -xf "$G_TARBALL_DIR/$filename"
. "$G_CFG_FILE" &> /dev/null
fi
}
function download_git()
{
local url="$1"
local what="$2"
local filename="$3"
local state="$4"
if [ $state -lt $step_download ] ; then
pushd $G_SOURCES_DIR
git clone $url
popd
echo "$what=$step_download" >> $G_CFG_FILE
. "$G_CFG_FILE" &> /dev/null
fi
}
function init()
{
local what="$1"
eval state=\$$what
if [ ! -n "$state" ] ; then
echo "$what=$step_start" >> $G_CFG_FILE
. "$G_CFG_FILE" &> /dev/null
fi
eval state=\$$what
}
function get_em()
{
local url="$1"
local what="$2"
local filename=$(basename $url)
init "$what"
download "$url" "$what" $filename $state
eval state=\$$what
local dir_name=$(get_src_dir $filename)
build $filename "$what" $dir_name $state false
}
function get_em_git()
{
local url="$1"
local what="$2"
local do_bootstrap="$3"
local filename=$(basename $url)
filename=${filename/.git}
init "$what"
download_git "$url" "$what" $filename $state
eval state=\$$what
build $filename "$what" $filename $state $do_bootstrap
}
echo "create directories"
mkdir -p "$G_TARBALL_DIR" "$G_SOURCES_DIR" "$G_BUILD_DIR" &>/dev/null
########################
# define the packages we want to compile
########################
# this are the dependencies that are missing for our sysroot
# we will compile them and install the to the $SYSROOT
#
# --- BEGIN --- dependencies
what=libuuid
url=http://downloads.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz
get_em $url "$what"
what=libxml2
url=ftp://gd.tuwien.ac.at/pub/libxml/libxml2-sources-2.9.2.tar.gz
EXTRA_CONF=--without-python
get_em $url "$what"
unset EXTRA_CONF
what=popt
url=ftp://anduin.linuxfromscratch.org/BLFS/svn/p/popt-1.16.tar.gz
get_em $url "$what"
what=libiconv
url=http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
patch=http://data.gpo.zugaina.org/gentoo/dev-libs/libiconv/files/libiconv-1.14-no-gets.patch
get_em $url "$what"
unset patch
what=zlib
url=http://zlib.net/zlib-1.2.8.tar.gz
init "$what"
filename=$(basename $url)
download "$url" "$what" $filename $state
if [ $state -eq $step_compile ] ; then
echo ">> $what is already compiled"
else
dir_name=$(get_src_dir $filename)
pushd $G_SOURCES_DIR/$dir_name
CC=$G_CC \
LDSHARED="$G_CC -shared -Wl,-soname,libz.so.1" \
./configure --shared --prefix=$SYSROOT/${G_PREFIX}
make
make install prefix=$SYSROOT/${G_PREFIX} && echo "$what=$step_compile" >> $G_CFG_FILE
popd
fi
# --- END --- dependencies
#######################
# compile lttng related packages and install into $SYSROOT
what=userspace_rcu
url=git://git.lttng.org/userspace-rcu.git
get_em_git $url "$what" true
what=lttng_ust
url=git://git.lttng.org/lttng-ust.git
export CPPFLAGS="-I$SYSROOT/${G_PREFIX}/include"
export LDFLAGS="-L$SYSROOT/${G_PREFIX}/lib -Wl,-rpath-link=$SYSROOT/${G_PREFIX}/lib"
get_em_git $url "$what" true
unset CPPFLAGS
unset LDFLAGS
what=lttng_tools
url=git://git.lttng.org/lttng-tools.git
export CPPFLAGS="-I$SYSROOT/${G_PREFIX}/include"
export LDFLAGS="-L$SYSROOT/${G_PREFIX}/lib -Wl,-rpath-link=$SYSROOT/${G_PREFIX}/lib"
get_em_git $url "$what" true
unset CPPFLAGS
unset LDFLAGS
what=lttng_modules
url=git://git.lttng.org/lttng-modules.git
init "$what"
filename=$(basename $url)
filename=${filename/.git}
download_git "$url" "$what" $filename $state
if [ $state -eq $step_compile ] ; then
echo ">> $what is already compiled"
else
#dir_name=$(get_src_dir $filename)
pushd $G_SOURCES_DIR/$filename
make ARCH=$G_ARCH CROSS_COMPILE=$G_CROSS_COMPILE KERNELDIR=$G_KERNELDIR -j4
make ARCH=$G_ARCH CROSS_COMPILE=$G_CROSS_COMPILE KERNELDIR=$G_KERNELDIR INSTALL_MOD_PATH=$SYSROOT modules_install \
&& echo "$what=$step_compile" >> $G_CFG_FILE
popd
fi
echo
echo "INFO: the build progress for all packages is tracked in $G_CFG_FILE"https://stackoverflow.com/questions/13774455
复制相似问题