|
J2tech
O ambiente de desenvolvimento
=============================
Hardware (real e emulado):
__Máquina Windows__ __Máquina linux: "big"__________________________
| | | Debian com muitas ferramentas, |
| | | pacotes-fonte (incluindo kernel), |
| | | cross-compilers, etc. |
| | | Roda quatro máquinas virtuais |
| | | emuladas com QEmu |
| | | |
| | | __QEmu: big86_____ __QEmu: small86__ |
| | | | Debian "normal" | | Debian reduzido | |
| | | | Kernel padrão | | kernel mínimo | |
| | | | glibc | | uclibc | |
| | | | X "normal" | | X reduzido | |
| | | | gcc/gcj/gdb | | gdbserver | |
| | | | Ferramentas para | | | |
| | | | construir .debs | | | |
| | | |__________________| |_________________| |
| | | |
| | | __QEmu: bigarm____ __QEmu: smallarm_ | __imx21arm_______
| | | | Debian "normal" | | Debian reduzido | | | Debian reduzido |
| | | | Kernel padrão | | kernel mínimo | | | kernel mínimo |
| | | | glibc | | uclibc | | | uclibc |
| | | | X "normal" | | X reduzido | | | X reduzido |
| | | | gcc/gcj/gdb | | gdbserver | | | |
| | | | Ferramentas para | | | | | |
| | | | construir .debs | | | | | |
| | | |__________________| |_________________| | |_________________|
| | | |
|___________________| |________________________________________________|
A comunicação entre as partes não está sendo mostrada no diagrama.
O "big" é acessível por ftp/scp, por telnet/ssh e pelos protocolos de
debugamento remoto do gdb e do eclipse; todas as máquinas exceto a
máquina Windows têm servidores de ftp, ssh e telnet. A máquina "big"
tem um firewall que só permite conexões a partir de certos IPs
autorizados.
As quatro máquinas emuladas funcionam como se fossem máquinas
separadas, acessíveis pela rede; elas também têm servidores de ftp,
ssh, telnet, gdbserver e (qual é o nome disso?) jdebugserver; a
"big86" e a "bigarm" têm também um gdb "normal", que pode ser rodado a
partir de um shell local por telnet ou ssh.
O "imx21arm" se conecta com o "big" por um cabo USB.
Em algumas versões do sistema que vai rodar no imx21arm ele vai ter um
servidor de telnet e um de ftp, acessíveis só através de conexões de
rede vindas pelo cabo USB; em outras versões o software dele só vai
poder ser alterado reescrevendo-se a sua memória Flash.
O imx21arm vai poder se conectar com um servidor externo - por
exemplo, um servidor de banco de dados - através da sua outra
interface de rede (Wi-Fi).
Os scripts
==========
Cross-compilação
----------------
Compilação de um kernel mínimo
------------------------------
Atualização de kernel
---------------------
Atualização de bibliotecas
--------------------------
Atualização do programa em Java
-------------------------------
Debugamento
===========
Interfaces para todos estes scripts
===================================
Vamos fazer uma interface gráfica para rodar todos estes scripts; esta
interface vai ter, entre outras coisas, umas caixas de texto com
listas de arquivos - por exemplo, a lista dos arquivos-fonte em Java
para o programa que vai rodar nos imx21s - e um monte de botões; cada
botão tem um _nome_ e uma _ação_; a ação é sempre um script (ou vários
em seqüência), e cada script é para ser executado num "lugar"
diferente. Por exemplo: um script de cópia de arquivos é uma série de
comandos de ftp, e é para ser executado "dentro de um programa de
ftp"; um script de compilação na máquina bigarm é para ser executado
"dentro de um telnet para a bigarm".
Essa interface gráfica - que vai ser feita em Tcl/Tk - é na verdade um
disfarce para uma outra interface, que é a que eu uso para
desenvolvimento, e que é baseada em Emacs. Na interface em Emacs todos
os scripts estão num arquivo só, e ao invés de cada um ter um "nome"
(como se fosse o nome de um botão), ele é precedido por algumas linhas
de comentários e uma linha com uma sintaxe especial, que diz onde
aquele script deve rodar.
Dentro do Emacs quando batemos F8 numa linha normal essa linha é
mandada para o "destino default"; quando batemos F8 numa linha com a
sintaxe especial ela é executada de uma certa forma (mais
precisamente: executada como um programa em Lisp), e isso em geral
muda o destino default.
Esse Emacs funciona como um editor de texto em uma das suas janelas -
a que está editando o texto com os scripts - e nas outras janelas ele
roda programas externos, como shells, telnets, e ftps, e "edita o log
destes programas".
[incluir um screenshot aqui.
Um exemplo só com duas janelas (script e shell):
<http://angg.twu.net/eev-current/doc/shot-f8.png>]
Como este texto contendo todos os scripts é uma série de scripts de
shell e de ftp - e mais algumas linhas de controle - ele é
compreensível com bem pouco esforço por pessoas com fluência em *NIX.
Vou anunciar este sistema nas listas de discussão de Debian-ARM (o
primeiro dos links abaixo) e acho que vários dos desenvolvedores
principais do Debian-ARM vão ver estes scripts como "How-Tos
executáveis" sobre como fazer várias tarefas no Debian-ARM a partir de
uma máquina de desenvolvimento x86; estes scripts são uma espécie de
ferramenta de comunicação entre nós e os desenvolvedores principais.
http://lists.debian.org/debian-arm/
http://lists.debian.org/debian-arm/2007/01/msg00034.html
http://lists.debian.org/debian-arm/2007/11/msg00001.html
http://lists.debian.org/debian-arm/2007/11/msg00025.html
http://wiki.debian.org/ArmEabiHowto
http://wiki.debian.org/ArmEabiTodo
http://wiki.debian.org/Crosstool
http://wiki.debian.org/EmDebian/CrossDebootstrap
http://www.aurel32.net/info/debian_arm_qemu.php
|