Como encontrar e controlar a placa wlan com setpci?

3

Existem algumas funções / teclas de atalho no meu laptop que não funcionam como controlar o brilho ou ligar / desligar a placa wlan. Felizmente para mim eu sei controlar o brilho com setpci ex: setpci -s 00:02.0 F4.B=55 onde 55 é o nível de brilho desejado.

Então a questão é: como posso encontrar meu cartão wlan e fazer com que ele seja ativado / desativado?

Esta é a saída do comando dumpregs:

cap pos w name
     00 W VENDOR_ID
     02 W DEVICE_ID
     04 W COMMAND
     06 W STATUS
     08 B REVISION
     09 B CLASS_PROG
     0a W CLASS_DEVICE
     0c B CACHE_LINE_SIZE
     0d B LATENCY_TIMER
     0e B HEADER_TYPE
     0f B BIST
     10 L BASE_ADDRESS_0
     14 L BASE_ADDRESS_1
     18 L BASE_ADDRESS_2
     1c L BASE_ADDRESS_3
     20 L BASE_ADDRESS_4
     24 L BASE_ADDRESS_5
     28 L CARDBUS_CIS
     2c L SUBSYSTEM_VENDOR_ID
     2e W SUBSYSTEM_ID
     30 L ROM_ADDRESS
     3c B INTERRUPT_LINE
     3d B INTERRUPT_PIN
     3e B MIN_GNT
     3f B MAX_LAT
     18 B PRIMARY_BUS
     19 B SECONDARY_BUS
     1a B SUBORDINATE_BUS
     1b B SEC_LATENCY_TIMER
     1c B IO_BASE
     1d B IO_LIMIT
     1e W SEC_STATUS
     20 W MEMORY_BASE
     22 W MEMORY_LIMIT
     24 W PREF_MEMORY_BASE
     26 W PREF_MEMORY_LIMIT
     28 L PREF_BASE_UPPER32
     2c L PREF_LIMIT_UPPER32
     30 W IO_BASE_UPPER16
     32 W IO_LIMIT_UPPER16
     38 L BRIDGE_ROM_ADDRESS
     3e W BRIDGE_CONTROL
     10 L CB_CARDBUS_BASE
     14 W CB_CAPABILITIES
     16 W CB_SEC_STATUS
     18 B CB_BUS_NUMBER
     19 B CB_CARDBUS_NUMBER
     1a B CB_SUBORDINATE_BUS
     1b B CB_CARDBUS_LATENCY
     1c L CB_MEMORY_BASE_0
     20 L CB_MEMORY_LIMIT_0
     24 L CB_MEMORY_BASE_1
     28 L CB_MEMORY_LIMIT_1
     2c W CB_IO_BASE_0
     2e W CB_IO_BASE_0_HI
     30 W CB_IO_LIMIT_0
     32 W CB_IO_LIMIT_0_HI
     34 W CB_IO_BASE_1
     36 W CB_IO_BASE_1_HI
     38 W CB_IO_LIMIT_1
     3a W CB_IO_LIMIT_1_HI
     40 W CB_SUBSYSTEM_VENDOR_ID
     42 W CB_SUBSYSTEM_ID
     44 L CB_LEGACY_MODE_BASE
  01 00 - CAP_PM
  02 00 - CAP_AGP
  03 00 - CAP_VPD
  04 00 - CAP_SLOTID
  05 00 - CAP_MSI
  06 00 - CAP_CHSWP
  07 00 - CAP_PCIX
  08 00 - CAP_HT
  09 00 - CAP_VNDR
  0a 00 - CAP_DBG
  0b 00 - CAP_CCRC
  0c 00 - CAP_HOTPLUG
  0d 00 - CAP_SSVID
  0e 00 - CAP_AGP3
  0f 00 - CAP_SECURE
  10 00 - CAP_EXP
  11 00 - CAP_MSIX
  12 00 - CAP_SATA
  13 00 - CAP_AF
