启动时的Android insmod内核对象
我目前正在尝试在引导过程结束时对内核模块进行insmod,因此我在init.rc中创建了以下条目:启动时的Android insmod内核对象,android,linux-kernel,kernel,boot,init,Android,Linux Kernel,Kernel,Boot,Init,我目前正在尝试在引导过程结束时对内核模块进行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 l
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
然后在my/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”标记,当然,insmoded模块也没有安装
延迟插入内核模块的正确方式是什么(它需要在网络启动和/或数据挂载后进入)。还有——如何将insmod的输出输入到日志中,以便进行调试?非常感谢您的帮助,如有必要,我可以发布更多详细信息。我不确定您的日志,但对于insmod,您需要提供模块的确切路径,因为我认为您不会让mymodule.ko与init.rc位于同一位置。因此,请尝试给出ko文件的完整路径。 通常它位于/lib/modules/youdrivername.ko中
所以首先在这里检查一下。至少从Froyo开始,Android
init
在中实现了insmod
。它应该直接在init*.rc
文件中工作:
on boot
insmod /system/lib/modules/your-module.ko.
然而,至少在棒棒糖5.1中,它不再有效,因为SELinux规则被强制执行<代码>初始化没有所需的系统模块
权限。因此,底层的init_模块
系统调用返回EPERM
。这从未向任何地方报告过。唯一的症状是insmod
命令现在总是无法加载模块
我打开了一个关于这个的窗口。根据谷歌的说法,这是按计划进行的。如果要在强制使用SELinux时使用内核模块(他们强烈反对),则必须自己将所需的SELinux权限添加到init