Um driver de dispositivo no Linux é um programa / processo ou é apenas uma biblioteca?

20

É um driver de dispositivo um programa que é executado sozinho ou é apenas uma biblioteca (um grupo de funções) que é carregada na memória e os programas podem chamar uma de suas funções (portanto, ela não está sendo executada por conta própria)? .

E se for um programa, ele tem um ID de processo, por exemplo, posso terminar um driver de dispositivo da mesma maneira que posso terminar qualquer outro processo?

    
por user255688 15.10.2017 / 13:02

2 respostas

33

No Linux, muitos drivers de dispositivos fazem parte do kernel, não de bibliotecas ou processos. Os programas interagem com eles usando arquivos de dispositivos (geralmente em /dev ) e várias chamadas do sistema, como open , read , write , ioctl ...

Existem exceções, no entanto. Alguns drivers de dispositivo usam uma mistura de stubs de driver de kernel e bibliotecas de espaço de usuário ( por exemplo, usando UIO). Outros são implementados inteiramente no espaço do usuário, geralmente em cima de alguma interface de bit-banging (UART ou GPIO). Em ambos os casos, eles geralmente estão em processo, então você não verá um processo separado, apenas o processo que está usando o dispositivo.

Para "encerrar" um driver de dispositivo, você precisa interromper todos os processos que o usam e remover seus módulos do kernel (supondo que sejam criados como módulos) e, opcionalmente, qualquer outro módulo usado e que não seja mais necessário. Você pode listar os módulos em seu sistema usando lsmod e descarregá-los usando rmmod ou modprobe -r , os quais só funcionarão se lsmod indicar que não têm usuários.

    
por 15.10.2017 / 14:22
8

Você primeiro precisa definir o que é um driver. Vou defini-lo como um programa ou sub-rotina que controla um dispositivo (como sua câmera) ou um subsistema (como um sistema de arquivos). Se o faz diretamente através do programa do sistema ou via servidores de kernel ou processos de usuário, não deveria, em princípio, importar com essa questão essencialmente semântica.

Em alguns casos, o Linux fornece apenas um protocolo genérico escrito em software, em que o "driver" real é uma árvore de dispositivos. Essa é uma configuração de parâmetros de hardware e quais softwares usar que compõem um driver.

De modo geral, interfaces e protocolos de driver são implementados usando módulos do kernel que são carregados conforme necessário, definidos por árvores de dispositivos ou regras do udev. Um módulo do kernel não é, no sentido mais restrito, um processo ou biblioteca.

Uma biblioteca é apenas um conjunto estático de código que pode ser carregado em qualquer processo. Sistemas operacionais modernos carregam essas bibliotecas na memória compartilhada. Um processo pode se vincular a qualquer número de bibliotecas compartilhadas.

Um processo é um programa em execução no qual o programa do sistema ou o kernel alocou recursos como memória do sistema e hora da CPU. Módulos de kernel podem ou não seguir este padrão por si mesmos, mas, de qualquer forma, não são considerados como processos internos no Linux.

Então, para responder à sua pergunta, um motorista não precisa ser processado, mas pode ser. Embora o código possa existir em uma biblioteca, o driver ainda é carregado no memery por meio de um programa, seja o kernel na forma de módulos do kernel ou processos de usuário.

Torna-se mais um argumento semântico quando se considera o que é a totalidade de um driver. Você poderia dizer que um driver é sempre um programa, mas às vezes não é como no caso de árvores de dispositivos, ele pode ser um processo userland, um arquivo de árvore de dispositivos, regras do udev e um módulo do kernel onde o processo e módulo usam bibliotecas para fazer a lógica de um driver.

    
por 15.10.2017 / 15:07

Tags