gpt4 book ai didi

android - "bitsperlong.h": trouble cross-building Perf for ARM (Android)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:53 24 4
gpt4 key购买 nike

我正在尝试为 Android 构建 Perf,从 x86_64 Ubuntu 系统 (12.04) 交叉构建 ARM 架构。我遵循 Linux 内核附带的说明,位于 ./tools/perf/Documentation/android.txt。我尝试了基于 NDK 的构建和 AOSP 派生的 sysroot 方法,记录在同一个文本文件中。但是,我更喜欢 AOSP 派生的 sysroot 方法。

这是 AOSP 的 4.3_r3.1 标记的同步,添加了内核 3.10.17,并生成了适当的 .config 文件。 (交叉构建内核是在下面的交叉构建 Perf 尝试之前构建的。)

为主机平台构建 Perf 工作正常。但是 ARM 的交叉构建失败并出现以下错误:

$ cd ~/work/aosp
$ source build/envsetup.sh
$ lunch
$ cd ${ANDROID_BUILD_TOP}/ndk
$ ./build/tools/build-ndk-sysroot.sh --abi=arm
$ export NDK_SYSROOT=${ANDROID_BUILD_TOP}/ndk/build/platforms/android-3/arch-arm
$ export NDK_TOOLCHAIN=${ANDROID_TOOLCHAIN}/arm-linux-androideabi-
$ cd ${ANDROID_BUILD_TOP}/kernel/tools/perf
$ make ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} CFLAGS="--sysroot=${NDK_SYSROOT}"
...
CC perf.o
In file included from /home/rbissell/work/aosp/kernel/arch/arm/include/uapi/asm/posix_types.h:35:0,
from /home/rbissell/work/aosp/kernel/include/uapi/linux/posix_types.h:35,
from /home/rbissell/work/aosp/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/include-fixed/sys/types.h:46,
from /home/rbissell/work/aosp/ndk/build/platforms/android-3/arch-arm/usr/include/unistd.h:33,
from util/util.h:44,
from builtin.h:4,
from perf.c:9:
/home/rbissell/work/aosp/kernel/include/uapi/asm-generic/posix_types.h:4:29: fatal error: asm/bitsperlong.h: No such file or directory

Google 对丢失的“bitsperlong.h”文件进行了大量搜索,其中一些甚至是 here on SO .大多数情况下,这些问题和答案属于以下类别之一:

  • 有人试图构建内核模块(我不是)
  • 不是交叉构建的人,只需要安装主机内核头文件(我不需要)

我上面提供的 SO 链接提供的唯一解决方案是编辑 Perf 的源文件以包含 <asm-generic/bitsperlong.h>而不是 <asm/bitsperlong.h> ...我见过的另一种变体是在后一个目录中创建一个指向前一个的符号链接(symbolic link)。

这些解决方案在我看来都不符合标准,而且在任何情况下都会导致其他编译错误,例如:

$ ln -s /home/rbissell/work/aosp/kernel/include/asm-generic /home/rbissell/work/aosp/kernel/include/asm
$ make ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} CFLAGS="--sysroot=${NDK_SYSROOT}"
...
CC perf.o
In file included from /home/rbissell/work/aosp/ndk/build/platforms/android-3/arch-arm/usr/include/unistd.h:33:0,
from util/util.h:44,
from builtin.h:4,
from perf.c:9:
/home/rbissell/work/aosp/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/include-fixed
/sys/types.h:73:1: error: unknown type name '__kernel_nlink_t'

起初我认为这个问题可能是由于在构建 Perf 之前没有在同一个源代码树中交叉构建内核本身造成的(因为,也许内核build设置了一些 $ARCH 适当的符号链接(symbolic link),或其他东西,)但是这样做之后,我仍然遇到同样的问题。

更新:如果有帮助,这就是我交叉构建内核的方式:

make ARCH=arm CROSS_COMPILE=/home/rbissell/work/aosp/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-

最佳答案

你看过external/linux-tools-perf/

关于android - "bitsperlong.h": trouble cross-building Perf for ARM (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com