我不在乎。我觉得我已经做好了一切。我正在尝试使用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。一切都应该有效,但事实并非如此。
答案 0 :(得分:1)
你检查了你的arm-eabi-gcc(命令:file / 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)。
答案 1 :(得分: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?我不知道那是什么)那么您需要follow the steps for building a kernel module。
编辑:
现在我知道你正在构建什么内核模块(lime-forensics),我可以看到它SVN sources。 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
这可能会让你更进一步。