加载Android内核模块时出错(module_layout没有符号版本)

时间:2019-02-20 20:14:59

标签: android kernel kernel-module motorola android-kernel

我正在尝试为Android加载内核模块。

首先,我从目标设备上下载了MotoG5的内核源代码:https://github.com/MotorolaMobilityLLC/kernel-msm。此外,我还添加了这些文件,其中包含用于编译内核的f2fs(可在https://github.com/MotorolaMobilityLLC/motorola-kernel处找到)。我能够使用以下命令来编译内核:

export CROSS_COMPILE=/media/hero/HDD1/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
export ARCH=arm 
make clean && make mrproper
make msm8937-perf_defconfig
make -j4 
make modules // to generate Module.symvers which can be used later to compile a kernel module.

然后,我编写了一些小的内核代码,如下所示:

#include "linux/module.h"
#include "linux/kernel.h"
//replace the "" with angular brackets
int init_module(void)
{
        printk(KERN_INFO "Hello android kernel...\n");
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "Goodbye android kernel...\n");
}

android_module.c

obj-m += android_module.o
KDIR := /media/hero/HDD1/k3/kmsm/
PWD := $(shell pwd)
ARCH=arm
CROSS_COMPILE=/media/hero/HDD1/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-

all:
        make -C $(KDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules
clean:
        $(MAKE) -C $(KDIR) M=$(PWD) clean

Makefile

在那之后,我能够成功编译内核,而没有任何警告。以下是有关生成的内核模块的vermagic和file命令输出的一些信息。

root@root:/hello3# modinfo android_module.ko
filename:       /media/hero/HDD1/hello3/android_module.ko
depends:
vermagic:       3.18.31-perf SMP preempt mod_unload modversions ARMv7 p2v8


root@root:/hello3# file android_module.ko
android_module.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=a9bcb514badd8f5799151e0ee4993fd73302175c, with debug_info, not stripped

我将这些信息与手机中的现有内核模块进行了比较,它们完全匹配。这是现有可加载内核的示例。

modinfo *******.ko
filename:       *******.ko
license:        GPL
description:    Input driver event debug module
author:         Vojtech Pavlik <vojtech@ucw.cz>
alias:          input:b*v*p*e*-e*k*r*a*m*l*s*f*w*
depends:
intree:         Y
vermagic:       3.18.31-perf SMP preempt mod_unload modversions ARMv7 p2v8


file *******.ko
evbug.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=b14c49bf595842f41a31b9a5d0e66bc8523703a8, with debug_info, not stripped

现在。问题是,每当我加载模块时,我都会收到此消息

insmod: failed to load android_module.ko: Exec format error

此外,dmesg显示以下内容:

android_module: no symbol version for module_layout

请注意,一些在线答案表明我应该在编译内核模块之前生成Module.symvers,因此我做到了这一点,并且在编译内核模块时,我没有遇到关于缺少Module.symvers的任何错误。

任何想法,为什么不能加载此模块?请让我知道。

此致

0 个答案:

没有答案