Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

uClibc - Uma biblioteca alternativa para sistemas embarcados

Colaboração: André Murbach Maidl

Data de Publicação: 03 de Janeiro de 2005

A uClibc[2] é uma biblioteca muito interessante, pois pode-se dizer que se trata de uma alternativa a glibc, podendo gerar binários menores, porque ela é um tanto mais crua e mais leve que a glibc. Por isso, é muito boa para a criação de aplicações para sistemas embarcados.

Segue abaixo a descrição da uClibc, traduzida do site oficial:

  uClibc (aka µClibc/pronuncia micro-c-lib-c) é uma biblioteca C para
  o desenvolvimento de sistemas embarcados no Linux. Ela é relativamente
  menor que a GNU C Library. Quase todas as aplicações suportadas pela
  glibc também trabalham, perfeitamente, com a uClibc. Normalmente, portar
  aplicações da glibc para a uClibc, implica apenas recompilar o código
  fonte. uClibc também suporta bibliotecas compartilhadas e threads.
  Atualmente, ela pode ser executada no Linux padrão e em sistema sem
  unidade de processamento de ponto flutuante (também conhecidos como
  µClinux), com suporte a alpha, ARM, cris, e1, h8300, i386, i960, m68k,
  microblaze, mips/mipsel, PowerPC, SH, SPARC e processadores v850.

Atualmente ela é mantida pelo mantenedor do busybox[1], com isso ele garante que o busybox[3] esteja sempre compatível com a uClibc. O busybox é um ótimo caso de uso da uClibc, pois ele contém vários comandos utéis do Linux em apenas um binário, que normalmente é gerado estático.

Após instalada, é interessante que seja criado um script, o qual configura o PATH, apontando para onde se encontra o compilador da uClibc.

Segue abaixo o script (uclibc) criado. Vale lembrar que é interessante adicioná-lo em um diretório como o /usr/bin ou /usr/local/bin, para facilitar o uso da biblioteca em questão.

  #!/bin/sh
  export PATH=/usr/i386-linux-uclibc/usr/bin:$PATH
  $@

Agora veremos como a uClibc consegue reduzir significativamente o tamanho de um binário estático.

Segue abaixo o código fonte C, de exemplo, que calcula o quadrado de um número n passado como parâmetro.

  /* inicio do exemplo */
  #include <stdio.h>
  #include <stdlib.h>
  #include <math.h>
  
  int main(int argc, char **argv)
  {
         double p, r;
  
         if(argc != 2)
                 return 1;
  
         p = atof(argv[1]);
  
         r = pow(p,2.0);
  
         printf("pow(%.2lf,2.00) = %.2lf\n", p, r);
  
         return 0;
  }
  /* fim do exemplo */

Após instalada a uClibc e criado o script de conveniência (uclibc), usamos as seguintes linhas de comando para compilar o código e gerar os binários correspondentes a cada metodologia.

  • criando um binário dinâmico com a glibc

      $ gcc quad.c -o quad-gcc -lm -Wall
    

  • criando um binário estático com a glibc

      $ gcc quad.c -o quad-gcc-static -lm -static -Wall
    

  • criando um binário dinâmico com a uClibc

       $ uclibc gcc quad.c -o quad-uc-gcc -lm -Wall
    

  • criando um binário estático com a uClibc

      $ uclibc gcc quad.c -o quad-uc-gcc-static -lm -static -Wall
    

    Agora observe o tamanho dos binários:

      -rwxrwxr-x  1 murbach murbach 4,9K 2004-12-16 14:27 quad-gcc*
      -rwxrwxr-x  1 murbach murbach 495K 2004-12-16 14:27 quad-gcc-static*
      -rwxrwxr-x  1 murbach murbach 3,8K 2004-12-16 14:28 quad-uc-gcc*
      -rwxrwxr-x  1 murbach murbach  22K 2004-12-16 14:28 quad-uc-gcc-static*
    

    Isto, antes deles serem stripados. Após serem stripados, ficaram como segue abaixo:

      -rwxrwxr-x  1 murbach murbach 3,0K 2004-12-16 14:28 quad-gcc*
      -rwxrwxr-x  1 murbach murbach 453K 2004-12-16 14:28 quad-gcc-static*
      -rwxrwxr-x  1 murbach murbach 2,4K 2004-12-16 14:28 quad-uc-gcc*
      -rwxrwxr-x  1 murbach murbach  18K 2004-12-16 14:28 quad-uc-gcc-static*
    

    Se observarmos os binários dinâmicos, não notamos muita diferença, mas se verificarmos os estáticos, notamos uma grande diferença. Repare que um simples programa em C, para calcular o quadrado de um número n, se ligado estaticamente com a glibc, fica com 453K, mas se ligado estaticamente com a uClibc cai para apenas 18K.

    Existem outros projetos semelhantes, como a dietlibc[4], mas a uClibc parece ser a mais compatível com a glibc.

    Por isso ela é muito interessante no desenvolvimento de aplicações para sistemas embarcados.

    ===Referências===

  • [1] Erik Andersen -
  • [2] BusyBox
  • [3] UCLIBC
  • [4] DietLibC

Veja a relação completa dos artigos de André Murbach Maidl

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.02/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1302 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Read in English - Uma Maneira Divertida de Aprender Inglês