无线硬阻断

无线硬阻断

我有一台联想 Yoga 2 11 英寸,装有 Ubuntu 13.10 (x64)。我的 wifi 有点问题。(蓝牙可以正常工作)

我试过:

sudo rfkill list

地位:

0: ideapad_wlan: Wireless LAN
    Soft blocked: no
    Hard blocked: yes
1: ideapad_bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: yes
2: phy0: wireless LAN
    Soft blocked: no
    Hard blocked: no
3: hci0: bluetooth
    Soft blocked: no
    Hard blocked: no

下一个:

sudo rfkill unblock all
sudo rfkill unblock number

他们只进行软阻止...我的硬阻止仍然处于“是”。

我的 yoga 没有硬件按钮。我试过在 bios 中设置,但没有用。

如果有人有其他解决方案,我将不胜感激。

答案1

因此,听起来您的 IdeaPad Yoga 2 的 rfkill 部分损坏了,就像我的一样。我刚刚想出了如何通过以下方法修复它:

rfkill 由嵌入式 EC 控制,而嵌入式 EC 由 ideapad-laptop 模块驱动。该模块调整了 Yoga 2 上的一些错误位,但幸好不会造成永久性损坏。

EC 本身是一个 ACPI 平台设备,具有枚举命令和属性读写方法。如果您查看本地 Linux 源代码树中的 ideapad-laptop.c,其结构就相当明显。

有 3 个位值得关注:VPCCMD_W_RF:通常打开/关闭 RF 设备?这个位很有趣,因为它没有在 ideapad_laptop.c 中使用,但它的逆元 VPCCMD_R_RF 是。VPCCMD_W_BT:打开/关闭蓝牙设备。VPCCMD_W_WIFI:打开/关闭 wi-fi。

对于每个命令,向它们发送 1 可打开它们的功能,而向它们发送 0 可关闭它们。我怀疑 W_RF 在 yoga 上实际上不起作用。ideapad-laptop 驱动程序将看到其设置,并打开执着的BT 和 WIFI 设备的 rfkill 标志。

我通过编译 ideapad-laptop.c 驱动程序的本地版本解决了这个问题,该驱动程序尽快执行以下命令,然后中止模块:

write_ec_cmd(ideapad_handle, VPCCMD_W_RF, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_BT, 1);
write_ec_cmd(ideapad_handle, VPCCMD_W_WIFI, 1);

之后,我确保将 ideapad-laptop 模块与黑名单 ideapad-laptop 选项保存在 /etc/modprobe.d/whatever.conf 中的文件中。

自此以后我一直工作得很好。

不幸的是,ideapad-laptop 模块已经从一个内核版本更改为另一个内核版本,所以我不能直接转储构建的模块以获取完整的源文件,但如果您在该文件中搜索 write_ec_cmd 字符串,并按照类似以下说明构建该文件的副本https://www.kernel.org/doc/Documentation/kbuild/modules.txt对于构建外部模块来说,你应该没问题。

您可能希望将其放在其中一个 debugfs 文件中,以便可以通过 catting 一个 debugfs 文件来运行它,然后在意外按下 rfkill 按钮之前卸载该模块。

然后你就能够进入 rfkill 列表并看到自己已被解除阻止!

答案2

答案3

BIOS 更新可用帮我解决了。

相关内容