![](/img/trans.png)
[英]Hello world kernel module for android & unknown relocation: 27 when 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 init
在system / 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.