Eu não sou um especialista em kernel do Linux, mas eu tenho esse novo laptop e o WiFi (RT3290LE) não está funcionando. Eu tentei soluções de várias fontes e elas não estão funcionando. Portanto, cabe a mim resolvê-lo e nunca depurei o código do kernel antes. Então aqui vai.
Eu corro Arch linux e o kernel em uso é o 4.3.3-2-ARCH. Quando eu carregar o módulo (que eu tenho do AUR ou de askUbuntu ), estas são as primeiras linhas que aparecem no dmesg:
[ 40.077355] rt3290sta: module license 'unspecified' taints kernel.
[ 40.077359] Disabling lock debugging due to kernel taint
[ 40.079739] register rt2860
As duas primeiras linhas são apenas um aviso, mas eu me pergunto por que é "registrar" o rt2860. As próximas linhas:
[ 40.079912]
=== pAd = ffffc90001c61000, size = 583104 ===
[ 40.079922] <-- RTMPAllocTxRxRingMemory, Status=0
[ 40.079958] <-- RTMPAllocAdapterBlock, Status=0
indica que o módulo rt2860 está sendo carregado porque as funções RTMPAllocTxRxRingMemory
e RTMPAllocAdapterBlock
estão definidas para este módulo. Eu estou supondo que este módulo lida com o meu chip 3290LE, porque há um diretório chamado chips
no diretório src com o arquivo rt3290.c
. De lá tudo parece ok até:
[ 40.079960] pAd->CSRBaseAddress =0xffffc90001400000, csr_addr=0xffffc90001400000!
[ 40.079963] device_id =0x3290
[ 40.079970] CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0x0
[ 40.079978] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000522
[ 40.079979] ==> RTMPWlan 1, bPCIclkOff = 0, WlanFunCtrl.word = 0xff000521
[ 40.080127] <== RTMPWlan 1 bPCIclkOff = 0 pAd->WlanFunCtrl.word = 0xff000523
[ 40.080138] NVM is EFUSE
[ 40.082604] rt2860 0000:09:00.0 enp9s0f0: renamed from ra0
[ 40.103558] NetworkManager[332]: segfault at 8 ip 00000000004ca126 sp 00007ffca7ec45c8 error 4 in NetworkManager[400000+1c5000]
como segfault reportado pelo NetworkManager. A partir daí, nada parece certo:
[ 62.254256] IPv6: ADDRCONF(NETDEV_UP): enp9s0f0: link is not ready
[ 62.254302] MACVersion=0x32900015
[ 62.254304] CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000523
[ 62.254306] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000523
[ 62.254307] ==> RTMPWlan 1, bPCIclkOff = 0, WlanFunCtrl.word = 0xff000521
[ 62.254315] <== RTMPWlan 1 bPCIclkOff = 0 pAd->WlanFunCtrl.word = 0xff000523
[ 62.254322] PllCtrl:0x26c5555
[ 62.255651] RX DESC ffff880085128000 size = 2048
[ 62.255818] RTMP_TimerListAdd: add timer obj ffffc90001182d60!
[ 62.255819] RTMP_TimerListAdd: add timer obj ffffc90001182dd0!
[ 62.255820] RTMP_TimerListAdd: add timer obj ffffc90001182e40!
[ 62.255821] RTMP_TimerListAdd: add timer obj ffffc90001182cf0!
[ 62.255822] RTMP_TimerListAdd: add timer obj ffffc90001182ba0!
[ 62.255823] RTMP_TimerListAdd: add timer obj ffffc90001182c10!
[ 62.255824] RTMP_TimerListAdd: add timer obj ffffc9000114cd20!
[ 62.255825] RTMP_TimerListAdd: add timer obj ffffc9000114cd90!
[ 62.255826] RTMP_TimerListAdd: add timer obj ffffc9000114cc38!
[ 62.255827] RTMP_TimerListAdd: add timer obj ffffc9000113bb30!
[ 62.255828] RTMP_TimerListAdd: add timer obj ffffc9000113bba8!
[ 62.255829] RTMP_TimerListAdd: add timer obj ffffc9000114cb58!
[ 62.255830] RTMP_TimerListAdd: add timer obj ffffc9000114ce20!
[ 62.257657] BBP_R105: BBPR105.field.EnableSIGRemodulation = 1, BBPR105.field.MLDFor2Stream = 0
[ 62.260034] no file read method
[ 62.260037] Read file "/etc/Wireless/RT2860STA/RT2860STA.dat" failed(errCode=-1)!
[ 62.260039] 1. Phy Mode = 0
[ 62.260040] 2. Phy Mode = 0
[ 62.260044] NVM is Efuse and its size =1e[1e0-1fd]
[ 62.261283] 3. Phy Mode = 0
[ 62.261484] AntCfgInit: primary/secondary ant 0/1
CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000523
[ 62.300528] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000533
[ 62.300529] <== RTMPWlan bPCIclkOff = 0, Exit because WLAN EN is already ON
[ 62.303602] RTMPSetPhyMode: channel is out of range, use first channel=1
[ 62.303604] MCS Set = 00 00 00 00 00
[ 62.303608] <==== rt28xx_init, Status=0
[ 62.303663] 0x1300 = 00073200
[ 62.303664] RTMPrt3xSetPCIePowerLinkCtrl.===> 1e
[ 62.348650] CacheVal-OnOff:0, bPCIclkOff:1, WlanFunCtrl:0xff000533
[ 62.348653] ==> RTMPWlan 0, bPCIclkOff = 1, pAd->WlanFunCtrl.word = 0xff000523
[ 62.348654] Set INT_MASK_CSR = 0
[ 62.348658] ==> RTMPWlan 0, bPCIclkOff = 1, WlanFunCtrl.word = 0xff000520
[ 62.348661] <== RTMPWlan 0 bPCIclkOff = 1 pAd->WlanFunCtrl.word = 0xff000520
[ 62.355767] CacheVal-OnOff:0, bPCIclkOff:1, WlanFunCtrl:0xff000520
[ 62.355775] ==> RTMPWlan 0, bPCIclkOff = 1, pAd->WlanFunCtrl.word = 0xff000520
[ 62.355775] Set INT_MASK_CSR = 0
[ 62.355804] ==> RTMPWlan 0, bPCIclkOff = 1, WlanFunCtrl.word = 0xff000520
[ 62.355806] <== RTMPWlan 0 bPCIclkOff = 1 pAd->WlanFunCtrl.word = 0xff000520
[ 62.358438] MACVersion=0x32900015
[ 62.358441] CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000520
[ 62.358447] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000520
[ 62.358448] ==> RTMPWlan 1, bPCIclkOff = 0, WlanFunCtrl.word = 0xff000521
[ 62.358585] <== RTMPWlan 1 bPCIclkOff = 0 pAd->WlanFunCtrl.word = 0xff000523
[ 62.358592] PllCtrl:0x2695555
[ 62.359939] RX DESC ffff880085128000 size = 2048
[ 62.360119] RTMP_TimerListAdd: add timer obj ffffc90001182d60!
[ 62.360120] RTMP_TimerListAdd: add timer obj ffffc90001182dd0!
[ 62.360121] RTMP_TimerListAdd: add timer obj ffffc90001182e40!
[ 62.360122] RTMP_TimerListAdd: add timer obj ffffc90001182cf0!
[ 62.360123] RTMP_TimerListAdd: add timer obj ffffc90001182ba0!
[ 62.360124] RTMP_TimerListAdd: add timer obj ffffc90001182c10!
[ 62.360125] RTMP_TimerListAdd: add timer obj ffffc9000114cd20!
[ 62.360126] RTMP_TimerListAdd: add timer obj ffffc9000114cd90!
[ 62.360126] RTMP_TimerListAdd: add timer obj ffffc9000114cc38!
[ 62.360127] RTMP_TimerListAdd: add timer obj ffffc9000113bb30!
[ 62.360128] RTMP_TimerListAdd: add timer obj ffffc9000113bba8!
[ 62.360129] RTMP_TimerListAdd: add timer obj ffffc9000114cb58!
[ 62.360131] RTMP_TimerListAdd: add timer obj ffffc9000114ce20!
[ 62.361957] BBP_R105: BBPR105.field.EnableSIGRemodulation = 1, BBPR105.field.MLDFor2Stream = 0
[ 62.362678] no file read method
[ 62.362679] Read file "/etc/Wireless/RT2860STA/RT2860STA.dat" failed(errCode=-1)!
[ 62.362680] 1. Phy Mode = 0
[ 62.362680] 2. Phy Mode = 0
[ 62.362684] NVM is Efuse and its size =1e[1e0-1fd]
[ 62.363940] 3. Phy Mode = 0
[ 62.364137] AntCfgInit: primary/secondary ant 0/1
CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000523
[ 62.382877] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000533
[ 62.382878] <== RTMPWlan bPCIclkOff = 0, Exit because WLAN EN is already ON
[ 62.385928] MCS Set = 00 00 00 00 00
[ 62.385932] <==== rt28xx_init, Status=0
[ 62.385987] 0x1300 = 00073200
[ 62.385988] RTMPrt3xSetPCIePowerLinkCtrl.===> 1e
[ 62.430888] CacheVal-OnOff:0, bPCIclkOff:1, WlanFunCtrl:0xff000533
[ 62.430891] ==> RTMPWlan 0, bPCIclkOff = 1, pAd->WlanFunCtrl.word = 0xff000523
[ 62.430892] Set INT_MASK_CSR = 0
[ 62.430896] ==> RTMPWlan 0, bPCIclkOff = 1, WlanFunCtrl.word = 0xff000520
[ 62.430899] <== RTMPWlan 0 bPCIclkOff = 1 pAd->WlanFunCtrl.word = 0xff000520
[ 62.437938] CacheVal-OnOff:0, bPCIclkOff:1, WlanFunCtrl:0xff000520
[ 62.437944] ==> RTMPWlan 0, bPCIclkOff = 1, pAd->WlanFunCtrl.word = 0xff000520
[ 62.437945] Set INT_MASK_CSR = 0
[ 62.437972] ==> RTMPWlan 0, bPCIclkOff = 1, WlanFunCtrl.word = 0xff000520
[ 62.437975] <== RTMPWlan 0 bPCIclkOff = 1 pAd->WlanFunCtrl.word = 0xff000520
[ 62.440460] MACVersion=0x32900015
[ 62.440463] CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000520
[ 62.440470] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000520
[ 62.440471] ==> RTMPWlan 1, bPCIclkOff = 0, WlanFunCtrl.word = 0xff000521
[ 62.440606] <== RTMPWlan 1 bPCIclkOff = 0 pAd->WlanFunCtrl.word = 0xff000523
[ 62.440614] PllCtrl:0x2695555
[ 62.441942] RX DESC ffff880085128000 size = 2048
[ 62.442166] RTMP_TimerListAdd: add timer obj ffffc90001182d60!
[ 62.442168] RTMP_TimerListAdd: add timer obj ffffc90001182dd0!
[ 62.442169] RTMP_TimerListAdd: add timer obj ffffc90001182e40!
[ 62.442170] RTMP_TimerListAdd: add timer obj ffffc90001182cf0!
[ 62.442171] RTMP_TimerListAdd: add timer obj ffffc90001182ba0!
[ 62.442172] RTMP_TimerListAdd: add timer obj ffffc90001182c10!
[ 62.442173] RTMP_TimerListAdd: add timer obj ffffc9000114cd20!
[ 62.442174] RTMP_TimerListAdd: add timer obj ffffc9000114cd90!
[ 62.442175] RTMP_TimerListAdd: add timer obj ffffc9000114cc38!
[ 62.442176] RTMP_TimerListAdd: add timer obj ffffc9000113bb30!
[ 62.442177] RTMP_TimerListAdd: add timer obj ffffc9000113bba8!
[ 62.442178] RTMP_TimerListAdd: add timer obj ffffc9000114cb58!
[ 62.442179] RTMP_TimerListAdd: add timer obj ffffc9000114ce20!
[ 62.444027] BBP_R105: BBPR105.field.EnableSIGRemodulation = 1, BBPR105.field.MLDFor2Stream = 0
[ 62.444745] no file read method
[ 62.444746] Read file "/etc/Wireless/RT2860STA/RT2860STA.dat" failed(errCode=-1)!
[ 62.444747] 1. Phy Mode = 0
[ 62.444748] 2. Phy Mode = 0
[ 62.444752] NVM is Efuse and its size =1e[1e0-1fd]
[ 62.445990] 3. Phy Mode = 0
[ 62.446190] AntCfgInit: primary/secondary ant 0/1
CacheVal-OnOff:1, bPCIclkOff:0, WlanFunCtrl:0xff000523
[ 62.464934] ==> RTMPWlan 1, bPCIclkOff = 0, pAd->WlanFunCtrl.word = 0xff000533
[ 62.464935] <== RTMPWlan bPCIclkOff = 0, Exit because WLAN EN is already ON
[ 62.467992] MCS Set = 00 00 00 00 00
[ 62.467996] <==== rt28xx_init, Status=0
[ 62.468051] 0x1300 = 00073200
[ 62.468052] RTMPrt3xSetPCIePowerLinkCtrl.===> 1e
[ 62.514023] IPv6: ADDRCONF(NETDEV_UP): enp8s0: link is not ready
[ 62.524133] BUG: unable to handle kernel paging request at 00007ffcc2728510
[ 62.524182] IP: [<ffffffffa07dd1d0>] rt_ioctl_siwpmksa+0x90/0x150 [rt3290sta]
[ 62.524236] PGD 95a1a067 PUD 959a5067 PMD 95a20067 PTE 800000008e8c3067
[ 62.524282] Oops: 0001 [#1] PREEMPT SMP
[ 62.524311] Modules linked in: cfg80211 rt3290sta(PO) fuse snd_hda_codec_hdmi joydev mousedev intel_rapl iosf_mbi x86_pkg_temp_thermal nls_iso8859_1 intel_powerclamp nls_cp437 coretemp hp_wmi sparse_keymap uvcvideo rfkill videobuf2_vmalloc vfat videobuf2_memops fat videobuf2_core iTCO_wdt iTCO_vendor_support kvm v4l2_common evdev input_leds videodev psmouse mac_hid media serio_raw pcspkr i915 rtsx_pci_ms r8169 memstick mii drm_kms_helper snd_hda_codec_realtek snd_soc_rt286 fan thermal wmi snd_soc_rl6347a i2c_hid drm snd_hda_codec_generic snd_soc_core snd_compress snd_pcm_dmaengine battery ac dw_dmac snd_soc_sst_acpi snd_hda_intel hid dw_dmac_core ac97_bus video gpio_lynxpoint intel_gtt snd_hda_codec i2c_designware_platform 8250_dw spi_pxa2xx_platform syscopyarea mei_me sysfillrect i2c_designware_core
[ 62.524820] snd_hda_core sysimgblt hp_wireless snd_hwdep fjes acpi_pad snd_pcm fb_sys_fops snd_timer button i2c_algo_bit snd lpc_ich mei soundcore i2c_i801 shpchp intel_pch_thermal processor sch_fq_codel ip_tables x_tables ext4 crc16 mbcache jbd2 jitterentropy_rng sha256_ssse3 sha256_generic hmac drbg ansi_cprng algif_skcipher af_alg dm_crypt dm_mod sd_mod rtsx_pci_sdmmc atkbd libps2 crct10dif_pclmul crc32_pclmul crc32c_intel ahci libahci aesni_intel rtsx_pci aes_x86_64 lrw gf128mul glue_helper libata ablk_helper cryptd xhci_pci ehci_pci ehci_hcd xhci_hcd usbcore scsi_mod usb_common i8042 serio sdhci_acpi sdhci led_class mmc_core
[ 62.525219] CPU: 0 PID: 807 Comm: wpa_supplicant Tainted: P O 4.3.3-2-ARCH #1
[ 62.525267] Hardware name: Hewlett-Packard HP 240 G3 Notebook PC/2334, BIOS F.36 12/18/2014
[ 62.525315] task: ffff8801ca4ca940 ti: ffff8800959fc000 task.ti: ffff8800959fc000
[ 62.525353] RIP: 0010:[<ffffffffa07dd1d0>] [<ffffffffa07dd1d0>] rt_ioctl_siwpmksa+0x90/0x150 [rt3290sta]
[ 62.525416] RSP: 0018:ffff8800959ffc58 EFLAGS: 00010297
[ 62.525447] RAX: 0000000000000000 RBX: 00007ffcc2728510 RCX: 0000000000000000
[ 62.525488] RDX: 0000000000005009 RSI: 0000000000000000 RDI: ffffc90001131000
[ 62.525528] RBP: ffff8800959ffca0 R08: ffff8801d51e6600 R09: 0000000000000000
[ 62.525568] R10: 0000000000000036 R11: ffffffffa07dd140 R12: 0000000000000000
[ 62.527329] R13: ffffc90001131000 R14: ffff8801bad07000 R15: ffffffffa07dd140
[ 62.528767] FS: 00007f1a34ef57c0(0000) GS:ffff8801dec00000(0000) knlGS:0000000000000000
[ 62.530182] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 62.531316] CR2: 00007ffcc2728510 CR3: 0000000098bdc000 CR4: 00000000003406f0
[ 62.532354] Stack:
[ 62.533356] ffff8801d809bb80 ffffffff811ba7a2 ffff880095b1be00 ffffffff8156de65
[ 62.534585] 00000000226f393b ffff8801bd92d480 0000000000000000 ffffffff81676e48
[ 62.535754] ffff8800959ffe20 ffff8800959ffd28 ffffffff8156de93 0000000000000000
[ 62.536924] Call Trace:
[ 62.537973] [<ffffffff811ba7a2>] ? __kmalloc+0x212/0x270
[ 62.539176] [<ffffffff8156de65>] ? ioctl_standard_iw_point+0x105/0x340
[ 62.540337] [<ffffffff8156de93>] ioctl_standard_iw_point+0x133/0x340
[ 62.541475] [<ffffffff811f8304>] ? mntput+0x24/0x40
[ 62.542573] [<ffffffff8156e2eb>] ioctl_standard_call+0x8b/0xe0
[ 62.543565] [<ffffffff8127a0c8>] ? security_capable+0x48/0x60
[ 62.544666] [<ffffffff8156ef60>] ? iw_handler_get_private+0x60/0x60
[ 62.545775] [<ffffffff8156e260>] ? call_commit_handler.part.3+0x30/0x30
[ 62.546818] [<ffffffff8156e1f4>] wireless_process_ioctl+0x154/0x190
[ 62.547797] [<ffffffff8156e548>] wext_handle_ioctl+0x78/0xd0
[ 62.548858] [<ffffffff8149a4d9>] dev_ioctl+0x2a9/0x590
[ 62.550045] [<ffffffff81463906>] sock_ioctl+0x126/0x290
[ 62.551139] [<ffffffff8127b3fe>] ? security_file_permission+0xae/0xc0
[ 62.552223] [<ffffffff811eb5f5>] do_vfs_ioctl+0x295/0x480
[ 62.553516] [<ffffffff811d98f3>] ? vfs_read+0x83/0x120
[ 62.554877] [<ffffffff811eb859>] SyS_ioctl+0x79/0x90
[ 62.556196] [<ffffffff81583d2e>] entry_SYSCALL_64_fastpath+0x12/0x71
[ 62.557486] Code: bc 9c ff ff ff eb 75 48 85 db 0f 84 9d 00 00 00 48 83 3d 33 e0 06 00 02 41 89 c4 76 0e 48 83 3d 26 f9 06 00 00 0f 84 a3 00 00 00 <8b> 03 83 f8 03 74 69 83 f8 02 74 6d 83 f8 01 0f 94 c0 0f b6 c0
[ 62.560455] RIP [<ffffffffa07dd1d0>] rt_ioctl_siwpmksa+0x90/0x150 [rt3290sta]
[ 62.562150] RSP <ffff8800959ffc58>
[ 62.563890] CR2: 00007ffcc2728510
[ 62.572067] ---[ end trace 174c5d19ef38ee89 ]---
[ 70.478202] RT3290_AsicTxAlcGetAutoAgcOffset: Incorrect desired TSSI or current TSSI
[ 74.482274] RT3290_AsicTxAlcGetAutoAgcOffset: Incorrect desired TSSI or current TSSI
[ 78.486201] RT3290_AsicTxAlcGetAutoAgcOffset: Incorrect desired TSSI or current TSSI
[ 82.491242] RT3290_AsicTxAlcGetAutoAgcOffset: Incorrect desired TSSI or current TSSI
Noto que essas duas linhas aparecem três vezes antes do rastreamento da chamada:
[ 62.260034] no file read method
[ 62.260037] Read file "/etc/Wireless/RT2860STA/RT2860STA.dat" failed(errCode=-1)!
Eles são impressos pelo código fornecido abaixo em RTMPReadParametersHook () (linha 96 de src / os / linux / rt_profile.c):
retval =RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE);
if (retval > 0)
{
RTMPSetProfileParameters(pAd, buffer);
retval = NDIS_STATUS_SUCCESS;
}
else
DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval));
porque a função abaixo indicada retorna -1:
1049int RtmpOSFileRead(RTMP_OS_sFD osfd, char *pDataPtr, int readLen)
1050{
1051 // The object must have a read method
1052 if (osfd->f_op && osfd->f_op->read)
1053 {
1054 return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos);
1055 }
1056 else
1057 {
1058 DBGPRINT(RT_DEBUG_ERROR, ("no file read method\n"));
1059 return -1;
1060 }
1061}
O resultado final do carregamento do módulo é que todo o sistema se torna instável. Eu não obtenho nenhuma rede, nenhum comando envolvendo o sudo funciona, não consigo parar esses comandos com Ctrl-C / Z e o DE travando. Além disso, o desligamento do sistema leva uma eternidade.
Como resolvo isso e faço o Wi-Fi funcionar?
Desculpas para a pergunta muito, mas qualquer ajuda apreciada. Eu não posso viver sem WiFi! : - (
Atualização: Pesquisando um pouco mais sobre o rastreamento de chamadas, as duas linhas abaixo:
[ 40.905333] BUG: unable to handle kernel paging request at 00007ffe7426fb20
[ 40.905385] IP: [<ffffffffa09ac1d0>] rt_ioctl_siwpmksa+0x90/0x150 [rt3290sta]
Após pesquisar, este relatório de bug obsoleto fechado.
Atualização 2: apresentei um relatório de bug sobre o travamento do NetworkManager aqui . Como sugerido lá, eu reinstalei o NetworkManager com símbolos de depuração e tentei obter um rastreamento. Então eles consertaram o bug no NM, mas enquanto isso eu conversava com os desenvolvedores. Segundo eles, o driver do fornecedor do ralink não está suportando corretamente o nl80211, nem suporta o intervalo WEXT, o último levando ao crash NM. Segundo eles, eles examinaram o código do driver e dizem que o driver está além da ajuda e que o código literalmente parece horrível. Ele também acrescentou que eu poderia tentar fazer com que o nm ignorasse o driver e tentasse configurá-lo estaticamente com o iw ou o iwconfig.
Resultado final: o NM está ignorando o driver após a correção do bug, portanto, não há nenhum erro imediatamente ao carregar o driver. Mas quando eu executo wifi-menu
, recebo o mesmo erro.