2‐ Compilar e rodar o drive mínimo no notebook - richardauzier-afk/Hands-On-Linux GitHub Wiki

Introdução

Após construirmos o firmware, precisamos ter uma forma de detectar automaticamente o dispositivo quando conectado via USB e configurar a comunicação básica entre o computador e a placa. Na tarefa 1, quem estava fazendo isso era o driver padrão do esp32. Nesta tarefa iremos implementar o nosso próprio driver mínimo. O arquivo que iremos trabalhar durante esse relatório é o

probe.c e Makefile

Partimos dos seguintes pressupostos:

  • A esp32 está conectada na sua máquina
  • O terminal está aberto
  • Você sabe identificar quando sair e entrar das/nas pastas
  • Você sabe identificar quando abrir um arquivo (utilize o editor de texto da sua preferência)

Metodologia

Identificando o Vendor ID e o product ID

Precisamos saber o Vendor ID e o Product ID da placa em uso, para isso execute o seguinte comando que fornece informações sobre o dispositivo conectado.

 lsusb

O Vendor ID é um número hexadecimal que identifica o fabricante do dispositivo US, já o Product ID é o indetificador do chip conversor que possibilita a esp32 funcionar como dispositivo USB. A imagem abaixo destaca os atributos que estamos interessados.

Indetificando-device

Adicionando o Vendor ID e o product ID no arquivo probe.c

Precisamos inserir o Vendor ID e o product ID no código, conforme a figura abaixo

motificando-o-arquivo-probe

Para continuarmos, precisamos adicionar ao arquivo "Makefile" o nome do nosso módulo. Porém, como o kernel trabalha com objetos ele não compila diretamente arquivos ".c", por isso vamos indicar como ".o". A seguir, vamos ilustrar na imagem as mudanças dentro do arquivo da mesma maneira que executamos no Lab-9.

makefile

Após executarmos todos os passos anteriores, execute o seguinte comando

make

para construir nosso driver. Caso tudo esteja correto, teremos uma saída igual a que está na figura abaixo:

comando-make

Nesta etapa, para verificarmos que tudo ocorreu certo, podemos executar o comando

ls 

para verificar que foi criado o arquivo chamado "probe.ko", que é o módulo de instalação do nosso driver USB.

Antes de continuarmos a instalação do nosso driver, vamos executar o comando

lsmod | grep cp210x

Com isso, vamos buscar no sistema de módulos se o módulo padrão do fabricante está instalado. Caso esteja, vamos precisar removê-lo usando o comando

sudo rmmod cp210x

Para verificar se ele foi removido corretamente, vamos repetir o comando

lsmod | grep cp210x

Se o retorno do comando for vazio significa que foi removido com sucesso. Assim, como vamos demonstrar na figura a seguir:

instalando-o-novo-drive

Agora, para finalizar e finalmente instalar nosso driver USB, vamos executar o comando

sudo insmod probe.ko

Se não apresentar nenhum erro no terminal, significa que está tudo correto.

Para verificarmos o nosso driver instalado, vamos executar o comando

lsmod | grep probe

Então, teremos uma resposta com o nome do nosso módulo instalado no kernel ("probe"), o tamanho em bytes e se existe algum processo que está usando-o.

Caso queira mais detalhes dos drivers USB instalados, execute o seguinte comando:

lsusb -t

Finalizando a atividade, para mostrar o driver funcionando no notebook, vamos conectar o ESP32 e digitar o comando

sudo dmesg

que vai exibir como resposta o buffer de log do kernel. Vamos verificar a mensagem do nosso driver após conectar o ESP32:

SmartLamp: Dispositivo conectado ...
usbcore: registered new interface driver smartlamp 

conforme vamos mostrar nas imagens a seguir:

novo-drive-instalado-e-funcionando

Só um ponto de observação: quando usamos o comando

sudo dmesg | tail -20

fazemos isso para filtrar as últimas informações do buffer de log do kernel. Caso contrário, sem esse filtro, ele vai mostrar tudo o que ocorreu no buffer de log desde que o sistema foi iniciado. Para corrigir a imagem abaixo, vamos mostrar a resposta esperada.

msg-de-confirmacao-instalacao-sucesso

Atribuição de tarefas

Escrita dessa wiki: Marcelo Peter e Richard Auzier

Sugestão de organização da pasta no repositório: Richard Auzier

Código: Marcelo Peter