繁体   English   中英

Android启动时insmod内核对象

[英]Android insmod kernel object on boot

我目前正在尝试在引导过程结束时insmod一个内核模块,所以我在init.rc中创建了以下条目:

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具有以下内容:

#!/system/bin/sh
    log -t mytag -p V "Hello World!"
    insmod mymodule.ko mod_parameter=arg

但是当我运行时 - 有时我在logcat -s“mytag”时看不到“Hello World”标签,当然,也没有安装insmodded模块。

什么是延迟插入内核模块的正确方法(它需要在网络启动和/数据安装后进入)。 而且 - 如何将insmod的输出输入日志以便我可以调试? 任何帮助表示赞赏,如有必要,我可以发布更多详细信息。

至少从Froyo到Lollipop,Android initsystem / core / init / buildin.c中实现了insmod 它应该直接在init*.rc文件中工作:

on boot
    insmod /system/lib/modules/your-module.ko.

但是,至少在Lollipop 5.1中,随着SELinux规则的实施,它不再有效。 init没有所需的sys_module权限。 因此,底层的init_module系统调用返回EPERM 这从未报告过任何地方。 唯一的症状是insmod命令现在无法加载模块。

就此开了一个AOSP问题 根据谷歌的说法,这是按预期工作的。 如果您想在强制执行SELinux时使用内核模块(他们强烈反对),您必须自己将所需的SELinux权限添加到init

我不确定你的日志,但是insmod你需要提供模块的确切路径,因为我不认为你将mymodule.ko和init.rc一起驻留在同一个地方。 因此,尝试给出ko文件的完整路径。 通常它位于/lib/modules/youdrivername.ko中

所以先在这里查看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM