Como se tornar um especialista em Linux Embarcado

Linux Embarcado

A motivação para este post é apresentar uma visão pessoal do perfil ótimo necessário para se trabalhar com sistemas com Linux embarcado. Obviamente não se trata de pré-requisitos, mas talvez um guia para avaliação pessoal sobre os desafios presentes em projetos Linux Embarcado e que requerem um conhecimento diferente. Então vamos lá. Segue a lista de conhecimentos técnicos:

 

  • Conhecimento em administração de sistemas Linux;

  • Conhecimento em desenvolvimento de software, principalmente através de ferramentas de código aberto;

  • Conhecimento em desenvolvimento de firmware. Em especial, microcontroladores;

  • Conhecimentos em redes de computadores;

  • Conhecimentos em projetos de hardware.

 

O profissional que tiver uma experiência anterior em todos os itens acima sem dúvida nenhuma irá se destacar no desenvolvimento de sistemas Linux Embarcado. Já quem não tiver, ao trabalhar com Linux embarcado esta experiência virá com o tempo. Tratam-se de requisitos necessários para qualquer projeto. Vou detalhar cada tópico a seguir.

 

 

Administração de sistemas Linux

 

Em princípio, o conhecimento avançado de instalação, configuração e personalização do sistema operacional Linux em ambiente PC resolve este requisito. O ideal seria ter trabalhado com administração de sistema mesmo - seja em um departamento de escola ou alguma empresa - onde é preciso garantir que vários computadores estejam operando de maneira apropriada e organizada.

 

Uma boa administração de sistemas Linux envolve, obrigatoriamente, conhecimentos em modo terminal (creio que em Windows não seja diferente). É necessário não somente conhecer bem comandos em terminal, como a correta localização dos arquivos nos diretórios, os serviços presentes no sistema operacional. 

 

Dei o exemplo de trabalhar como administrador de sistemas com várias máquinas para que a pessoa já comece a se acostumar com os problemas em nível de sistema que ocorrem. Os problemas de funcionamento de sistema presentes em projetos Linux Embarcado são similares a problemas em computadores PC. A principal diferença - o que é melhor para o sistema embarcado - é que a probabilidade de mal uso é muito menor, porém, em geral, um sistema embarcado fica mais tempo em operação do que um computador PC.

 

Conheci casos de pessoas que dominam o sistema operacional só de usar em casa, para fins pessoais. Já é um excelente ponto de partida.

 

 

Desenvolvimento de software

 

É muito importante que o profissional que for trabalhar com projetos em Linux embarcado saiba desenvolver software para Linux. O desenvolvimento de software para Linux embarcado está mais próximo do desenvolvimento de software para um PC do que para um microcontrolador. Não somente os conhecimentos de programação, como também os conhecimentos das ferramentas para gerar o binário.

 

É extremamente importante que o profissional conheça bem o compilador GCC, a ferramentas MAKE e AUTOTOOLS. É preciso conhecer não só seu funcionamento como ser capaz de usar estas ferramentas sem a necessidade de um ambiente de desenvolvimento (IDE). A razão disso é a de que em alguns casos é preciso realizar modificações em projetos de código aberto existentes. E estes projetos raramente utilizam IDE para trabalhar (pode até ser que o desenvolvedor do projeto utilize durante o desenvolvimento, mas o pacote final no qual fazemos download não, e são raras as indicações de como integrar a um IDE). Mas uma coisa é certa: é totalmente possível fazer alterações e compilações através da linha de comando.

 

Não podemos deixar de mencionar aqui o conhecimento de sistemas de controle de versão. Acredito que não preciso dizer a razão para isso. Uma motivação extra está no fato de que as ferramentas mais novas de construção de sistemas Linux embarcado (mais especificamente, OpenEmbedded e Yocto) fazem a maior parte de seus downloads dos fontes a partir de seus repositórios. Assim, não só para entender o que vai em seu projeto, como para criar um novo pacote de compilação, é fundamental o conhecimento de software de controle de versão.

 

Aqui neste tópico eu dispenso a necessidade de conhecimentos avançados - conhecimentos necessários para criar e configurar um repositório. Naturalmente os software mandatórios para se conhecer são o SUBVERSION e o GIT.

 

 

Desenvolvimento de firmware

 

Por que eu separei os dois casos? 

 

Firmware não é um software também?

 

Sim, é. Porém, aqui eu não quero destacar os conhecimentos em programação comumente conhecida como 'baixo nível'.

 

Alguns componentes essenciais de projetos em Linux embarcado são componentes de baixo nível. São os casos dos drivers e do bootloader.

 

Os drivers em Linux devem respeitar a arquitetura de drivers do sistema operacional. Mas, na hora H de acessar ao recurso de hardware, a maneira de programar é similar a de um microcontrolador. O bootloader nada mais é do que um firmware - ele é executado sem a presença de um sistema operacional.

 

E estes componentes de software são amplamente presentes e alterados em projetos de sistemas Linux Embarcado.

 

 

Redes de computadores

 

Este tópico poderia ser, de uma forma simplista, inserida junto aos conhecimentos de administração de sistemas Linux.

 

Mas, na verdade, conhecer bem a forma de se projetar redes de computadores não é exatamente um conhecimento comum disponível por aí.

 

Hoje quase tudo é TCP/IP, quase tudo está ligado na Internet. Porém, preparar uma rede de forma a aproveitá-la ao máximo em desempenho não é exatamente uma tarefa que todos conhecem.

 

