Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

Drivers de dispositivos Linux incorporados:Compreendendo sua função


Nota do editor:Embedded Linux tem sido classificado consistentemente entre os principais sistemas operacionais usados ​​em projetos de sistemas embarcados. Com o rápido crescimento do interesse na Internet das Coisas (IoT), a capacidade do Linux integrado de atender a várias funções se mostrará vital no suporte às diversas necessidades encontradas em cada camada da hierarquia de aplicativos IoT. Por sua vez, a capacidade dos engenheiros de dominar os sistemas Linux embarcados se tornará crítica para alcançar o desenvolvimento rápido e confiável de sistemas mais sofisticados. Em Mastering Embedded Linux Programming - Second Edition, o autor Chris Simmonds leva o leitor em um tour detalhado pela amplitude e profundidade deste importante sistema operacional, usando exemplos detalhados para ilustrar cada ponto-chave.


Neste trecho, Capítulo 9, do livro, o autor descreve como os drivers de dispositivo do kernel interagem com o hardware do sistema e como os desenvolvedores podem escrever drivers de dispositivo e usá-los em seus aplicativos. As seguintes parcelas apresentam este trecho sobre drivers de dispositivo Linux Embedded:

• Compreendendo sua função

• Leitura do estado do driver em tempo de execução

• Drivers de dispositivo no espaço do usuário

• Gravando um driver de dispositivo de kernel

• Descobrir a configuração do hardware


Adaptado de Mastering Embedded Linux Programming - Second Edition, por Chris Simmonds.

Capítulo 9. Interface com drivers de dispositivo

Os drivers de dispositivo do kernel são o mecanismo pelo qual o hardware subjacente é exposto ao resto do sistema. Como desenvolvedor de sistemas embarcados, você precisa saber como esses drivers de dispositivo se encaixam na arquitetura geral e como acessá-los a partir de programas de espaço do usuário. Seu sistema provavelmente terá algumas peças novas de hardware e você terá que descobrir uma maneira de acessá-las. Em muitos casos, você descobrirá que há drivers de dispositivo fornecidos para você e poderá obter tudo o que deseja sem escrever nenhum código de kernel. Por exemplo, você pode manipular pinos GPIO e LEDs usando arquivos em sysfs, e há bibliotecas para acessar barramentos seriais, incluindo SPI (Interface Periférica Serial) e eu 2 C (Circuito Inter-integrado).

Existem muitos lugares para descobrir como escrever um driver de dispositivo, mas poucos para dizer por que você deseja fazê-lo e as opções que você tem ao fazê-lo. Isso é o que eu quero cobrir aqui. No entanto, lembre-se de que este não é um livro dedicado a escrever drivers de dispositivo de kernel e que as informações fornecidas aqui são para ajudá-lo a navegar pelo território, mas não necessariamente para configurar lá. Existem muitos livros e artigos bons que o ajudarão a escrever drivers de dispositivo, alguns dos quais estão listados no final deste capítulo.

Neste capítulo, cobriremos os seguintes tópicos:


A função dos drivers de dispositivo

Como mencionei no Capítulo 4, Configurando e Construindo o Kernel , uma das funções do kernel é encapsular as várias interfaces de hardware de um sistema de computador e apresentá-las de maneira consistente aos programas do espaço do usuário. O kernel tem estruturas projetadas para facilitar a escrita de um driver de dispositivo, que é a parte do código que faz a mediação entre o kernel acima e o hardware abaixo. Um driver de dispositivo pode ser escrito para controlar dispositivos físicos, como um UART ou um controlador MMC, ou pode representar um dispositivo virtual, como o dispositivo nulo (/ dev / null) ou um ramdisk. Um driver pode controlar vários dispositivos do mesmo tipo.

