Você pode manipular alguns dos registradores do barramento PCI do dispositivo facilmente com setpci . Nota: isso é perigoso e pode travar seu sistema!
Por exemplo, encontre o barramento pci e o slot da sua placa gráfica:
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
$ lspci -s 00:02.0 -v
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09) (prog-if 00 [VGA controller])
DeviceName: Onboard IGD
Subsystem: Holco Enterprise Co, Ltd/Shuttle Computer Device 4018
Flags: bus master, fast devsel, latency 0, IRQ 29
Memory at f7400000 (64-bit, non-prefetchable) [size=4M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
I/O ports at f000 [size=64]
Expansion ROM at <unassigned> [disabled]
Capabilities: <access denied>
Kernel driver in use: i915
Kernel modules: i915
Você pode ler e gravar registros usando setpci
. Você precisa ser root para ler alguns registros e escrever qualquer um deles. Os nomes dos registradores são listados com setpci --dumpregs
. Por exemplo:
$ setpci -s 00:02.0 command
0407
O 16bit pci config command
register é um registro importante. O significado do bit pode ser obtido no cabeçalho linux . Os 3 bits baixos são 1 para permitir que o dispositivo responda aos ciclos io e de memória da cpu e para ser o mestre do barramento, de modo que possa acessar a memória principal da cpu.
Se você desabilitar esses bits, o dispositivo não responderá mais ao seu driver. Cuidado, isso pode travar seu sistema . Não teste isso levemente:
$ sudo setpci -s 00:02.0 command=0000 # DONT DO THIS!
Você pode tentar escrever um script para definir o registro como 0, aguardar alguns segundos enquanto seus gráficos tentam desenhar e, em seguida, configurar o registro de volta para sua configuração original (comando = 0407). Todos os números estão em hexadecimal (sem qualquer prefixo 0x). Como mencionado nos comentários, talvez seja necessário fornecer 4 dígitos para o valor, apesar do fato de que a largura dos registros nomeados (como command
) é conhecida por setpci
. Você pode fornecer uma largura explícita com um sufixo ao nome de registro de .b
(8bits), .w
(16) ou .l
(32).
A redefinição do hardware é mais difícil, pois geralmente é necessário saber de um registro específico no hardware para redefinir ou no hardware do barramento pai.