insmod:init_module失败(Exec格式错误)

我能够为Galaxy S4 Kernel 3.4.xx编译内核模块,但在模块插入过程中出现以下错误。 有人可以请说明一下这里缺less的东西。

内核模块是一个纯粹的helloworld模块,具有基本的初始化和清理function。

insmod错误:

insmod /data/local/tmp/testHello.ko insmod: init_module '/data/local/tmp/testHello.ko' failed (Exec format error) 

Dmesg日志

  <4>[ 2127.554107] TIMA: lkmauth--launch the tzapp to check kernel module; module len is 71334 <4>[ 2127.554168] TIMA: lkmauth -- hdr before kreq is : e337b000 <4>[ 2127.554199] TIMA: lkmauth--send cmd (lkmauth) cmdlen(304:320), rsplen(264:320) id 0x00050000, req (0xE352A000), rsp(0xE352A140), module_start_addr(0xE337B000) module_len 71334 <3>[ 2127.581909] TIMA: lkmauth--verification failed -1 <4>[ 2127.582183] TIMA: MSG=lkm_modified; result (TIMA_RESULT=MSG=lkm_modified;) <6>[2129.417541] [debug_wake_locks]active wake lock msm_otg 

您的答案就在dmesg日志中:S4内核已经过硬化,只接受通过身份验证(即数字签名)的模块。 你的编译模块没有签名,所以init_module失败(虽然可以说返回代码更好–exec格式错误通常意味着ELF格式不正确,这在技术上是不成立的)。

使用mod信息(在Linux上)检查S4(/ system / lib / modules或/ vendor / lib / modules)附带的模块,您将看到带有签名的ELF部分。 这是主流Linux在3.7版本中添加的功能。