无法在Android

时间:2015-11-19 15:27:36

标签: android linux

此问题可以标记为重复此问题" 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时,我收到只读文件系统错误。

我遇到固件路径问题的两种方式......任何帮助?

2 个答案:

答案 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.koinsmod运行并且内核加载它时,您的驱动程序wifi.c可能会正确加载它。检查dmesg而不是logcat以查看它是否正确加载。如果没有,请检查驱动程序代码以查看它希望找到固件的位置。