首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LiME编译Android +交叉编译的问题

使用LiME编译Android +交叉编译的问题
EN

Stack Overflow用户
提问于 2014-11-03 18:26:13
回答 1查看 2K关注 0票数 2

顾名思义..。在过去的几天里,我一直在努力成功地编译LiME (Linux ),并将其加载到Android模拟器或物理设备上。为了编译,我使用的是arm-4.6,我现在使用的是x64 14.04 Ubuntu。另外:

代码语言:javascript
复制
unknown@unknown-A15:~$ 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 /SDK/Unis地区版本,或者仅仅是我缺乏经验)我读过的指南是那些(加上另外两个指南,但不会允许我张贴更多的链接。如有需要,我可以在稍后发表评论):

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

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

因此,首先(在下载了金鱼内核源代码之后),我将其添加到/etc/profile中以简化操作:

代码语言:javascript
复制
export CCOMPILER=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
source /etc/profile

那我就做:

代码语言:javascript
复制
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

现在.。我得把内核做好。但在线指南上的所有建议都失败了。我试过:

代码语言:javascript
复制
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做了修改(只是为了避免将其作为一种制造论点的拱形)。因此,我可以绕过所有下一个错误,并最终像这样编译:

代码语言:javascript
复制
make CROSS_COMPILE=$CCOMPILER

注1:我一直遇到的一个错误是:

代码语言:javascript
复制
/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正在被覆盖。我经常看到这样的输出:

代码语言:javascript
复制
.config:120:warning: override: reassigning to symbol MODULES

在运行make和make提示时,或者使用menuconfig时,我也尝试过编辑配置。不过,没有运气。

幸运的是,我设法绕过了这个错误,只需在调用make时,简单地设置到android eabi的确切路径,如下所示:

代码语言:javascript
复制
make CROSS_COMPILE=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-

终于有了一个编译好的内核:

代码语言:javascript
复制
...
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,但是每次我都会遇到相同的错误。我已经使用了每个Makefile在线提供的人谁成功地交叉编译LiME与安卓内核(当然,同时改变内核和编译器路径),但没有运气。因此,错误是:

让CROSS_COMPILE=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- ARCH=arm -C ~/android-source M=/home/未知/lime/src模块make1:进入目录/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/home/未知/android-source‘make:*默认错误2

在对这些错误进行了一些搜索之后,我得出了这样的结论:内核是无效的,或者可以与LiME交叉编译。这让我觉得.config并没有像我之前所说的那样被make考虑在内。

我并不真正理解这个过程的低层次的东西,所以它可以是任何东西。我真的很感谢任何人愿意花时间阅读我的帖子。我知道它的巨大之处

欢迎您提出任何建议、意见!如果你需要更多的信息或者我需要修理,请告诉我。

谢谢大家:)

抱歉使用了愚蠢的标签,但不允许我使用不存在的标签,这将是更合适的,如“linux内存提取器”等。

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 00:24:32

好吧,在莱姆的戴夫乔帮了我之后,我想出来了。

首先,为了避免内核.config在执行时被覆盖,您应该这样做:

代码语言:javascript
复制
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

最后,如果有必要,可以添加以下内容:

代码语言:javascript
复制
EXTRA_CFLAGS=-fno-pic

当尝试交叉编译LiME时!

希望这能帮到别人!

P.S:我使用了AndroidNDK-R8中的eabi。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26720566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档