O código do driver de dispositivo do kernel é executado em um nível de alto privilégio, assim como o resto do kernel. Ele tem acesso total ao espaço de endereço do processador e aos registros de hardware. Ele pode lidar com interrupções e transferências DMA. Ele pode fazer uso da infraestrutura de kernel sofisticada para sincronização e gerenciamento de memória. No entanto, você deve estar ciente de que há uma desvantagem nisso; se algo der errado em um driver de bug, pode realmente dar errado e desligar o sistema. Consequentemente, existe um princípio de que os drivers de dispositivo devem ser tão simples quanto possível, apenas fornecendo informações aos aplicativos onde as decisões reais são tomadas. Você costuma ouvir isso sendo expresso como nenhuma política no kernel . É responsabilidade do espaço do usuário definir a política que governa o comportamento geral do sistema. Por exemplo, o carregamento de módulos do kernel em resposta a eventos externos, como conectar um novo dispositivo USB, é responsabilidade do programa de espaço do usuário, udev, não do kernel. O kernel fornece apenas um meio de carregar um módulo do kernel.

No Linux, existem três tipos principais de driver de dispositivo:

Há também um quarto tipo que se apresenta como um grupo de arquivos em um dos pseudo sistemas de arquivos. Por exemplo, você pode acessar o driver GPIO por meio de um grupo de arquivos em / sys / class / gpio, conforme descreverei posteriormente neste capítulo. Vamos começar examinando com mais detalhes os três tipos básicos de dispositivos.

Dispositivos de caracteres

Dispositivos de caracteres são identificados no espaço do usuário por um arquivo especial denominado nó de dispositivo . Este nome de arquivo é mapeado para um driver de dispositivo usando os números principais e secundários associados a ele. Em termos gerais, o maior número mapeia o nó do dispositivo para um driver de dispositivo específico e o número menor informa ao driver qual interface está sendo acessada. Por exemplo, o nó de dispositivo da primeira porta serial no ARM Versátil PB é denominado / dev / ttyAMA0, e tem o número principal 204 e o número menor 64. O nó de dispositivo para a segunda porta serial tem o mesmo número principal, uma vez que é controlado pelo mesmo driver de dispositivo, mas o número menor é 65. Podemos ver os números de todas as quatro portas seriais na lista de diretórios aqui:
 # ls -l / dev / ttyAMA * crw-rw ---- 1 root root 204, 64 Jan 1 1970 / dev / ttyAMA0crw-rw ---- 1 root root 204, 65 Jan 1 1970 / dev / ttyAMA1crw-rw ---- 1 root root 204, 66 Jan 1 1970 / dev / ttyAMA2crw-rw ---- 1 root root 204, 67 Jan 1 1970 / dev / ttyAMA3 

A lista dos números principais e secundários padrão pode ser encontrada na documentação do kernel em Documentation / devices.txt. A lista não é atualizada com muita frequência e não inclui o dispositivo ttyAMA descrito no parágrafo anterior. No entanto, se você olhar o código-fonte do kernel em drivers / tty / serial / amba-pl011.c, verá onde os números principais e secundários são declarados:
 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64 

Onde houver mais de uma instância de um dispositivo, como com o driver ttyAMA, a convenção para formar o nome do nó do dispositivo é tomar um nome de base, ttyAMA, e anexar o número da instância de 0 a 3 neste exemplo.

Como mencionei no Capítulo 5, Construindo um sistema de arquivos raiz , os nós do dispositivo podem ser criados de várias maneiras:

Você pode ter a impressão, pelos números que usei acima, que tanto os números maiores quanto os menores são números de 8 bits no intervalo de 0 a 255. Na verdade, a partir do Linux 2.6 em diante, o número principal tem 12 bits, o que dá números válidos de 1 a 4.095, e o número menor é de 20 bits, de 0 a 1.048.575.

Integrado

  1. Função de sistemas incorporados em automóveis
  2. O papel diversificado do epóxi na fabricação de PCB de dispositivos IoT
  3. As principais tecnologias fortalecem o papel crescente da visão incorporada
  4. Atualizações OTA para Embedded Linux, parte 2 - Uma comparação de sistemas de atualização prontos para uso
  5. Atualizações OTA para Embedded Linux, parte 1 - Fundamentos e implementação
  6. Drivers de dispositivos Linux incorporados:Descobrindo a configuração do hardware
  7. Blog:Compreendendo o papel do PDMS no reino da microfluídica
  8. De IoT a Cryptojacking:Compreendendo novas ameaças de dispositivos móveis
  9. Uma introdução ao hackeamento de hardware embarcado de dispositivo IoT
  10. Componentes do CAM e seu papel na usinagem CNC