Software Livre

[Compiladores] – Como funciona o processo de compilação de um código-fonte usando GCC

Quando o GCC é invocado, ele normalmente realiza quatro etapas para gerar o executável: Pré-Processamento, Compilação, Montagem e Linkagem (Ligação), sempre nesta ordem e sendo que é possível parar o processo no final de cada etapa.

1 – Pré-Processamento

Esta etapa é responsável pela resolução de diretrizes do pré-processador, como #define, #if, #include

fredericom@novagenesis:~$ gcc -E teste.c -o teste.i

* Este comando redireciona a saída do pré processador para o arquivo teste.i

2 – Compilação

Nesta fase é produzida a linguagem de montagem dos arquivos de entrada.

fredericom@novagenesis:~$ gcc -S teste.c

*O arquivo teste.s será gerado, já em linguagem assembly da arquitetura.

3 – Montagem

Produz o arquivo objeto .o, levando em conta a linguagem de montagem dos arquivos de entrada.

fredericom@novagenesis:~$ gcc -c teste.c

*Gera o arquivo objeto teste.o

4 – Linkagem

Nesta fase os arquivos .o e as bibliotecas são “colocados” no executável.

fredericom@novagenesis:~$ gcc -o teste teste.c

* Gera o arquivo executável teste

No entanto, a maioria dos programas consistem em vários arquivos de código-fonte. Caso hajam dois arquivos, arquivo1.c e arquivo2.c, a seguinte linha de comando poderia ser utilizada para compilar o programa final:

fredericom@novagenesis:~$ gcc -o teste arquivo1.c arquivo2.c

O GCC interpreta os arquivos de acordo com a sua extensão. Algumas das principais podem ser vistas na tabela abaixo:

Extensão

Interpretação

.c

Programa e linguagem C

.C .cc

Programa em linguagem C++

.i

Programa em C pré-processado

.ii

Programa em C++ pré-processado

.S .s

Programa em linguagem Assembly

.o

Programa objeto

.a .so

Bibliotecas compiladas

[Solved] – I2CImp.lo is not a valid libtool object

