0

我没主意了。我觉得我做的一切都是正确的。我正在尝试使用 LiME 从 android 捕获内存图像。如果我执行以下操作...

   $ cd $my_android_ndk_path/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
   $ make ARCH=arm CROSS_COMPILE=arm-eabi- modules_prepare

它返回

    make: *** No rule to make target `modules_prepare'.  Stop.

如果我从我的内核源(我的 .config 所在的位置)键入相同的命令 $ make ARCH=arm CROSS_COMPILE=path/to/android_ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin /arm-eabi-modules_prepare

它返回

    make: /path/to/android_ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-eabi-gcc: Command not found
    CHK     include/linux/version.h
    make[1]: `include/asm-arm/mach-types.h' is up to date.
    CHK     include/linux/utsrelease.h
    SYMLINK include/asm -> include/asm-arm
    CC      kernel/bounds.s

我确信我的目录是正确的。有谁知道我做错了什么。我没有为 ndk 使用任何特定的工具。我只是分别解压缩了 ndk 和 sdk 并安装了 JDK。一切都应该工作,但事实并非如此。

4

2 回答 2

1

您是否检查过您的 arm-eabi-gcc(命令:文件 /arm-eabi-gcc)编译器和您的机器(32 位或 64 位)之间的兼容性?如果您的 arm-eabi-gcc 与 32 位机器兼容,为了防止在 64 位机器上出现“make: arm-eabi-gcc: Command not found”之类的错误,您必须安装包“ia32-libs”(命令: sudo apt-get install ia32-libs)。

于 2013-03-19T10:54:27.953 回答
0

modules_prepare是内核准备程序。其目的是确保存在足够的头文件,以便您随后可以针对该内核源代码树构建内核模块。你看,内核有一些自动生成的文件,至少不运行modules_prepare,内核模块编译是不可能的。

为此,当您从内核树运行 modules_prepare 时,这是一个正确的操作。从交叉编译器运行它是没有意义的,因为它不理解你想要做什么。

我建议您通过将交叉编译器添加到 PATH 来让您的生活更轻松,如下所示:

PATH=$PATH:$my_android_ndk_path/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
cd <kernel directory>
make ARCH=arm CROSS_COMPILE=arm-eabi- modules_prepare

所以这说... modules_prepare 只是准备构建模块的第一步。如果您正在尝试构建内核模块(LiME?我不知道那是什么),那么您需要按照构建内核模块的步骤进行操作。

编辑:

现在我知道您正在构建什么内核模块(石灰取证),我可以看到它的SVN 源代码。Makefile 要求您为本地计算机构建,而不是交叉编译。

更改以下内容:

default:
        $(MAKE) -C /lib/modules/$(KVER)/build M=$(PWD) modules

default:
        $(MAKE) -C <your Android kernel> ARCH=arm CROSS_COMPILE=arm-eabi- M=$(PWD) modules

这可能会让你走得更远。

于 2013-01-16T16:02:17.840 回答