大家好~
我在移植wifi驱动到Android 8.0,目前遇到一个问题:加载驱动失败。具体错误是init_module()失败,错误码为-1(Operation not permitted);打印LOG发现传入的参数(ko文件路径、文件大小、insmod参数)并没有错。权限的话,我已经是root而且setenforce 0 了。
我是在命令行中root用户使用 # svc wifi enable 来打开WIFI的(因为LCD屏还不亮。。)
操作过程:
1. 切换到root
2. # setenforce 0
3. # svc wifi enable
代码路径:frameworks/opt/net/wifi/libwifi_hal/wifi_hal_commom.cpp
然而,我使用 # insmod /vendor/lib/modules/wlan.ko是能够成功加载驱动的(root用户)。
根据
Linux man page 关于init_module()的说明:
EPERM (就是-1 Operation not permitted)
The caller was not privileged (did not have the CAP_SYS_MODULE capability), or module loading is disabled (see /proc/sys/kernel/modules_disabled in proc(5)).
我这里module loading 没有disable,而这个CAP_SYS_MODULE是如何确认啊??
在logcat中看到调用init_module()的是"android.hardware.wifi@1.0-service",它对应的user是“wifi”,如何确认/添加CAP_SYS_MODULE呢?
请问,大家对这个问题有什么建议吗?啊~我研究了好几天,也没有解决掉这个init_module()的问题……Orz
谢谢~