0001 00 - ECAP_AER
0002 00 - ECAP_VC
0003 00 - ECAP_DSN
0004 00 - ECAP_PB
0005 00 - ECAP_RCLINK
0006 00 - ECAP_RCILINK
0007 00 - ECAP_RCECOLL
0008 00 - ECAP_MFVC
000a 00 - ECAP_RBCB
000b 00 - ECAP_VNDR
000d 00 - ECAP_ACS
000e 00 - ECAP_ARI
000f 00 - ECAP_ATS
0010 00 - ECAP_SRIOV
    
por alex 17.11.2012 / 21:31

1 resposta

2

Em primeiro lugar, usar setpci para definir diretamente os registros e estados de hardware pode ser arriscado apenas por causa do acesso de hardware de nível muito baixo, a menos que você saiba que foi tentado antes com a configuração de brilho mencionada.

Em segundo lugar, como não conheço seu modelo de laptop e, portanto, suas especificações técnicas de componentes, este post é apenas uma introdução sobre como encontrar informações com lspci e setpci , que você pode adaptar às suas necessidades.

Em terceiro lugar, todos os comandos são bons para serem executados, pois eles simplesmente consultam o dispositivo; somente setpci executado com o sudo alterará realmente a configuração de um dispositivo.

(Se você quiser apenas soltar a conexão em vez de realmente desligar o dispositivo de hardware, você pode selecionar o seu dispositivo wlan e executar sudo iwconfig wlan0 down . Isso é muito mais fácil do que tentar habilitar / desabilitar o dispositivo de hardware com setpci .)

Primeiro, execute lspci para encontrar os endereços de todo o seu hardware; por exemplo, meu controlador de ethernet é

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

Agora use o endereço / domínio do barramento ( 02:00:0 ) e execute lspci novamente com

sudo lspci -s 02:00.0 -nnvvxxx

e você obterá a leitura completa das informações disponíveis e um dump hexadecimal do espaço de configuração PCI:

02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ [10ec:8139] (rev 10)
    Subsystem: Billionton Systems Inc LNR-100 Family 10/100 Base-TX Ethernet [14cb:0200]
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 64 (8000ns min, 16000ns max)
    Interrupt: pin A routed to IRQ 17
    Region 0: I/O ports at 2400 [size=256]
    Region 1: Memory at 44000000 (32-bit, non-prefetchable) [size=512]
    Capabilities: [50] Power Management version 2
        Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: 8139too
    Kernel modules: 8139too, 8139cp
00: ec 10 39 81 07 00 90 02 10 00 00 02 00 40 00 00
10: 01 24 00 00 00 00 00 44 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 02 01 00 00 cb 14 00 02
30: 00 00 00 00 50 00 00 00 00 00 00 00 11 01 20 40
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

O lixo hexadecimal continua, mas eu o reduzi; você precisará de especificações técnicas adicionais do seu dispositivo para que esses valores tenham algum significado.

Agora, com setpci --dumpregs , você pode obter informações sobre os registros gerais de hardware e usar setpci para consultar o endereço do dispositivo ( 02:00.0 ) com, por exemplo, um desses registros:

setpci -s 02:00.0 STATUS

para retornar um valor. Isso pode ser repetido com os outros registros na lista, mas, novamente, você precisa consultar informações técnicas detalhadas em seus dispositivos ao mesmo tempo.

Em resumo, você precisará consultar as especificações técnicas da sua placa WLAN (e possivelmente as especificações PCI) para encontrar e escolher o registro correto e, em seguida, consultar os dados lspci e setpci para que você pode preparar a configuração do comando sudo setpci que ativa / desativa o cartão. Não é possível encontrar o registro correto sem especificações detalhadas, e muitas vezes é difícil encontrar o correto de qualquer maneira. No entanto, espero que esta breve discussão possa ajudá-lo a tomar a direção certa.

    
por user76204 09.12.2012 / 21:13

Tags