Объект ядра Android 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

Но когда я запускаю -- иногда я не вижу тег "Hello World", когда я logcat -s "mytag" и, конечно же, модуль insmodded также не установлен.

Каков правильный способ поздней вставки модуля ядра (он должен войти после того, как сеть будет запущена и / данные будут смонтированы). И еще - как мне получить вывод insmod в журнал, чтобы я мог отлаживать? Любая помощь приветствуется, и я могу опубликовать более подробную информацию, если это необходимо.


person rootkin    schedule 01.04.2014    source источник


Ответы (2)


По крайней мере, со времен Froyo и до сих пор в Lollipop Android init реализует insmod в system/core/init/buildin.c. Предполагается, что он будет работать непосредственно в файле init*.rc:

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

Однако, по крайней мере, в Lollipop 5.1 это больше не работает, поскольку применяются правила SELinux. init не имеет необходимого разрешения sys_module. Поэтому базовый системный вызов init_module возвращает EPERM. Об этом никогда и нигде не сообщается. Единственным симптомом является то, что команды insmod теперь не всегда загружают модуль.

Я открыл по этому поводу проблему AOSP. Согласно Google, это работает так, как задумано. Если вы хотите использовать модули ядра при принудительном использовании SELinux (против чего они настоятельно не рекомендуются), вы должны самостоятельно добавить требуемое разрешение SELinux для init.

person Pekka Nikander    schedule 28.08.2015

Я не уверен насчет вашего журнала, но для insmod вам нужно указать точный путь к модулю, потому что я не думаю, что mymodule.ko будет находиться в том же месте, что и init.rc. Поэтому попробуйте указать полный путь к вашему файлу ko. Обычно он находится в /lib/modules/youdrivername.ko.

так что проверьте сначала здесь.

person Rahul    schedule 02.04.2014