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 |