我最近买了一个Edimax EW-7811Un WiFi USB 适配器在亚马逊上。一些 OpenBSD 用户报告了它的成功,并且它被列为受其urtwn(4)
支持手册页。
我目前在华硕上网本上运行 OpenBSD 5.5 amd64(上周末下载)。正如预期的那样,无线适配器被识别为urtwn0
,并且当我插入或移除它时,也会如此报告。我/etc/hostname.urtwn0
按照手册页中的描述创建,内容如下:
nwid mynetwork
wpakey mykey
dhcp
其中mynetwork
和mykey
分别是我的 Wifi 网络名称和密码。该网络实际上是 WPA2,这可能会导致其自身的问题,但操作系统似乎甚至无法加载固件。当我执行时sh /etc/netstart urtwn0
,我得到以下输出:
urtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2)
urtwn0: no link ............ sleeping
固件有可能损坏吗?这是我第一次使用适配器。更有可能的是,Edimax 是否更改了固件并破坏了 OpenBSD 当前的urtwn
实现?也有可能,我只是犯了一个愚蠢的错误吗?
答案1
首先,您的hostname.urtwn0
文件看起来不错,如果其中有错误,您会收到完全不同的错误消息。
该消息urtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2)
表明固件未安装在正确的位置:
正如中所解释的loadfirmware(9)
,此函数返回errno
样式错误代码:和errno(2)
解释:
2 ENOENT No such file or directory.
A component of a specified pathname did not exist, or the pathname
was an empty string.
应该有一个文件/etc/firmware/urtwn-rt18192cfwT
供驱动程序加载。1您很可能在树中找不到此文件。
1更多详情请见答案末尾
假设你有一些将盒子连接到互联网的方式:
尝试运行fw_update -v
安装固件并确保文件位于正确的位置并且没有损坏。如果你幸运的话,这就是你需要做的。
如果失败,您可以尝试从以下位置安装固件包或端口(首先阅读此常见问题解答!)。我的本地镜像没有任何urtwn
相关的软件包,因此您可能需要使用 ports 树。
按照中的说明设置端口树常见问题解答,然后make install
以 root 身份运行/usr/ports/sysutils/firmware/urtwn
。
如果您无法将盒子连接到互联网:
固件可以从http://firmware.openbsd.org/firmware-dist/urtwn-1.1p0.tgz
。从那里获取它,将其放在 USB 记忆棒上,然后将其复制到您的 OpenBSD 盒子中。提取存档并将文件移动urtwn-*
到/etc/firmware/
.
如果这有效,那么最好fw_update -v
在有网络连接后运行。这样,系统维护脚本将在必要时对固件进行监控和升级。
如果所有这些都没有帮助,您可能应该在邮件列表。如果你做好功课的话,那里的人通常都很友好并且乐于助人2。
2驱动程序被多次提及[电子邮件受保护]。例如,有一些与 USB 相关的问题,请在发布之前检查是否有与您所看到的内容相关的内容。
添加:
我现在查看了源代码,获得此错误消息的唯一方法是从函数中的urtwn_load_firmware()
atsys/dev/usb/if_urtwn.c
行2194
:
/* Read firmware image from the filesystem. */
if ((sc->chip & (URTWN_CHIP_UMC_A_CUT | URTWN_CHIP_92C)) ==
URTWN_CHIP_UMC_A_CUT)
name = "urtwn-rtl8192cfwU";
else
name = "urtwn-rtl8192cfwT";
if ((error = loadfirmware(name, &fw, &len)) != 0) {
printf("%s: failed loadfirmware of file %s (error %d)\n",
sc->sc_dev.dv_xname, name, error);
return (error);
}
该函数loadfirmware()
(在 中sys/dev/firmload.c
)生成路径/etc/firmware/urtwn-rtl8192cfwT
并尝试将该文件加载到 USB 适配器的内存中。由于找不到该文件,您会收到报告的错误消息。