libtool: link: `/home/fredim/Downloads/librxtx-java/rxtx-2.2pre2/i686-pc-linux-gnu/I2CImp.lo’ is not a valid libtool object
make: ** [i686-pc-linux-gnu/librxtxI2C.la] Erro 1

Solução:

sudo nano /usr/include/linux/version.h

Adicionar o resultado do uname -r

uname -r
3.2.0-23-generic-pae //Resultado do uname -r

Ficando:

#define UTS_RELEASE “3.2.0-23-generic-pae”

[Linux] – Syntek Semiconductor 802.11g + Bluetooth Wireless Adapter

Como ativar o módulo Syntek Semiconductor 802.11g + Bluetooth Wireless Adapter no Linux (Ubuntu >= 10.04)

fredim@corleone:~$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 05e1:0100 Syntek Semiconductor Co., Ltd
Bus 001 Device 003: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera
Bus 001 Device 002: ID 1e3d:2093
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

fredim@corleone:~$ sudo lsusb -v -d 05e1:0100

Bus 001 Device 004: ID 05e1:0100 Syntek Semiconductor Co., Ltd
Device Descriptor:
bLength                18
bDescriptorType         1
bcdUSB               2.00
bDeviceClass            0 (Defined at Interface level)
bDeviceSubClass         0
bDeviceProtocol         0
bMaxPacketSize0        64
idVendor           0x05e1 Syntek Semiconductor Co., Ltd
idProduct          0x0100
bcdDevice            0.02
iManufacturer           1 Syntek Semi Co..
iProduct                2 WiFi USB Dongle
iSerial                 3 Manufacture
bNumConfigurations      1
Configuration Descriptor:
bLength                 9
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
wMaxPacketSize     0x0200  1x 512 bytes
bInterval               1
Endpoint Descriptor:
bLength                 7
bDescriptorType         5
bEndpointAddress     0x83  EP 3 IN
bmAttributes            2
Transfer Type            Bulk
Synch Type               None
Usage Type               Data
wMaxPacketSize     0x0200  1x 512 bytes
bInterval               1
Endpoint Descriptor:
bLength                 7

(Bus Powered)

Drivers disponíveis no site da Syntek são:

[2010-08-30] Ubuntu10.04 32bit[2.6.32-21/22/23/24-generic]
[2010-06-04] Ubuntu10.04 64bit[2.6.32-21/22-generic]

A solução abaixo é pra quem usa kernel diferente dos listado acima:

fredim@corleone:~$ git clone git://github.com/reyiyo/3dsp.git

fredim@corleone:~$ cd 3dsp/
fredim@corleone:~/3dsp$ chmod +x Install_3DSPUSB.sh
fredim@corleone:~/3dsp$ sudo ./Install_3DSPUSB.sh

fredim@corleone:~/3dsp$ sudo shutdown -r now

WiFi:

Aplicativos -> Acessórios -> 3DSP WiFi Radar

Bluetooth:

Sistema -> Preferências -> Bluetooth

[Arduino] – Sensor de Temperatura LM35 no Arduino

int sensorPin = 0; 

void setup()
{
  Serial.begin(9600);  
}

void loop()                     
{
 int reading = analogRead(sensorPin);  

 float voltage = reading * 5.0;
 voltage /= 1024.0; 
 Serial.print(voltage); Serial.println(" volts");

 float temperatureC = (voltage - 0.5) * 100 ;  
 Serial.print(temperatureC); Serial.println(" degrees C");

 float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
 Serial.print(temperatureF); Serial.println(" degrees F");

 delay(1000);
}

Set-Top-Box usando ginga-ncl no Ubuntu 10.04

1 – Introdução
Tive bastante trabalho para concluir com sucesso a instalação do middleware ginga-ncl no Linux, a distribuição testada foi ubuntu-desktop 10.04 e ubuntu-server 10.04.

A base deste tutorial é o tópico “Principais Pré-requisitos para compilação e instalação” da documentação que a equipe do ginga-ncl publicou no site:


Temas abordados aqui:

  • Preparar Ambiente
    • Ativar FrameBuffer
  • Solução dependências no Ubuntu
  • Instalação dependências ginga-ncl
  • Solução de erros durante a instalação do ginga-ncl

———————————————————————————————————————
2 – Preparando o Ambiente

2.1 – Ativar FrameBuffer

Em ” /boot/grub/grub.cfg ” encontra-se no menuentry() a linha Linux:

linux   /boot/vmlinuz-2.6.32-22-generic root=UUID=df000bd5-0d4f-43c0-86ac-4de4c5b53d1e ro quiet splash

Para ativar o framebuffer basta acrescentar o parâmetro vga = resolução

linux   /boot/vmlinuz-2.6.32-22-generic root=UUID=df000bd5-0d4f-43c0-86ac-4de4c5b53d1e ro vga=xxx quiet splash

Onde,  xxx=resolução=mode

Mode 0x0300: 640×400 (+640), 8 bits
Mode 0x0301: 640×480 (+640), 8 bits
Mode 0x0303: 800×600 (+832), 8 bits
Mode 0x0305: 1024×768 (+1024), 8 bits
Mode 0x0311: 640×480 (+1280), 16 bits
Mode 0x0314: 800×600 (+1600), 16 bits
Mode 0x0317: 1024×768 (+2048), 16 bits
Mode 0x0395: 320×240 (+640), 16 bits
Mode 0x0396: 320×240 (+1280), 24 bits
Mode 0x03b3: 512×384 (+512), 8 bits
Mode 0x03b5: 512×384 (+1024), 16 bits
Mode 0x03b6: 512×384 (+2048), 24 bits
Mode 0x03c3: 640×350 (+640), 8 bits
Mode 0x03c5: 640×350 (+1280), 16 bits
Mode 0x03c6: 640×350 (+2560), 24 bits
Mode 0x0333: 720×400 (+768), 8 bits
Mode 0x0335: 720×400 (+1472), 16 bits
Mode 0x0336: 720×400 (+2944), 24 bits
Mode 0x0321: 640×480 (+2560), 24 bits
Mode 0x0322: 800×600 (+3200), 24 bits
Mode 0x0323: 1024×768 (+4096), 24 bits

3 – Resolvendo dependências Ubuntu

$ sudo aptitude install build-essential automake autoconf subversion libsysfs-dev libvncserver-dev liblzo2-dev x11-utils libx11-dev libpnglite-dev libpng12-dev libjpeg62-dev libtiff4-dev libzip-dev libcurl4-openssl-dev libcrypto++-dev libgpm-dev libexpat1-dev curl libxerces-c2-dev libxext-dev libimlib2-dev libgmp-ocaml-dev libxmltooling-dev git git-core

O ginga-ncl foi baseado na libtool 1.5, logo precisaremos remover a versão mais nova caso instalada.

Remover libtool:

$ sudo dpkg –purge libtool

Instalar libtool 1.5:

$ wget http://mirrors.kernel.org/ubuntu/pool/main/libt/libtool/libtool_1.5.22-2_i386.deb
$ sudo dpkg -i libtool_1.5.22-2_i386.deb

4 – Pré-Requisitos Ginga-NCL

4.1 – Faad2

http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz?use_mirror=ufpr
$ ./configure –with-mp4v2
$ make
$ sudo make install

4.2 – FFmpeg

$ git clone git://git.ffmpeg.org/ffmpeg/
$ cd ffmpeg
$ git clone git://git.ffmpeg.org/libswscale/
$ ./configure –enable-shared –enable-gpl –enable-nonfree –enable-pthreads –enable-libfaad –enable-postproc

4.3 – Xine-Lib 1.1.17

$ wget -c http://prdownloads.sourceforge.net/xine/xine-lib-1.1.17.tar.bz2
$ ./configure –enable-faad –disable-ffmpeg-uncommon-codecs –with-external-ffmpeg
$ make
$ sudo make install

4.4 – DirectFB

$ git clone git://git.directfb.org/git/directfb/core/DirectFB.git
$ cd DirectFB
$ ./autogen.sh
$ make
$ sudo make install

4.5 – DirectFB-extra

$ git clone git://git.directfb.org/git/directfb/extras/DirectFB-extra.git
$ cd DirectFB-extra
$ ./autogen.sh
$ make
$ sudo make install

OBS: Dentro da pasta “interfaces” modificar os arquivos Makefile.am de forma que todos os LIBADD’s das interfaces contenham a variável $(DFB_LIBS).

Por exemplo: libidirectfbvideoprovider_xine_la_LIBADD = $(DFB_LIBS) $(XINE_LIBS)

4.6 – DirectFB-examples

$ git clone git://git.directfb.org/git/directfb/extras/DirectFB-examples.git
$ cd DirectFB-examples
$ ./configure
$ make
$ sudo make install

4.7 – FusionSound

$ git clone git://git.directfb.org/git/directfb/core/FusionSound.git
$ cd FusionSound
$ ./autogen.sh
$ make
$ sudo make install

OBS: Dentro da pasta “interfaces” modificar os arquivos Makefile.am de forma que todos os LIBADD’s das interfaces contenham a variável $(DFB_LIBS).

Por exemplo: libifusionsoundmusicprovider_mad_la_LIBADD = $(DFB_LIBS) $(MAD_LIBS)

4.8 – Lua

$ wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
$ tar -xvvzf lua-5.1.4.tar.gz$
$ cd lua-5.1.4
$ make linux
$ sudo make install
$ cd ..
$ wget http://luaforge.net/frs/download.php/2664/luasocket-2.0.2.tar.gz
$ tar -xvvzf luasocket-2.0.2.tar.gz$ cd luasocket-2.0.2
$ make
$ sudo make install
$ sudo ln -s /usr/local/lib/lua/5.1/socket/core.so /usr/local/lib/lua/5.1/socket/libcore.so

5 – Instalação Ginga-NCL

6 – Solução de Possíveis erros durante instalçao Ginga-NCL