此问题可以标记为重复此问题" kernel module cannot find firmware file on Android device; where should it be?"但由于我无法解决我的问题,我想发布这个问题。
我在Android LOllipop和我的内核模块中工作,将wifi模块8192du.ko复制到/ system / lib / modules文件夹,并将固件rtl81992dufw.bin复制到" / system / etc / firmware / rtlwifi /"根据system / core / init / devices.c文件。
但是我得到了" E / WifiHW(161):无法打开wlan fw路径参数(没有这样的文件或目录)"错误。
int wifi_change_fw_path(const char *fwpath){
int len;
int fd;
int ret = 0;
if (!fwpath)
return ret;
fd = TEMP_FAILURE_RETRY(open(WIFI_DRIVER_FW_PATH_PARAM, O_WRONLY));
if (fd < 0) {
ALOGE("Failed to open wlan fw path param (%s)", strerror(errno));
return -1;
}
len = strlen(fwpath) + 1;
if (TEMP_FAILURE_RETRY(write(fd, fwpath, len)) != len) {
ALOGE("Failed to write wlan fw path param (%s)", strerror(errno));
ret = -1;
}
close(fd);
return ret;}
这是我的wifi.c代码,我已将WIFI_DRIVER_FW_PATH_PARAM宏定义为&#34; / system / etc / firmware / rtlwifi /&#34;。
当我按照内核中的驱动程序Makefile将固件复制到/ system / lib / firmware / rtlwifi / path时,我收到只读文件系统错误。
我遇到固件路径问题的两种方式......任何帮助?
答案 0 :(得分:0)
所以你说那个
#define WIFI_DRIVER_FW_PATH_PARAM "/system/etc/firmware/rtlwifi/"
您作为open()的路径传递。因此,您尝试打开文件夹,而不是文件。
答案 1 :(得分:0)
该错误消息指的是另一个问题。
在我的hardware/libhardware_legacy/wifi/wifi.c
我有:
#ifndef WIFI_DRIVER_FW_PATH_PARAM
#define WIFI_DRIVER_FW_PATH_PARAM "/sys/module/wlan/parameters/fwpath"
#endif
我认为那个sysfs条目允许固件改变状态。更多信息:https://www.reddit.com/r/oneplusone/comments/3c4nen/debian_running_on_oneplus_one_lxde_desktop/
wcnss_service在所有这些疯狂之后运行良好而且没有更多的错误 内核日志。现在启动WiFi卡,经过一些更多的试用和 错误和运气,事实证明你必须写“sta” / sys / module / wlan / parameters / fwpath echo sta&gt; / sys / module / wlan / parameters / fwpath然后是WiFi接口 使用ifconfig -a可见。 在我的例子中,我的驱动程序加载为
/sys/module/rtl8192cu/parameters
,但那里没有fwpath参数。我还在试图弄清楚如何处理这种情况。
至于rtl81992dufw.bin
,当8192du.ko
由insmod
运行并且内核加载它时,您的驱动程序wifi.c
可能会正确加载它。检查dmesg而不是logcat以查看它是否正确加载。如果没有,请检查驱动程序代码以查看它希望找到固件的位置。