Os programas do console serial¹ que você usará na outra extremidade da conexão terão alguma maneira de enviar um arquivo para o lado remoto. Como exatamente você faz isso depende de quais recursos você tem disponível no sistema remoto.
Eu tenho lrzszou kermitno lado remoto
O caso mais fácil é se você tiver um sólido programa de transferência de arquivos binários instalado no lado remoto, como lrzszou kermit. Isso foi mais comum do que hoje, mas seu sistema específico ainda pode ter um deles.
O programa de console serial que você está usando no local quase certamente tem uma maneira de fazer upload de Zmodem ou Kermit, o que permite enviar o que você precisar diretamente.
No caso do Zmodem, basta digitar rzno sistema remoto, que envia uma string especial que o terminal serial local deve entender, fazendo com que apareça uma caixa de diálogo do seletor de arquivos.
O Kermit é um protocolo mais simples, portanto, você deve iniciar a transferência manualmente nesse caso.
Não tenho um programa de transferência de arquivos binários, mas tenho uuencode/base64
Existem várias vantagens de usar um bom programa de transferência de arquivo binário como lrzszou kermit: eficiência, checksumming, tentativas automáticas, retomada transferência abortada, a transferência de arquivos múltiplos, etc., mas estes são luxos . Se você precisar enviar apenas um arquivo ou estiver enviando arquivos raramente, poderá fazer o upload de arquivos ASCII.
Como os protocolos de terminal interpretam muitos dos valores de bytes que ocorrem em um arquivo de dados binários, não é possível enviar o arquivo diretamente pela mesma conexão; se o fizer, o código de emulação de terminal em cada extremidade tentará interpretar alguns dados, corrompendo-os e provavelmente confundindo o código de manipulação de terminais.
Você pode contornar isso codificando os dados binários em um subconjunto seguro de ASCII no lado local e, em seguida, transformando-os novamente em dados binários brutos no lado remoto. É isso que os programas uuencodee base64fazem, diferindo apenas em pequenas escolhas de algoritmos.
No sistema local, você codifica o arquivo: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Em seguida, você digita este comando no sistema remoto e envia o arquivo usando o recurso "ASCII upload" do console serial local:
$ cat | uudecode
Quando o upload do arquivo terminar, pressione Ctrl-Cpara sair cat. Agora você tem seu arquivo decodificado no sistema remoto, conforme desejado.
Mas eu tenho muitos arquivos para enviar e a transcodificação imprimível em ASCII é uma dor!
Não é difícil inicializar-se com um nível superior de tecnologia. Se o sistema remoto tiver um compilador C, você poderá usar a técnica anterior para enviar ao sistema remoto uma cópia do lrzszcódigo-fonte. No lado local:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Em seguida, no sistema remoto, digite isto através do programa do console serial:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Depois de iniciar o primeiro comando, faça um "upload ASCII" do lrzsz.tgz.uuearquivo no sistema remoto. O pipeline aceita os dados codificados e decodifica-os em um tarball binário para você, que você pode descompactar e construir.
Mas eu não tenho um compilador C no sistema remoto
Se você ainda não possui um compilador no sistema remoto, pode compilar de forma cruzada o programa rz(ou o que for) no sistema local e enviá-lo ao sistema remoto usando a técnica acima.
Notas de rodapé:
minicom , picocom , PuTTY , VanDyke CRT ...
Você deve atribuir o nome do arquivo de entrada a esta versão uuencodeduas vezes, uma vez para nomear a origem dos dados de entrada e novamente para declarar como o sistema remoto deve chamar o arquivo quando decodificar os dados em um arquivo de saída. É possível que você queira que o sistema remoto tenha um nome diferente para seu arquivo de saída.
Sua versão local uuencodepode se comportar de maneira diferente.