http://lttng.org/download上可用的源tarball中的README文件似乎假定该文件是在同一Linux系统上构建的,该系统将成为跟踪的目标。我找到了其他资源来解释如何执行此操作(LTTng Project YouTube channel的截屏非常不错),但是我找不到有关如何交叉编译LTTng的任何说明(具体来说,我想是liburcu,LTTng-UST,LTTng-工具和LTTng模块),然后将它们全部安装在嵌入式Linux系统上(我可以在其中构建或重建内核,使用设备树blob和(目前)基于ramdisk的文件系统)。
在哪里可以找到有关如何执行此操作的详细信息?
更新:正如Marko在下面的第一条注释中指出的那样,LTTng工具是使用autoconf
构建的。从理论上我了解到,我可以找出configure
的“--host”选项,类似于this answer。也许像在构建内核时所使用的那样,我需要一个像“ARCH = arm”这样的参数来make
。但是,在将要使用LTTng组件的同一台计算机上构建LTTng组件时,所使用的make install
的交叉编译等效项是什么?
最佳答案
LTTng 2.x不再需要修补的内核。您需要加载内核模块(lttng-modules)才能进行内核跟踪。支持的最低Linux内核版本是2.6.38。
您可以降低到2.6.32,但是您需要根据LTTng 2.1 release note和lttng-modules README将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-modules。