1

有人交叉编译和使用 LTP for android,我尝试使用 arm-eabi 工具链、arm-linux-none-gnueabi 工具链交叉编译 LTP,但我无法在 android 设备中执行测试用例。

4

1 回答 1

3

首先创建独立工具链(使用make-standalone-toolchain.sh脚本)并将其安装到/opt/android-standalone-toolchain.api-${API}.

构建本身:

API=24
export TOOLCHAIN_ROOT=/opt/android-standalone-toolchain.api-${API}
export SYSROOT=$TOOLCHAIN_ROOT/sysroot
export CROSS_COMPILE=$TOOLCHAIN_ROOT/bin/arm-linux-androideabi-
export HOST=arm-linux-androideabi

# Non-exhaustive lists of compiler + binutils
# Depending on what you compile, you might need more binutils than that
export CPP=${CROSS_COMPILE}cpp
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export NM=${CROSS_COMPILE}nm
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export LD=${CROSS_COMPILE}ld
export RANLIB=${CROSS_COMPILE}ranlib

export CFLAGS="${CFLAGS} --sysroot=${SYSROOT} -I${SYSROOT}/usr/include \
    -I${ANDROID_PREFIX}/include"
export CPPFLAGS="${CFLAGS}"
export LDFLAGS="${LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_PREFIX}/lib"

make autotools
./configure --host=${HOST} --with-sysroot=${SYSROOT}
make -j$(getconf _NPROCESSORS_ONLN) ANDROID=1
make install
adb push /opt/ltp /data/local/tmp

学分:使用变量ANDROID=1记录在 LTP 源代码的INSTALL文件中,设置其他变量的灵感来自android_configure.sh

但目前构建失败,因为需要禁用许多测试(仿生不支持许多必需的功能,请参阅谷歌人员制作的需要禁用的测试列表)。

目前,上游正在努力修复为 Android 构建 LTP。来自 google 的人将 LTP 添加到 AOSP中,但他们将代码回馈给 LTP 上游(请参阅 LTP 邮件列表中的信息,来自 google 计划贡献的人他们关于构建的说明)。

一些与 android 相关的修复(来自 google 和其他人):修复可执行 shell 路径修复临时目录修复 stack_clash 测试

目前,在 AOSP 中使用 google 的存储库可能更容易(在 AOSP 树中的树内构建或具有独立工具链的树外构建),但 LTP 上游迟早应该从 google 的存储库中获得所有针对 android 的修复。

于 2017-09-12T22:08:26.480 回答