簡體   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