8

我能够为 Galaxy S4 Kernel 3.4.xx 编译内核模块,但在模块插入过程中出现以下错误。有人可以解释一下这里缺少什么。

内核模块是一个普通的 helloworld 模块,具有基本的初始化和清理功能。

安装错误:

   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
4

1 回答 1

10

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

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

于 2013-05-22T20:40:31.617 回答