2014-11-03 83 views
1

正如标题所暗示的那样..我在成功编译LiME(Linux内存提取器)并将其加载到Android模拟器或物理设备上的过程中挣扎不已。编译我使用arm-linux-androideabi-4.6,我目前在x64 14.04 Ubuntu上。 另外:编译Android Kernel +与LiME交叉编译的问题

[email protected]:~$ uname -a 
Linux unknown-A15 3.13.0-39-generiC#66-Ubuntu SMP Tue Oct 28 13:30:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 

因此,为了成功这个我按照从各个方面引导,网上没有运气..(这可能是由于DIFF NDK/SDK /紫光发行versios或者只是我的经验不足的方向) 我已阅读的导游是那些(加上2名导游,但SO不会允许我发布更多的链接。如果需要,我可以把它们发布评论以后):

  1. https://code.google.com/p/volatility/wiki/AndroidMemoryForensics
  2. http://sgros-students.blogspot.ca/2014/04/lime.html

我主要关注第1指南,但是在尝试交叉编译内核时遇到了我的第一个问题。

所以,首先(在已下载的金鱼内核源代码)我这个添加到/ etc/profile文件,使事情变得更简单:

export CCOMPILER=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- 
source /etc/profile 

然后我做的:

make clean 
make mrproper 
cp path/to/exported_from_emulator_config . 
mv config .config 
# Add the 3 lines needed "CONFIG_MODULES=y", "CONFIG_MODULES_UNLOAD=y", "CONFIG_MODULES_FORCE_UNLOAD=y" 
sudo vim .config 

现在..我必须实际制作内核。但是,在线指南上建议的所有内容都会失败。我曾尝试:

make ARCH=arm CROSS_COMPILE=arm-eCross-eabi- EXTRA_CFLAGS=-fno-pic modules_prepare 
make CROSS_COMPILE=arm-eCross-eabi- EXTRA_CFLAGS=-fno-pic modules_prepare 
make CROSS_COMPILE=arm-eCross-eabi- modules 

但显然他们都失败了正在二号导游,我张贴在这里提到的原因。所以......我在Makefile中修改了第二个指南中的那些人(只是为了避免给出ARCH作为make参数)。 所以我能够以某种方式绕过所有未来的错误,并最终编译如下:

make CROSS_COMPILE=$CCOMPILER 

注1:一个错误我一直得到的是这样的:

/home/unknown/android-source/scripts/mksysmap: line 44: ~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm: No such file or directory 
make: *** [vmlinux] Error 1 

因此,我相信没有考虑到3模块加载的内核选项。但这只是一个假设,因为我从未构建过Linux内核。

注2:我必须注意到,我相信在编译内核时,.confif正在被覆盖。我看到这个输出相当频繁:

.config:120:warning: override: reassigning to symbol MODULES 

我还试图运行make并提示它或menuconfig的时候编辑的配置。然而,没有运气。

幸运的是,我设法通过调用作出这样的时候干脆把确切的路径到Android eabis绕过这个错误:

make CROSS_COMPILE=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- 

最后我管理有一个编译内核:

... 
SYSMAP .tmp_System.map 
OBJCOPY arch/arm/boot/Image 
Kernel: arch/arm/boot/Image is ready 
AS  arch/arm/boot/compressed/head.o 
GZIP arch/arm/boot/compressed/piggy.gz 
AS  arch/arm/boot/compressed/piggy.o 
CC  arch/arm/boot/compressed/misc.o 
LD  arch/arm/boot/compressed/vmlinux 
OBJCOPY arch/arm/boot/zImage 
Kernel: arch/arm/boot/zImage is ready 

所以现在我应该尝试与LiME交叉编译!我不得不说,我试着编译它并玩Makefile,但每次我都得到相同的错误。我已经使用了由Android内核成功交叉编译LiME的人们(在改变内核和编译器路径的同时)在线提供的每个Makefile,但没有运气。所以错误是:

使ARCH = arm CROSS_COMPILE =〜/ android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- -C〜 /机器人源M = /家庭/未知/石灰取证/ SRC模块 化妆[1]:进入目录/home/unknown/android-source' Building modules, stage 2. MODPOST 1 modules WARNING: "vfs_write" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "filp_close" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "filp_open" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_sendmsg" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "memset" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_setsockopt" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_create_kern" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_get_int" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_set_int" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_get_charp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_set_charp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "iomem_resource" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sscanf" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "strcmp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "__memzero" [/home/unknown/lime-forensics/src/lime.ko] undefined! CC /home/unknown/lime-forensics/src/lime.mod.o /home/unknown/lime-forensics/src/lime.mod.c:8:1: error: variable '__this_module' has initializer but incomplete type /home/unknown/lime-forensics/src/lime.mod.c:9:2: error: unknown field 'name' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:9:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:9:2: warning: (near initialization for '__this_module') [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:10:2: error: unknown field 'init' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:10:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:10:2: warning: (near initialization for '__this_module') [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:14:2: error: unknown field 'arch' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:14:10: error: 'MODULE_ARCH_INIT' undeclared here (not in a function) /home/unknown/lime-forensics/src/lime.mod.c:14:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:14:2: warning: (near initialization for '__this_module') [enabled by default] make[2]: *** [/home/unknown/lime-forensics/src/lime.mod.o] Error 1 make[1]: *** [modules] Error 2 make[1]: Leaving directory /家/未知/机器人源” 化妆:*** [默认]错误2

在搜索了一些关于这些错误的信息之后,我得出了内核无效的结论或者与LiME交叉编译的结论。这让我觉得.config正如我之前所说的那样不会被make所考虑。

我真的不明白这个过程的低级别的东西,所以它可能是任何东西。我真的很感谢任何人会花时间阅读我的帖子..我知道它的巨大:/

任何建议,意见非常欢迎!如果我需要更多信息,或者需要修复某些内容,请告诉我。

谢谢大家:)

P.S.对不起,使用愚蠢的标签,但SO不会允许我使用不存在的标签,这将是更合适的,如“linux内存提取器”等。

回答

2

好吧我在LiME的开发者Joe帮助我之后想出了它。

首先,为了避免你的内核的.config覆盖,当你做你应该做的:

make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin goldfish_defconfig 
# then run menuconfig and enable all kernel module loading options and save with ESC 
make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin menuconfig 
# then simply compile 
make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin 

最后,如果你有,你可以补充一点:

EXTRA_CFLAGS=-fno-pic 

当试图交叉编译LiME!

希望这可以帮助别人!

P.S:我使用了android ndk-r8中的eabis。

+0

你是什么意思“EXTRA_CFLAGS = -fno-pic”? ---你的工具链路径是什么? – 2015-09-15 08:23:49