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

23

O driver de dispositivo é um programa que é executado por conta própria ou é apenas uma biblioteca (um grupo de funções) carregada na memória e os programas podem chamar uma de suas funções (para que não seja executado por conta própria).

E, se for um programa, possui uma identificação de processo, por exemplo, posso encerrar um driver de dispositivo da mesma maneira que posso encerrar qualquer outro processo?

user255688
fonte
1
Você pode "descarregar" um driver com o rmmod, mas apenas se ele não estiver sendo usado.
pjc50

Respostas:

35

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

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

Para "finalizar" um driver de dispositivo, você precisa interromper todos os processos que o utilizam, remover os módulos do kernel (supondo que sejam construídos como módulos) e, opcionalmente, quaisquer outros módulos que ele usa e que não são mais necessários. Você pode listar os módulos em seu sistema usando lsmode descarregá-los usando rmmodou modprobe -r, sendo que ambos funcionarão apenas se lsmodindicar que eles não têm usuários.

Stephen Kitt
fonte
2
Se você for corajoso o suficiente e seu kernel foi compilado CONFIG_MODULE_FORCE_UNLOAD, tente rmmod -fforçar os módulos de descarregamento que estão em uso / que não foram projetados para serem removidos / etc. Isso, além de resultar simplesmente em um kernel em um estado não confiável, também manchar o kernel.
Ruslan
9

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 ele é feito diretamente através do programa do sistema ou através de servidores do kernel ou processos de usuários, não deve ter importância principal para essa questão essencialmente semântica.

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

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

Uma biblioteca é apenas um conjunto estático de código que pode ser carregado em qualquer processo. Os 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 ou kernel do sistema alocou recursos, como memória do sistema e tempo da CPU. Os módulos do kernel podem ou não seguir esse padrão eles mesmos, mas independentemente não são considerados como um processo defacto no Linux.

Portanto, para responder à sua pergunta, um driver não precisa ser um processo, mas pode ser. Embora o código possa existir em uma biblioteca, o driver ainda é carregado na memória através de um programa, seja o kernel na forma de módulos do kernel ou processos da terra do usuário.

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

jdwolf
fonte
0

Um driver de dispositivo Linux, é essencialmente uma biblioteca de espaço no kernel . Suas chamadas são iniciadas principalmente pelos drivers de nível superior ou pelos processos de espaço do usuário que o utilizam.

Existem apenas algumas exceções:

  • Os threads do kernel podem ser iniciados / interrompidos também pelos drivers, estes são essencialmente processos sem uma parte do espaço do usuário.
  • Os manipuladores de interrupção são iniciados pelo hardware, e não pelos processos de espaço do usuário.

Em outros sistemas, como no GNU Hurd, os drivers são essencialmente daemons com os quais os processos podem interagir. No Linux, os drivers são bibliotecas. No entanto, ambos os conceitos têm suas vantagens e desvantagens.

peterh diz restabelecer Monica
fonte