我目前正在尝试在引导过程结束时侵入内核模块,因此我在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但是当我运行时--当我登录-s "mytag“时,有时我看不到"Hello World”标记,当然,也没有安装未模式化的模块。
延迟插入内核模块的正确方式是什么(它需要在网络启动并挂载/data之后才能插入)。此外,如何将insmod的输出写入日志,以便进行调试?任何帮助是感激的,我可以张贴更多的细节,如有必要。
发布于 2015-08-29 00:32:26
至少从弗罗约到现在的棒棒糖,Android init在system/core/init/buildin.c中实现了insmod。它应该直接在init*.rc文件中工作:
on boot
insmod /system/lib/modules/your-module.ko.然而,至少在棒棒糖5.1中,它不再工作,因为SELinux规则是强制执行的。init没有所需的sys_module权限。因此,底层init_module系统调用返回EPERM。这永远不会报告给任何地方。唯一的症状是insmod命令总是无法加载模块。
我在这上面打开了一个AOSP issue。根据谷歌的说法,这可以达到预期的效果。如果您想在强制使用SELinux时使用内核模块(他们强烈建议您不要这么做),您必须自己向init添加所需的SELinux权限。
发布于 2014-04-02 18:47:52
我不确定你的日志,但要入侵,你需要给出模块的确切路径,因为我认为你不会让mymodule.ko驻留在与init.rc相同的位置。所以尽量给出你的ko文件的完整路径。通常,它位于/lib/modules/youdrivername.ko中
所以先在这里检查一下。
https://stackoverflow.com/questions/22794726
复制相似问题