2012-08-30 132 views
1

是否有人交叉編譯和使用Android的LTP,我嘗試使用arm-eabi工具鏈,arm-linux-none-gnueabi工具鏈交叉編譯LTP,但我無法執行測試用例Android設備。如何交叉編譯LTP爲android

+0

什麼是'LTP'? –

+0

LTP是Linux測試項目,可用於測試任何模塊的功能。例如我們可以使用LTP來測試USB驅動程序的功能。它可用於x86系統,我們需要交叉編譯才能在android設備上運行它。 – LKL

+0

@讚歌傑:LTP來源:https://github.com/linux-test-project/ltp – pevik

回答

1

首先創建獨立工具鏈(使用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被記錄在INSTALL文件在LTP源代碼,設置的其它變量是由android_configure.sh啓發。

但是,目前構建失敗,因爲許多測試需要被禁用(仿生學不支持許多必需的功能,請參閱谷歌人制作的list of tests needed to be disabled)。

目前,上游方面正在努力修復爲Android構建LTP的問題。來自谷歌的人added LTP into AOSP,但他們將代碼返回給LTP上游(請參閱LTP郵件列表中的信息people from google planning to contribute,their instructions about building)。

一些與android相關的修補程序(來自google和其他人):fix the executable shell pathfix temp dirfix stack_clash test

目前在AOSP中使用谷歌倉庫可能會更容易(AOSP樹中的in-tree內置或獨立工具鏈的out-of-tree),但是早晚LTP上游應該從android倉庫獲得所有android修正。