Eu finalmente encontrei uma solução funcional para esse problema. A resposta é de GitHub
-
Baixe a fonte do kernel correspondente do kernel.org. Por exemplo: se você tiver
4.4.0-104-generic
download da versão 4.4. Você pode verificar a versão atual do kernel executandouname --kernel-release
-
Do arquivo descompactar apenas a pasta
drivers/net/wireless/mediatek/mt7601u
-
Editar o phy.c. Encontre a função
mt7601u_init_cal
e comente a chamadamt7601u_mcu_calibrate(dev, MCU_CAL_RXIQ, 0);
como no código 1 abaixo -
Encontre a função
mt7601u_phy_recalibrate_after_assoc
e comente a chamadamt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->curr_temp);
como no código 2 abaixo -
Módulo de compilação:
faça os módulos -C / lib / modules / $ (uname -r) / build M = $ (pwd)
-
Remover dispositivo
sudo rmmod mt7601u sudo insmod ./mt7601u.ko
-
Inserir dispositivo
-
Verifique se não há erros em
dmesg
e a interface apareceu no ip link, verifique a estabilidade da conexão. -
Para tornar a alteração persistente até a próxima atualização do kernel : faça backup do módulo original e substitua-o por compilado. Para saber onde está o módulo original, execute
modinfo mt7601u
(veja o nome da string: /lib/modules/_KERNEL_VERSION_/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko ).
Eu tentei este método no Ubuntu 16.04 com o kernel 4.10. Trabalhando sem falhas ...
Código 1:
// ret = mt7601u_mcu_calibrate(dev, MCU_CAL_RXIQ, 0);
// if (ret)
// return ret;
// ret = mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->dpd_temp);
// if (ret)
// return ret;
Código 2:
void mt7601u_phy_recalibrate_after_assoc(struct mt7601u_dev *dev)
{
// mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->curr_temp);
mt7601u_rxdc_cal(dev);
}
Espero que ajude ...