Escolar Documentos
Profissional Documentos
Cultura Documentos
Coronel Fabriciano
2004
ALAN CARVALHO DE ASSIS
Coronel Fabriciano
2004
Assis, Alan Carvalho de
Prof.Nome do Examinador 3
Titulação: Não Disponı́vel
Instituição: Não Disponı́vel
À minha famı́lia.
Aos meus amigos.
À todas as pessoas que contibuiram para a re-
alização deste trabalho.
À PAZ.
Resumo
Nobody can deny the revolution that computer has made in our society in
currently days, but this revolution is in initial stage, because the computer is being inte-
grated in every objects around us. An object that better represent it is the cell phone,
this device is became more and more complex including new features that some times ago
nobody could imagine.
These objects that has a computer embedded is known as embedded systems.
Such objects use other kind of hardware and software than it used in personal compute
(PC). Normally have some constrains as amount of memory, power consumption and
processing power.
The software also need some optimizations to get the maximum hardware
benefit, preventing hight power consumption and starting the system so fast as possible.
Aiming to take care these objectives, the operating system Linux was modified
to get support to many kind of embedded hardware as microcontroller and microprocessor
without MMU, this project is known as uClinux.
This work suggest the use of uClinux as a platform to development of embedded
systems, showing a real case of study of an aplication using a embedded board from AvNet
Company, this board is use the Motorola MCF5282 microcontroller.
Ao amigo Marcelo Barros que sempre me ajudou com dicas e idéias legais, e
foi através dele que me interessei sobre sistema embarcados.
1 INTRODUÇÃO 9
1.1 Sistemas Embarcados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Classificação dos sistemas embarcados . . . . . . . . . . . . . . . . 13
1.1.2 Alguns sistemas operacionais embarcados comerciais . . . . . . . . . 16
1.2 O kernel Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2.1 Caracterı́sticas do Linux . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2.2 Vantagens do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2.3 Desvantagens do Linux . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3 O Sistema Operacional Embarcado uClinux . . . . . . . . . . . . . . . . . 25
1.4 A placa embarcada AvNet 5282 . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5 As licenças GPL e LGPL, e suas implicações . . . . . . . . . . . . . . . . . 32
ANEXOS 59
4.1 Anexo A. Controlando os LEDs da placa pelo browser . . . . . . . . . . . . 59
4.2 Anexo B. Foto da placa com os LEDs acesos . . . . . . . . . . . . . . . . . 60
4.3 Anexo C. Device Driver do LedMonitor . . . . . . . . . . . . . . . . . . . . 61
4.4 Anexo D. Arquivo fonte do CGI . . . . . . . . . . . . . . . . . . . . . . . . 69
4.5 Anexo E. Device Driver do QADC . . . . . . . . . . . . . . . . . . . . . . 71
4.6 Anexo F. Aplicativo da Malha de Controle . . . . . . . . . . . . . . . . . . 78
REFERÊNCIA 86
1 INTRODUÇÃO
médicas, industriais e militares. Sistemas embarcados (ou sistemas embutidos) são dis-
positivos eletrônicos que possuem um computador internamente, mas que não são vistos
por exemplo: telefones celulares, fornos micro-ondas, vı́deo cassetes inteligentes e au-
maioria das pessoas nem mesmo se dá conta de sua existência. São vastamente utilizados
sistemas embarcados.
poderá contar com o auxı́lio de um sistema operacional embarcado. Este sistema operacio-
este mercado.
Linux (assim como o uClinux ) estão conquistando cada vez mais mercado. Vários fabri-
cantes de roteadores, DVDs, MP3 players estão incorporando o Linux em seus produtos.
Na Figura 1.1 pode ser visto alguns dispositivos que utilizam o Linux embar-
cado.
poration (VDC) em jullho de 2004 com 27.000 desenvolvedores revelou que o Linux é o
Figura 1.1: Equipamentos que utilizam o Linux como sistema operacional embarcado.
Fonte: www.linuxdevices.com
energia. Objetivando criar sistemas de baixo custos, geralmente são utilizados disposi-
tivos com pouca quantidade de memória e com limitado poder de processamento, embora
Fonte: www.vdc-corp.com
O transistor foi inventado pela Bell Labs em 1947 (MASSEY, 1997) e em 1958
vários transistores foram integrados numa única pastilha, surgia então o Circuito Inte-
foi a criação do microprocessador pela empresa Intel em 1971 (INTEL, 1971). O primeiro
microprocessador criado foi o 4004, este microprocessador possuı́a 2250 transistores inte-
seu uso estava restrito às calculadoras e pequenos microcomputadores que começaram a
em produtos que aparentemente não eram vistos com sendo um computador, por exem-
13
plo: impressoras e fotocopiadoras. Eram sistemas simples, possuindo basicamente um
analógico/digital e digital/analógico.
circuitos, a memória e alguns periféricos foram integrados dentro do chip com o micro-
outras, esta classificação não provê informações das caracterı́sticas de cada sistema.
peculiares de cada sistema desenvolvido, como por exemplo, tamanho do sistema, restri-
ções temporais, suporte a rede e grau de interação com o usuário (YAGHMOUR, 2003).
• Tamanho do sistema
Esta classificação não envolve o tamanho fı́sico em si, uma vez que sistemas
embarcados podem ser tão pequenos a ponto de serem utilizados em relógios de pulso ou
dade (menos de 100MHz), com pouca quantidade de memória RAM (menos de 4MB) e
com pouco espaço para armazenamento permamente (menos de 2MB). Removendo alguns
recursos do kernel do Linux e utilizando um sistema de arquivo com poucos aplicativos ele
poderá suportar tais sistemas. O uClinux é o mais indicado para este tipo de aplicação,
termediária (entre 100 e 700MHz), com razoável quantidade de memória RAM (em torno
Por fim, os sistemas embarcados grandes são sistemas que possuem proces-
Geralmente são utilizados para aplicações que envolve intensivos cálculos matemáticos.
• Restrições temporais
de tempo predefinido, nestes sistemas o não cumprimento ou o atraso de uma tarefa pode
um exemplo onde deve-se empregar um sistema embarcado de tempo real, uma vez que
de tempo predefinido, mas que seu não cumprimento não envolve perdas maiores, tais
sistemas são chamados de tempo real leve ou brando. Um exemplo de tal aplicação é a
transmissão de vı́deo por uma rede, o ideal é que não haja atrasos, mas o atraso de alguns
frames é tolerável.
• Suporte a rede
Atualmente todo tipo de dispositivo pode ter suporte a rede, isto facilita a
O suporte a rede são limita-se apenas ao padrão Ethernet, uma vez que os
dispositivos que possuam suporte à wireless ou bluetooth podem acessar a rede de forma
Uma vez que vários dispositivos embarcados possuam suporte a rede, eles
poderão ser integrados de forma a gerar uma maior redundância à falha e falta, como
para outro. Alguns sistemas são totalmente voltados para a interação com o usuário,
como por exemplo os PDAs. Outros sistemas poderão possuir alguns poucos botões e
LEDs indicando o estado do dispositivo ou nem mesmo possuir interação com o usuário.
interação com o usuário, podem ser controlados e configurados através de terminais seriais
(serial console) ou através da interface de rede, neste último caso o dispositivo possui
Nesta seção será apresentada uma visão superficial dos três principais sistemas
• Windows CE
operacional Windows da mesma empresa. O sufixo CE não tem uma significação especial,
algumas pessoas acreditam que ela possa significar Consumer Electronics ou Compact
Edition.
Até a versão 3.0 a Microsoft disponibilizava o código fonte apenas para as fa-
de uso para tal, mas a partir desta versão ela passou a disponibilizar o código fonte para
Porém o fato de disponibilizar o código fonte não significa que ela o tenha tor-
nado o sistema um software livre, pelo contrório, qualquer empresa que queira desenvolver
• VxWorks
californiana Wind River Systems. Ele é um dos sistemas embarcados mais utilizado no
mundo.
2002).
rizado como um sistema operacional embarcado pequeno, rápido e preciso. Este sistema
trabalha com módulos para suporte a rede, gráficos, email, web, automotivos e defesa.
ADSL SpeedStream, este modem é oferecido por vários provedores de ADSL aos seus
• QNX
microkernel, ou seja, um kernel muito simples com apenas as funções primordiais como
paralisado.
pequeno, para se ter uma idéia, no site do fabricante há uma versão com suporte a modo
gráfico, conexão dial-up e navegador para Internet que cabe é único disquete de 1.44 MB.
de 1 a 63 (prioridade mais alta), uma thread especial chamada idle recebe a prioridade 0
e é sempre executada quando não há nenhuma outra tarefa em execução (QNX, 2004).
O QNX é gratuito para fins acadêmicos e não comerciais, para outras aplicações
ele possuia apenas 21 anos de idade. Linus pretendia com isso aprender mais sobre a
arquitetura de 32 bits dos computadores IBM PCs 386 e criar um sistema operacional
semelhante ao UNIX, mas com o código fonte livre para quem desejasse modificá-lo (TOR-
net) que ele estava criando um sistema operacional, mas que este ainda estava em estado
dia 17 de setembro de 1991, Linus pretendia utilizar o nome Freax para o sistema ope-
racional que ele havia criado, mas um amigo que disponibilizou o arquivo para download
não gostou do nome e resolveu colocar o código fonte dentro de um diretório com o nome
mento do Linux estava aumentando, Linus resolveu licenciar o código fonte sob a licença
GNU General Public License (GPL), assim ele garantia que o código fonte permaneceria
(TORVALDS, 2004).
UNIX, além de suportar e incluir caracterı́sticas das API’s BSD e Unix System V. Também
implementa a especificação Portable Operating System Interface for Unix (POSIX), as-
sim aplicativos escritos seguindo esta especificação poderão facilmente ser portados para
simultaneamente o computador, cada usuário terá seu próprio ambiente com seus
dados privados.
sadores, assim dois ou mais processos podem ser executados realmente paralela em
próprio, assim um processo não poderá interferir em outro. Esta proteção é realizada
ou seja a partir do ponto de montagem inicial (\) podem existir vários subdiretórios
atalhos para outros arquivos e suporte a device file que permite mapear vários
num dispositivo qualquer da mesma forma que o fazem com arquivos comuns.
consiste em usar o disco rı́gido como uma área para armazenar temporariamente
22
parte da memória RAM que foi alocada por um aplicativo, mas que não está em
uso num determinado momento. Assim, qualquer aplicativo que precise de memória
utilizará a área de memória RAM daquele programa, pois seu conteúdo foi salvo no
disco.
do mesmo, como visto na Seção 1.2.1, por exemplo excelente suporte a rede, multi-usuário
utilizada, a licença GPL adotada pelo Linux, garante ao usuário o direito de usar o
aplicativo para quaisquer fins, de copiar e utilizar em quantos computadores ele desejar,
por ele.
ware livre, o que significa dizer que o usuário poderá contar com inúmeros programas
gratuı́tos que podem ser baixados pela Internet. Por ser um clone do UNIX, o Linux
pode rodar aplicativos comerciais desenvolvidos para aquele sistema sem nenhuma modi-
ficação.
dutivo. No Linux, assim como no UNIX, cada aplicativo executa apenas a função que
lhe é cabı́vel, por exemplo o comando para listar arquivos (ls) apenas lista arquivos, se
o código fonte aberto, o usuário poderá customizar o sistema segundo sua necessidade.
vantagens do Linux.
por este é a fato de possuir milhares de desenvolvedores e usuários voluntários para testar
o sistema e revisar o código escrito por outros. Quando o usuário encontra um BUG no
novos usuários a resolver seus problemas e tirar suas dúvidas. Quando um usuário Linux
encontrar um problema em seu sistema a primeira atitude correta a tomar é procurar nos
sistemas de buscas da Internet, pois, muito provavelmente, outra pessoa já passou pelo
mesmo problema e alguém postou a resolução daquele problema numa lista de discussão.
Estas vantagens aliadas à não cobrança de royalties tem contribuı́do para que o
Linux seja adotado em várias organizações e governos de várias partes do mundo, inclusive
desvantagens. Teoricamente o fato de possuir o código fonte aberto permite que terceiros
24
procurem por falhas no sistema e possam explorar tais falhas para proveito próprio. Na
prática não se tem notı́cias de nenhum caso onde isto tenha acontecido.
mentação para alguns aplicativos. Este problema vem sendo aos poucos resolvido através
de empresas que vendem distribuições Linux e que pagam pessoas apenas para documentar
alguns aplicativos.
isto porque o sistema foi desenvolvido deste o inı́cio no estilo ‘de programador para progra-
mador’. Geralmente o usuário tem que decorar enormes linhas de comando para instalar
Embora este cenário ainda seja maioria, a tendência é que o sistema torne-
se mais simples a cada ano. Várias distribuições já possuem suporte plug and play que
tribuições são bem simples de executar, o que permite a instalação do sistema até por
lizados no Windows e MacOS, isto é causado pelas empresas de software comerciais que
não desenvolvem seus aplicativos para Linux por não acreditar na demanda por tais
GPL. Se uma empresa desejar criar uma aplicação baseada em outra aplicação que esteja
licenciada sob licença GPL ou se apenas compilar seu aplicativo utilizando a biblioteca
25
libc que esteja sob GPL, devera disponibilizar todo o código fonte de sua aplicação.
Para contornar este problema qualquer empresa comercial poderá utilizar bi-
bliotecas licenciadas sob a LGPL, assim poderá manter fechado o código de seu aplicativo.
A Free Software Foundation não incentiva a utilização da licença LGPL uma vez que esta
licença não induz o desenvolvimento colaborativo, que é uma caracterı́stica da GPL, ver
Seção 1.5.
Ao contrário dos demais sistemas UNIX que possuem um kernel muito grande,
O kernel do Linux possui suporte a módulos, o que permite uma maior redução
do kernel, uma vez que os módulos ficam em arquivos separados, e só serão utilizados pelo
kernel quando necessário. São estas caracterı́stica, já citadas anteriormente, que tornaram
O uClinux é uma modificação do núcleo (kernel) do Linux para que este su-
em 1997 com o objetivo de portar o kernel 2.0 do Linux para o processador Motorola
MC68328 DragonBall.
O projeto foi iniciado por Jeff Dionne e Kenneth Albanowski contando com
uClinux foi liberada em 1998 e seu funcionamento foi demonstrado na arquitetura 3Com
MC68EZ328 operando a 16MHz, possuindo 8MB EDO DRAM e 2MB FLASH, display
Desde então o uClinux vem evoluindo rapidamente e hoje já suporta vários
processadores sem MMU, como por exemplo: M68K, Coldfire, ARM, PowerPC, Micro-
mas (UNGERER, 2004) conseguiu criar um sistema ainda menor, com apenas 256KB,
para o GameBoyAdvanced.
do Linux com poucas modificações, o que permite o porte de aplicativos escritos para o
Linux com relativa facilidade. Em alguns casos basta recompilar o aplicativo para tê-lo
suporte a rede. O uClinux implementa o protocolo TCP/IP por completo, além de vários
outros protocolos, sendo de fato um sistema operacional embarcado pronto para a Internet
(VENKATAKRISHNAN, 2003).
uma biblioteca de linguagem C de tamanho reduzido, conhecida como uClibc, por isso
aplicativos que são portados do Linux ficam menores no uClinux. Outras bibliotecas
como por exemplo os sistemas FAT16/32, NFS, EXT2, EXT3 e JFFS2. Através do
sistema de arquivo JFFS2 o uClinux pode trabalhar com a memória flash tanto para
leitura quanto para escrita, assim os aplicativos podem escrever na flash da mesma forma
vários dispositivos comerciais como roteadores, DVDs players, celulares e muitos outros
dispositivos eletrônicos.
controlador Motorola MCF5282, da famı́lia ColdFire. Esta placa possui várias inter-
• Conector BDM/JTAG;
único circuito integrado (CI) a interface de rede Ethernet, a interface de rede CAN e
memória FLASH, isto possibilita que diversas aplicações para controle industrial possam
ser desenvolvidas e integradas num único CI, e ainda possam ser controladas remota-
mente de qualquer lugar do mundo através da Internet ou outra rede que utilize o padrão
Ethernet.
29
(RISC), assim cada instrução gasta apenas um único ciclo de máquina para ser executada
(RISC, 2004), o que permite a este processador atingir a marca de 60 MIPS rodando a
66MHz.
MCF5282 são suficientes para algumas aplicações simples, porém para utilizar um sistema
FLASH na placa.
O mapa de memória da placa AvNet 5282 pode ser visualizado na Tabela 1.2
Uma vez que esta placa inclui todos os dispositivos da camada fı́sica (PHY), o desenvolve-
dor poderá criar qualquer aplicação envolvendo Ethernet 10/100Mps, UARTs, CAN, QSPI
e QADC.
Na Figura 1.5 pode ser visto o diagrama interno do MCF5282 com todas as
desenvolvedor poderá ter acesso direto aos registradores e à memória da placa. Neste
placa AvNet5282.
encontrar vários exemplos de aplicativos para a placa AvNet5282. Porém, por tratar-se
de uma IDE comercial de custo alto, não foi utilizada, dando preferência às soluções em
gravado na memória FLASH interna do processador, porém, neste trabalho, o RTXC foi
removido e substituı́do pelo uClinux, eliminando assim as limitações impostas pela versão
placa AvNet 5282, para citar alguns: eCos, RTEMS, uC/OS-II, SMX, além é claro do
32
uClinux.
A licença GPL foi criada por Richard Stallman, presidente da Free Software
liberdade.
3. A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo
Desta forma a licença GPL assegura que o programa desenvolvido por uma
determinada pessoa possa ser distribuı́do e reaproveitado por várias outras, mas mantém
apoderado por outra pessoa. Por ser uma licença válida na constituição estadunidense,
33
sua abrangência é válida a todos os paı́ses que aceitam o acordo internacional de respeito
A GPL permite que o desenvolvedor possa criar modificações para uso pessoal
programa modificado, deverá enviar junto o código fonte com as modificações, do contrário
O programador deve conhecer bem a licença GPL para cumprir com seus
deveres e obrigações, sabendo que todo trabalho derivado de outro trabalho sob licença
sob licença GPL em outro programa, seja a inclusão de código fonte original ou modificado.
Isto obriga a toda e qualquer pessoa ou empresa, que fizer modificações ou melhorias em
de programa à bibliotecas que estejam licenciadas sob licença GPL. Este fato a princı́pio
impede que empresas que possuam segredos tecnológicos ou patentes desenvolvam pro-
Para contornar este problema a Free Software Foundation criou a licença Lesser
General Public License (LGPL). Esta licença é semelhante à GPL, porém permite a
ligação de código livre com código proprietário, sem torná-lo livre à força.
do trabalho derivado, e caso tenha que desenvolver soluções que não possam ser disponi-
bilizadas como software livre, deverá optar por usar a bibliotecas sob licença LPGL.
2 PROCEDIMENTOS PARA INSTALAÇÃO DO UCLINUX NA PLACA
AVNET5282
A placa alvo utilizada nesta pesquisa é conhecida como Motorola Coldfire Eval-
como Background Debug Mode (BDM). Através desta interface, pode-se enviar qualquer
realizados:
bugger (GDB) com um patch aplicado para que o mesmo tenha suporte ao BDM, como
verá visto na Seção 2.1. Com o GDB suportando a interface BDM é possı́vel enviar o
também é explicado passo-a-passo quais aplicativos devem ser instalados, além é claro da
bdm-gdb-20030717.tar.gz
gdb-5.3-m68k.patch
gdb-5.3.tar.gz
fonte, pois o registrador RAMBAR (usado para controle da memória RAM interna) teve
0xc04, /* BDM_REG_RAMBAR */
Alterando-a para:
0xc05, /* BDM_REG_RAMBAR */
cd bdm-gdb-20030717/m68k/
36
./local_scripts/build-it
cd driver/linux
make install
Também é necessário instalar a biblioteca do BDM para ser usada pelo GDB:
cd bdm-gdb-20030717/m68k/lib
make
make install
arquivo:
cd gdb-5.3
./configure --target=m68k-bdm-elf
make
make install
mknod /dev/bdmcf0 c 34 4
37
Para usar o BDM deve-se adicionar o device driver do BDM no sistema, através
do comando:
insmod bdm
m68k-bdm-elf-gdb
e/ou obter informações sobre o processador. Por exemplo, o comando abaixo lista todos
(gdb) select-frame 0
(gdb) bdm_reset
Outro comando que foi importante para os testes realizados neste projeto e
que está presente em qualquer GDB, mesmo sem aplicar os patchs é:
mória, no exemplo 0x10000. O código em assembly exido deverá ser igual ao obtido do
m68k-elf-objdump -D arquivo.elf
Nesta seção será mostrado como enviar um programa para a memória da placa
e executa-lo.
Para compilar este programa é necessário ter a versão das ferramentas GNU
• O arquivo main.c
int main()
int i;
*ddrtc = 0x0F;
while(1)
*porttc = 0x01;
for (i=0;i<20000;i++);
*porttc = 0x04;
for (i=0;i<20000;i++);
return 0;
• O arquivo start.s
.global _main
.global _start
.global _rambase
.global _ramvec
.global _ramstart
.global _ramend
40
.data
_rambase:
.long 0
_ramvec:
.long 0
_ramstart:
.long 0
_ramend:
.long 0
.text
_start:
nop
jsr main
_exit:
jmp _exit
• O arquivo mem.ld
41
Este é o arquivo onde deve-se definir o endereçamento de memória para onde
MEMORY {
SECTIONS {
.text : {
_stext = . ;
*(.text)
_etext = ALIGN(0x4) ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.rodata)
*(.data)
_edata = ALIGN(0x4) ;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
_ebss = ALIGN(0x4) ;
_end = ALIGN(0x4) ;
} > ram
42
}
• Makefile
CC_EXEC_PREFIX = /usr/local/bin/m68k-elf-
CC = $(GCC_EXEC_PREFIX)gcc
AS = $(GCC_EXEC_PREFIX)as
LD = $(GCC_EXEC_PREFIX)ld
AR = $(GCC_EXEC_PREFIX)ar
OBJCOPY = $(GCC_EXEC_PREFIX)objcopy
PROGNAME = tstart
TARGET = $(PROGNAME).s19
CFLAGS += -g -m5307
$(PROGNAME).s19: $(PROGNAME).bin
$(PROGNAME).bin $(PROGNAME).s19
$(PROGNAME).bin: $(PROGNAME).elf
$(PROGNAME).elf: $(OBJS)
.S.o:
clean:
start.o: start.S
all: $(TARGET)
binário:
m68k-bdm-elf-gdb tstart.elf
(gdb) load
(gdb) c
Continuing.
O GDB foi de extrema importância neste projeto, uma vez que o mesmo foi
mesma forma como se inicia um aplicativo qualquer, como exemplificado na Seção 2.1.2.
O U-Boot pode-se ser controlado através de um console serial, para isso deve-
configurações: ‘19200 8N1’ e com controle de fluxo por hardware e software desativado.
Quando o U-Boot for executado, será exibido pela console serial as informações
DRAM: 16 MB
FLASH: 8 MB
AVNETMCEK>
placa alvo e o serverip é o endereço IP do servidor TFTP onde há o arquivo binário do
Para descarregar o arquivo do servidor TFTP para a placa alvo, deve-se exe-
Este comando irá baixar o arquivo ‘loader.bin’ para a memória RAM da placa
O comando usado para gravar o arquivo na Flash (cp.b) recebe como argumen-
gravados (0x20000), o endereço da memória Flash para onde o arquivo será gravado
AVNETMCEK> saveenv
46
Quando finalizar esta operação pode-se reiniciar a placa e imediatamente a mensagem
a mesma.
pela GNU [citar], tais como o compilador GCC (GNU Compiler Collection), linker LD e
m68k-elf-tools-20030314.sh.
uClinux/dist/uClinux-dist-20030909.tar.gz
#sh m68k-elf-tools-20030314.sh
exit
do uClinux:
#cd uClinux-dist
make menuconfig
Selection:
(Motorola/M5282C3)
(linux-2.4.x)
(uClibc)
(MCF5282) CPU
--- Platform
Motorola Coldfire Evaluation Kit, os demais recursos devem ser ativados segundo a ne-
Vários protocolos são suportados pelo kernel e precisam ser ativados para que
aplicações que o utilizam possam funcionar. Por exemplo, para o interroperabilidade com
servidores Windows, é necessário ativar o protocolo smbfs em File Systems -> Network
File Systems.
make dep
make
age.bin’) poderá ser encontrada dentro do diretório ‘images’. É este arquivo que deve ser
enviar um aplicativo comum. Para fazê-lo é preciso ter o arquivo ‘image.bin’ copiado
go 400000
uClinux/COLDFIRE(m5282)
zone(0): 0 pages.
zone(2): 0 pages.
Memory available: 2136k/8192k RAM, 0k/0k ROM (666k kernel code, 206k data)
Starting kswapd
[11]
Welcome to
52
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|
http://www.uclinux.org/
/>
gravá-lo na memória Flash, para isto é necessário criar um pacote que o U-Boot recon-
gzip image.bin
-d image.bin.gz image.pkg
Este comando irá criar o pacote chamado ‘image.pkg’, que deverá ser enviando
age.pkg’.
comando:
setenv bootdelay 3
saveenv
Deve-se tomar cuidado ao se utilizar o ‘bootdelay 0’, pois, caso o kernel não
inicialize, não terá como recuperar o sistema e o U-Boot deverá ser reinstalado.
desligar e em seguida ligar novamente a placa embarcada, após alguns segundos o uClinux
iniciará automaticamente.
servidor web chamado ‘boa’ que é executado por padrão no uClinux, conecte o cabo de
na placa embarcada. Na Secão 4 encontra-se o código de uma aplicação simples que foi
dois motores de corrente contı́nua, um atuando com gerador de força motriz e o outro
atuando como gerador de tensão, gerada através da interligação dos eixos de ambos.
Para controlar o motor gerador de força motriz foi construı́da uma placa que
recebe dados de forma serial, através da interface SPI, e os converte para paralelo,
convertendo-os em seguida para nı́veis analógicos que são amplificados e aplicados di-
retamente ao motor.
Aplicativo de controle
SPI
QADC
DAC /
Amplificador
Motor Gerador
motor (que está atuando como gerador), esta tensão é proporcional à velocidade de rotação
que o primeiro motor está imprimindo sobre este gerador. Um programa que está em
55
execução na placa calcula a velocidade atual e a compara com o valor desejado. Em
seguida este atua sobre o motor gerador de força motriz, através de uma interface SPI
Inicio
Leia(val);
initqspi(); //Funç~
ao para configurar e inicializar o QSPI
vmotor++;
vmotor--;
Fim Enquanto
Fim
56
Para desenvolver esta malha de controle o autor deste trabalho precisou criar
um device driver para ler a entrada analógica QADC. Já o driver do SPI havia sido
como U-Boot, precisou ser portado para a placa embarcada para que o uClinux pudesse
embarcado. Em geral a imagem obtida com o kernel 2.4 é em torno de 2MB, porém como
o U-Boot aceita inicializar imagens compactadas, pôde-se utilizar este artifı́cio e obter
na placa, foi desenvolvido um device driver para controlar os LED s da placa. Assim foi
possı́vel acender ou apagar os LEDs através da console serial. Esta idéia evoluiu e criou-se
do uClinux em uma plataforma que utilize um processador suportado não é tão grande
como pode parecer à primeira vista. Além disto pode-se verificar que os participantes
compartilhando seus conhecimentos, algo que não ocorre facilmente quando trata-se de
58
sistemas comerciais, onde, quase sempre, a única fonte de informação é a própria fabricante
da solução.
ANEXOS
Arquivo ledmon.c
/*
* You should have received a copy of the GNU General Public License
* MA 02111-1307 USA
*/
#define MODULE
62
#define __KERNEL__
#include <linux/config.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
open: led_open,
read: led_read,
write: led_write,
release: led_release
};
int init_module(void)
64
{
int result;
*ptcpar = 0x00;
*ptdpar = 0x00;
*ddrtc = 0x0f;
*ddrtd = 0x0f;
*gptbddr= 0x0f;
*gptbdr = 0x0f;
if (result < 0)
return result;
led_buffer = 0;
return 0;
}
65
void cleanup_module(void)
MOD_INC_USE_COUNT;
printk("Executing led_open\n");
return 0;
MOD_DEC_USE_COUNT;
printk("Executing led_release\n");
return 0;
led_buffer = 0xFF;
led_buffer ^= 0x01;
led_buffer ^= 0x02;
led_buffer ^= 0x04;
led_buffer ^= 0x08;
led_buffer ^= (*gptbdr<<4);
return -EFAULT;
*f_pos++;
return 1;
printk("Executing led_write\n");
return -EFAULT;
printk("Input = %c\n",led_buffer);
show_leds(led_buffer);
*fpos++;
return 1;
*porttc = 0x05;
*porttd = 0x05;
*gptbdr = 0x0f;
if(leds&0x01)
*porttc ^= 0x01;
68
if(leds&0x02)
*porttc ^= 0x04;
if(leds&0x04)
*porttd ^= 0x01;
if(leds&0x08)
*porttd ^= 0x04;
leds = leds>>4;
*gptbdr ^= leds;
}
69
4.4 Anexo D. Arquivo fonte do CGI
#include <stdio.h>
#include "cgivars.h"
#include "htmllib.h"
#define DEBUG 0
int led;
int i;
FILE *f;
addTitleElement("LEDMONITOR");
if(form_method == GET) {
#if DEBUG
#endif
if(strcmp(getvars[i],"led")==0)
70
led=atoi(getvars[i+1]);
if((f = fopen("/dev/led","wb"))==NULL)
return -1;
fprintf(f,"%c",led);
fclose(f);
printf("<TABLE border=1>\n");
printf("<TR>\n");
for(i=128;i>=1;i=i>>1)
if(led & i)
printf("<TD>\n");
printf("<A href=\"/cgi-bin/cgi_led?led=%d\"><img \
printf("</TD>\n");
71
}
else
printf("<TD>\n");
printf("<A href=\"/cgi-bin/cgi_led?led=%d\"><img \
src=\"/img/off.gif\"></A>\n",led | i);
printf("</TD>\n");
printf("</TR>\n");
printf("</TABLE>\n");
return 0;
Arquivo qadc.c
/*
*
72
*
* You should have received a copy of the GNU General Public License
* MA 02111-1307 USA
*/
#define MODULE
#define __KERNEL__
#include <linux/config.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
ssize_t qadc_read(struct file *filp, char *buf, size_t count, loff_t *f_pos);
ssize_t qadc_write (struct file *filp, const char *buf, size_t count, loff_t *f_pos
open: qadc_open,
read: qadc_read,
write: qadc_write,
release: qadc_release
};
int init_module(void)
int result;
75
*qadcmcr= 0x40; //QADC operates normally
*qacr0 = 0x7f; //QCLK, disable extern mux, set the trigger assignments
*qasr0 = 0;
for(cntr=0;cntr<64;cntr++)
rjurr[cntr]=0;
for(cntr=0;cntr<64;cntr++)
ccw[cntr] = cntr;
if (result < 0)
return result;
}
76
printk("AvNet QADC driver is installed\n");
return 0;
void cleanup_module(void)
MOD_INC_USE_COUNT;
//printk("Executing qadc_open\n");
return 0;
MOD_DEC_USE_COUNT;
//printk("Executing qadc_release\n");
77
return 0;
ssize_t qadc_read(struct file *filp, char *buf, size_t count, loff_t *f_pos)
printk("Executing qadc_read");
printk("Starting convertion");
printk("Data in queue");
for(adcntr=0;adcntr<8;adcntr++)
}
78
*qacr1 = 0;
return -EFAULT;
*f_pos++;
return 1;
ssize_t qadc_write(struct file *filp, const char *buf, size_t count, loff_t *fpos)
return 1;
Arquivo qspid.c
79
#include <stdio.h>
#include <asm/fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include "mcf_qspi.h"
int xfersize;
int initqspi() {
qspi_rcd.buf[i] = 0x0;
qspi_rcd.loop = 1;
80
// first open qspi driver for I/O with chip select 0 (default)
if (fdq < 0) {
return 0;
printf("bad QSPIIOCS_BITS\n");
printf("bad QSPIIOCS_CPOL\n");
};
printf("bad QSPIIOCS_CPHA\n");
};
printf("bad QSPIIOCS_QCD\n");
};
printf("bad QSPIIOCS_DTL\n");
};
printf("bad QSPIIOCS_CONT\n");
};
printf("bad QSPIIOCS_POLL_MOD\n");
};
82
// 1 = polling, only for small tranfers
// 0 = interruption
//Note that in the next line, qspi_rcd must pass a pointer to itself,
return 0;
int yield;
if(value>255)
return -1;
mybuff[0] = value;
83
yield = write(fdq, &mybuff, 1);//write 1byte out
return yield;
int main()
scanf("%d",&val);
qspiwrite(vatual);
while(1)
//open QADC
f = open("/dev/qadc", O_RDONLY);
if (f < 0) {
84
printf("\nCan’t open /dev/qadc\n");
return -1;
//load speed
//show speed
printf("Velocidade: %d\n",vlc);
//aumentar velocidade
vatual++;
//diminuir velocidade
if(vatual > 0)
vatual--;
//vatual = 255;
qspiwrite(vatual);
85
//wait 10 ms.
usleep(10000);
close(f);
close(fdq);
return 0;
}
REFERÊNCIA
ABBOTT, D. Linux for Embedded and Real-time Applications. [S.l.]: Newner, 2003.
ISBN 0-7506-7546-2.
ASSIS, A. C.; BARROS, M. A. uclinux: o linux dos pequenos. Revista do Linux, 2003.
GILL, L. IBM Chooses Linux for ‘Blue Gene’ Supercomputer. 2002. Disponı́vel em:
dez. 2004.
nov. 2004.
KILBY, J. Texas Hall of Fame for Science, Mathematics and Technology. 2002.
nov. 2004.
87
MISTRAL. 2002. Disponı́vel em:
TORVALDS, L.; DIAMOND, D. Só por prazer, Linux, os bastidores da sua criação. [S.l.:
s.n.], 2001.
UNGERER, G. Atmel ships $3-$4 SoCs. But will they run Linux? 2004. Disponı́vel em:
VANDERWIELE, M.; SCOTT, L. Putting Linux reliability to the test. 2003. Disponı́vel
nov. 2004.
WEHRLI, R. eCos vs. uClinux: Which is best for your embedded target? 2002.