LTP(Linux Test Project) for Android的编译

Linux Test Project (GitHub首页在此)(以下简称LTP) 包含了Linux内核和内核相关特性的工具集合。该工具的目的是通过把测试自动化引入到Linux内核测试,提高Linux的内核质量。众所周知Android也是Linux Kernel,如果有需要针对Android进行kernel测试,可以考虑使用LTP来进行。这里做一点编译方面的记录。

准备Android NDK交叉编译包

因为我们需要使用NDK在Linux上进行交叉编译,所以必须先配置好NDK才能继续后续编译工作。我使用的NDK版本是r10e(参考下载地址)。注意在Linux上进行交叉编译的方法是通用的,很多其他编译场景也是类似方法(例如在Linux上编译支持Android版本的ffmpeg和x264)

下载NDK后,解压到任意位置(我解压到了/home/xuyu/android-ndk-r10e)
cd 到 android-ndk-r10e/build/tools
执行以下命令,制作独立的交叉编译包:

./make-standalone-toolchain.sh --platform=android-19 --ndk-dir=/home/xuyu/android-ndk-r10e

注意–platform–ndk-dir需要根据实际情况替换一下。

以下是命令执行的输出,成功后,你会看到已经打包好了交叉编译工具包了。当然,也可以在执行make-standalone-toolchain.sh时,使用–install-path=来指定输出的路径。

Copying prebuilt binaries...
Copying sysroot headers and libraries...
Copying c++ runtime headers and libraries...
Creating package file: /tmp/ndk-xuyu/arm-linux-androideabi-4.9.tar.bz2
Cleaning up...
Done.

将arm-linux-androideabi-4.9.tar.bz2解压(依次使用bzip2 -d 和 tar -xf)得到文件夹arm-linux-androideabi-4.9。将文件夹放到任意路径下,例如我放到了/home/xuyu/,并将文件夹名字改为了 ndk-toolchains。工具链目录大概长得像这样:
这里写图片描述

环境变量

为了方便编译,我们先将NDK添加到环境变量中,方法有很多种,诸如可以vim ~/.bashrc,在最后面添加如下几个环境变量:

export PATH=/home/xuyu/ndk-toolchains/bin:$PATH
export SYSROOT=/home/xuyu/ndk-toolchains/sysroot
export CC="/home/xuyu/ndk-toolchains/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
export ANDROID=1

解释一下其中的ANDROID=1:在LTP的INSTALL文档中有一段针对Android用户的说明,摘抄如下:

Specify ANDROID=1 when calling make. Many tests which would otherwise work are currently not built because they share a directory with an incompatible test.

The shell scripts expect /bin/sh to exist, so create a symlink.

意思是有一些测试是不适用于Android的,添加这个选项,会过滤掉这些测试(事实上我发现似乎仍然还有一些测试没有被屏蔽)

准备源码

git clone https://github.com/linux-test-project/ltp.git

源码目录下的INSTALL文件有详细的编译依赖工具清单说明,逐一安装即可。编译步骤很简单,INSTALL中描述的很细致,我就大概列一下:

cd到ltp源码目录下,先执行

make autotools

第二步,进行configure。这一步是关键,我只设定了简单的几个编译参数,如下:

./configure AR=arm-linux-androideabi-ar RANLIB=arm-linux-androideabi-ranlib --host=arm-linux-androideabi --target=arm-linux-androideabi CFLAGS="-static" LDFLAGS="-static"

第三步,执行:

make all

注意:make过程中很可能会出错,因为作者似乎在编写时没有考虑到Android的编译兼容问题,例如我在写此文时,在编译 /testcases/kernel/syscalls/fanotify/fanotify07.c 就发生了错误:
这里写图片描述

我没有研究解决如何让这个文件编译通过,而是选择直接删除了它……这里写图片描述
说句题外话,在翻看LTP的Pull Request时,偶然发现了153这次的Pull Request,一位该项目的Contributor:Steven Jackson也是将某些无法编译、不适用的文件、选项去掉了。

第四步,执行:

make "DESTDIR=$HOME/ltp_output" SKIP_IDCHECK=1 install

耐心等待我们期待已久的LTP输出到指定的路径($HOME/ltp_output)下。

命令执行完成:
这里写图片描述

我们要的结果:
这里写图片描述

OK,至此,LTP for Android编译完成。至于LTP本身的使用,不是本文所述内容。

猜你喜欢

转载自blog.csdn.net/epubcn/article/details/73128492
今日推荐