Captura de drivers de hardware / engenharia reversa / engenharia de hardware

4

Essa pode ser uma pergunta muito ampla, mas não tenho certeza do que exatamente estou procurando. Minha principal questão é como a comunidade de código aberto reverte os engenheiros do Windows (por exemplo, placas de vídeo) para reescrevê-los no linux.

Eu sou formado em EE, então fiz cursos de design de microprocessadores, como assembly, C para sistemas embarcados e trabalhei em Linux incorporado. Mas sinto que estou sentindo falta de algo ao tentar entender como os drivers são escritos para o linux sem uma API do fabricante do hardware.

O que leva à minha pergunta é que, em alguns novos laptops, eles vêm com duas placas de vídeo. Ambos integrados e discretos. Há software de driver que permite alternar entre os dois no Windows, mas, tanto quanto eu sei, não há nenhum driver de código aberto ou proprietário. Obviamente eu não estou perguntando algo estúpido como "omg como eu escrevo isso". Mas isso me fez perceber que eu sempre imaginei o processo de obter suporte de hardware no Linux.

Links para recursos são bons, eu não espero um tutorial sobre desenvolvimento de drivers em uma resposta. Mas pelo menos eu preciso ser apontado na direção certa.

    
por Falmarri 20.09.2010 / 07:02

1 resposta

3

Existem, claro, muitas possibilidades.

Por exemplo, se for um dispositivo USB, você poderá monitorar o tráfego USB entre o dispositivo / computar em um sistema com suporte de driver (análogo ao tcpdump para rede). Por exemplo, para o Windows, existem várias ferramentas de monitor USB disponíveis (IIRC usbsnoop, por exemplo).

No caso de um scanner USB, você poderia, por exemplo gerar um traço com as configurações padrão, alterar uma configuração, gerar outro traço, compará-los e descobrir o que mudou e assim por diante.

Analogamente a isso, você pode rastrear coisas para dispositivos SCSI, Firewire etc.

Em seguida, você pode tentar desmontar / depurar um driver proprietário (por exemplo, com IDA pro ).

Ou você pode executar o Windows em uma máquina virtual ou emulador (por exemplo, qemu) e usar pontos de interrupção e inspecionar o estado do hardware antes / depois das chamadas do driver. Analogamente ao que você pode observar para quais registros ou algo assim um driver escreve / lê.

    
por 20.09.2010 / 09:57