首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android启动时的insmod内核对象

Android启动时的insmod内核对象
EN

Stack Overflow用户
提问于 2014-04-02 03:06:04
回答 2查看 6.7K关注 0票数 3

我目前正在尝试在引导过程结束时侵入内核模块,因此我在init.rc中创建了以下条目:

代码语言:javascript
复制
on post_late_start
    start myscript

on nonencrypted
    class_start late_start
    trigger post_late_start

on property:void.decrypt=trigger_restart_framework
    class_start main
    class_start late_start
    trigger post_late_start

service myscript /data/my_sh.sh
    disabled
    oneshot

然后,在我的/data目录中,my_sh.sh包含以下内容:

代码语言:javascript
复制
#!/system/bin/sh
    log -t mytag -p V "Hello World!"
    insmod mymodule.ko mod_parameter=arg

但是当我运行时--当我登录-s "mytag“时,有时我看不到"Hello World”标记,当然,也没有安装未模式化的模块。

延迟插入内核模块的正确方式是什么(它需要在网络启动并挂载/data之后才能插入)。此外,如何将insmod的输出写入日志,以便进行调试?任何帮助是感激的,我可以张贴更多的细节,如有必要。

EN

回答 2

Stack Overflow用户

发布于 2015-08-29 00:32:26

至少从弗罗约到现在的棒棒糖,Android initsystem/core/init/buildin.c中实现了insmod。它应该直接在init*.rc文件中工作:

代码语言:javascript
复制
on boot
    insmod /system/lib/modules/your-module.ko.

然而,至少在棒棒糖5.1中,它不再工作,因为SELinux规则是强制执行的。init没有所需的sys_module权限。因此,底层init_module系统调用返回EPERM。这永远不会报告给任何地方。唯一的症状是insmod命令总是无法加载模块。

我在这上面打开了一个AOSP issue。根据谷歌的说法,这可以达到预期的效果。如果您想在强制使用SELinux时使用内核模块(他们强烈建议您不要这么做),您必须自己向init添加所需的SELinux权限。

票数 5
EN

Stack Overflow用户

发布于 2014-04-02 18:47:52

我不确定你的日志,但要入侵,你需要给出模块的确切路径,因为我认为你不会让mymodule.ko驻留在与init.rc相同的位置。所以尽量给出你的ko文件的完整路径。通常,它位于/lib/modules/youdrivername.ko中

所以先在这里检查一下。

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

https://stackoverflow.com/questions/22794726

复制
相关文章

相似问题

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