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

时间:2013-05-15 10:01:11

标签: android linux module kernel

我能够为Galaxy S4 Kernel 3.4.xx编译内核模块,但在模块插入期间出现以下错误。有人可以说清楚这里缺少的东西。

内核模块是一个普通的helloworld模块,具有基本的init和cleanup函数。

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

1 个答案:

答案 0 :(得分:10)

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

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