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.
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
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.
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:
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:
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:
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.
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