You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android第三方内核厂商模块加载后/sys设备节点未生成求助

内核模块加载后/sys节点未生成问题排查

问题背景

我们正尝试将第三方内核厂商模块集成到Android系统中,因无需在early-init阶段加载,未加入BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD配置,改用.rc文件加载模块。

现有配置

加载用的rc文件(路径:/vendor/etc/init/xx_module.insmod.rc)

on boot
    start xx_module_insmod_sh

service xx_module_insmod_sh /vendor/etc/xx_modules_run.sh sys.all.boot.ready
    class main
    user root
    group root system
    disabled
    oneshot

执行脚本/vendor/etc/xx_modules_run.sh

#!/system/bin/sh
insmod /vendor/lib/modules/xyz.ko
setprop $1 1

现象

  • 开机后lsmod显示xyz.ko已加载,但/sys/devices/virtual/inxx节点未生成
  • 手动通过adb shell执行insmod /vendor/lib/modules/xyz.ko时,/sys/devices/virtual/inxx节点正常生成
  • 无开机阶段dmesg日志,调试受限

排查方向与解决方法

  1. 调整模块加载时机
    on boot触发时机较早,可能模块依赖的内核子系统或硬件节点尚未初始化完成。尝试将触发时机改为系统完全启动后:

    on property:sys.boot_completed=1
        start xx_module_insmod_sh
    

    也可尝试依赖更具体的硬件就绪属性(如厂商提供的硬件初始化完成标识)。

  2. 给脚本添加调试输出
    修改脚本,将操作日志写入文件以便排查:

    #!/system/bin/sh
    sleep 5
    insmod /vendor/lib/modules/xyz.ko > /vendor/xx_module_insmod.log 2>&1
    echo "insmod exit code: $?" >> /vendor/xx_module_insmod.log
    ls -l /sys/devices/virtual/ >> /vendor/xx_module_insmod.log
    setprop $1 1
    

    开机后查看/vendor/xx_module_insmod.log,确认insmod是否有报错,以及加载后/sys/devices/virtual目录的内容。

  3. 检查SELinux权限
    开机阶段SELinux策略可能与手动执行时不同,模块创建节点可能被阻止。可临时关闭SELinux测试:setenforce 0,重启后观察节点是否生成。若确认是SELinux问题,需添加对应规则(如允许模块创建inxx类型节点、调整模块加载上下文)。

  4. 验证模块参数与依赖

    • 确认脚本中insmod是否缺少必要参数,对比手动执行的命令与脚本命令是否完全一致。
    • 检查模块是否依赖其他内核模块,若有,需确保依赖模块在当前模块加载前已完成加载,可在脚本中先加载依赖模块。
  5. 调整service的class属性
    将service的class main改为class late_start,让模块在更晚的阶段启动,避免与其他初始化流程冲突。

内容的提问来源于stack exchange,提问作者aTJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:32:25