O mínimo do mínimo é ligar diversos computadores a um roteador que está ligado na Internet. É a configuração padrão de quase todas as residências, cafés e pequenas empresas. Eu não sei se todos sabem que em um roteador existe um switch.

 

É preciso conhecer a hierarquia de redes, sua organização. Atualmente as redes não são somente cabeadas. Existe o Wi-Fi, o GPRS, o 3G. É preciso conhecer protocolos como o PPP. Também é necessário saber como o Linux cuida de tudo isso. O Linux é o principal sistema operacional usado em equipamentos de rede. Podemos dizer que, quando se tem rede de computadores, existe um computador com Linux ali no meio. E com o Linux embarcado, essa situação aumentou muito.

 

Além dos conhecimentos na montagem da rede, é preciso conhecer bem os serviços necessários para um bom aproveitamento de rede: FIREWALL, SNMP, VPN, ... Em sua grande maioria, são softwares já disponíveis para utilização, mas é preciso conhecê-los bem para a melhor implantação da solução.

 

 

Projeto de Hardware para sistemas com Linux Embarcado

 

Por fim, é preciso conhecer hardware também. Não é preciso ser projetista de hardware, mas pelo menos um conhecimento mínimo de leitura de esquema elétrico é fundamental.

 

Linux em PC roda em um computador, digamos, convencional. Um PC é uma plataforma de computadores consagrada, definida há muito tempo atrás ... onde eu concluo de forma simplista que qualquer PC tem o mesmo projeto de hardware para todos os casos. Aí a manutenção em software acaba sendo, digamos, menos complicado.

 

Em um sistema embarcado, cada projeto é de um jeito. São escolhas diferentes de componentes, que possuem características diferentes. E para situações específicas, o sistema operacional deve estar preparado para suportar os diversos componentes específicos presentes na placa. O Linux não vem preparado para atender a todas as necessidades de todos os projetos específicos. Para cada novo projeto de hardware, possivelmente uma nova personalização é necessária. E deixá-lo preparado implica em configurar drivers de dispositivos. As vezes configurar não é possível, e um novo driver deverá ser desenvolvido. Com isso, conhecimento sobre as ligações dos componentes na placa é fundamental.

 

Uma importante etapa de um projeto de Linux embarcado é o "bring-up".

 

Esta etapa é caracterizada pela inicialização do sistema operacional na nova placa projetada e prototipada. É quando carregamos o
bootloader, o kernel e um sistema de arquivos capaz de exercitar todos os dispositivos presentes na placa. Geralmente é uma etapa difícil e longa do projeto - e que ocorre nos momentos mais críticos do projeto.

 

E, nesta hora, o projetista Linux embarcado deve ser capaz de compreender o hardware de maneira a permitir a melhor interação possível com o projetista de hardware para que ele possa identificar problemas de projeto em hardware, quando for o caso.

 

 

Conclusão

 

Eu espero não ter deixado ninguém desanimado com este artigo. A ideia é justamente o contrário: apresentar as ferramentas necessárias pelo engenheiro projetista para que ele possa desempenhar suas atividades da melhor maneira possível. E, além disso, ver como é interessante trabalhar com Linux embarcado e ver que vários novos conhecimentos deverão ser adquiridos.

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Flavio De Castro Alves Filho
Sócio fundador da Phi Innovations e Professor das disciplinas de sistemas de tempo real e padrões e aplicações de sistemas operacionais do curso de pós graduação em eletrônica embarcada automotiva oferecido pelo SAE (Society of Automotive Engineers).Formado em Engenharia Elétrica pela UNICAMP, com especialização na Ecole Centrale de Lyon, na França, atua há mais de 10 anos em projetos de sistemas embarcados. Trabalhou com projetos de hardware e software embarcado para os setores de pagamento eletrônico, aeroespacial, defesa, segurança, equipamentos médicos, telecomunicações e energia. Atuou em projetos no Brasil e no exterior (França e Alemanha).Começou suas atividades com Linux em 1996 e suas atividades empreendedoras em 2008. É um geek e apaixonado pelo Do-It Yourself (DIY).

7
Deixe um comentário

avatar
 
7 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Fernando FrançaCelso Comelli da SilvaGiancarlo AbreuFabio RuedaExemplo de driver para Linux Embarcado - Embarcados - Sua fonte de informações sobre Sistemas Embarcados Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Fernando França
Visitante

Sensacional o artigo Flávio. Na verdade ele está longe de ser desanimador mas foi para mim um incentivo. Veja, trabalho profissionalmente com Linux desde 1999 e de lá para cá me interessei por sistemas embarcados. Em 2008 projetei um sistema embarcado e fui finalista do Imagine Cup, competição de tecnologia promovida pela Microsoft. Desde então venho buscando me aprofundar nas competências necessárias para o desenvolvimento de sistemas embarcados e enxergo que o caminho é esse mesmo que você expôs no seu texto.

Celso Comelli da Silva
Visitante
Celso Comelli

Parabéns! Bem elucidativo.

Giancarlo Abreu
Visitante
Giancarlo Abreu

Parabéns pelo trabalho vai me ajudar muito!

trackback

[…] - Como se tornar um especialista em Linux embarcado  […]

trackback

[…] Neste artigo o Flávio da Phi Inno­va­tions descreve sua visão do per­fil necessário para se tra­bal­har com Linux embar­cado.Como se tornar um espe­cial­ista em Linux embarcado […]

trackback

[...] Como se tornar um especialista em Linux embarcado [...]

Fabio Rueda
Visitante
Fábio Rueda de Toledo

Show o artigo. Parabéns!!!