Mudanças entre as edições de "Criação de um acesso remoto ao kit MERCURIO IV"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(21 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 18: Linha 18:
  
 
===<span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">Servidor jTAG (green_host)</span>===
 
===<span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">Servidor jTAG (green_host)</span>===
 +
Para facilitar os script abaixo foram estabelecidas duas variáveis onde os login devem ser inseridos, evitando redigitar no código que segue.
 +
export <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">USERBLUE</span>=usuario_bluehost
 +
export <span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">USERGREEN</span>=usuario_greenhost
 +
export JTAGPORT=60000
 +
export JTAGPASSWORD=password
 +
echo <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">USERBLUE</span> <span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">USERGREEN</span>
 +
echo <span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">$USERGREEN</span> <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE</span>
 +
 
Na maquina onde está o kit FPGA conectado, será instalado um server jTAG.
 
Na maquina onde está o kit FPGA conectado, será instalado um server jTAG.
* Conectar o jtag através de uma senha '''DLP29006''' a ser compartilhada com os alunos.
+
* Conectar o jtag através de uma senha '''password''' a ser compartilhada com os alunos.
 
  /opt/altera/13.0sp1/quartus/bin/jtagd
 
  /opt/altera/13.0sp1/quartus/bin/jtagd
  /opt/altera/13.0sp1/quartus/bin/jtagconfig --enableremote '''DLP29006'''
+
  /opt/altera/13.0sp1/quartus/bin/jtagconfig --enableremote '''$JTAGPASSWORD'''
  
* Gerar um conjunto de chaves '''jtagserverkey'''  '''jtagserverkey.pub''' para acesso remoto através de chave privada e a publica, na pasta /home/<span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">usuario_green</span>
+
* Gerar um conjunto de chaves '''jtagserverkey'''  '''jtagserverkey.pub''' para acesso remoto através de chave privada e a publica, na pasta /home/<span style="color: rgb(0, 255, 0);" data-mce-style="color: #00ff00;">$USERGREEN</span>
 
  ssh-keygen -t rsa -b 4096
 
  ssh-keygen -t rsa -b 4096
  
 
  Generating public/private rsa key pair.
 
  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/usuario_green/.ssh/id_rsa): jtagserverkey
+
  Enter file in which to save the key (/home/$USERGREEN/.ssh/id_rsa): jtagserverkey
 
  jtagserverkey already exists.
 
  jtagserverkey already exists.
 
  Overwrite (y/n)? y
 
  Overwrite (y/n)? y
Linha 35: Linha 43:
 
  Your public key has been saved in jtagserverkey.pub
 
  Your public key has been saved in jtagserverkey.pub
  
* Mudar o nome da chave publica '''jtagserverkey.pub''' para '''authorized_keys'''. Em seguida mover a chave para a conta do <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue</span> na nuvem do IFSC (Blue). Essa chave permitirá que os usuarios_red acessem o túnel ssh reverso sem senha.
+
* Mudar o nome da chave publica '''jtagserverkey.pub''' para '''authorized_keys'''. Em seguida mover a chave para a conta do <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE</span> na nuvem do IFSC (Blue). Essa chave permitirá que os usuarios_red acessem o túnel ssh reverso sem senha.
 
  mv jtagserverkey.pub authorized_keys
 
  mv jtagserverkey.pub authorized_keys
  scp -P 2224 authorized_keys <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue@nuvem.sj.ifsc.edu.br</span>:/home/usuario_blue/.ssh   
+
  scp -P 2224 authorized_keys <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE@nuvem.sj.ifsc.edu.br</span>:/home/$USERBLUE/.ssh   
  
 
* Testar se a chave criptográfica está funcionando
 
* Testar se a chave criptográfica está funcionando
  ssh -i jtagserverkey <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue@nuvem.sj.ifsc.edu.br</span> -p 2224
+
  ssh -i jtagserverkey <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE@nuvem.sj.ifsc.edu.br</span> -p 2224
  
 
* Conferir se a porta 1309 está aberta no green_host.
 
* Conferir se a porta 1309 está aberta no green_host.
netstat -lnt --wide |grep '1309\|State'<br />Proto Recv-Q Send-Q Local Address          Foreign Address        State      <br />tcp        0      0 0.0.0.0:1309            0.0.0.0:*              LISTEN
+
netstat -lnt --wide |grep '1309\|State'
 +
 
 +
  Proto Recv-Q Send-Q Local Address          Foreign Address        State       
 +
  tcp        0      0 0.0.0.0:1309            0.0.0.0:*              LISTEN
 +
 
 
* Criar o tunel ssh
 
* Criar o tunel ssh
  ssh -oStrictHostKeyChecking=no -i jtagserverkey -R 60000:localhost:1309 <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue@nuvem.sj.ifsc.edu.br</span> -p 2222 -N -f
+
  ssh -oStrictHostKeyChecking=no -i jtagserverkey -R 60000:localhost:1309 <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE@nuvem.sj.ifsc.edu.br</span> -p 2224 -N -f
 +
 
 +
====Script para reconfigurar o tunel ====
 +
 
 +
*Crie o arquivo '''jtagserver.sh''' com o conteúdo:
 +
export USERBLUE=
 +
export USERGREEN=
 +
export JTAGPORT=60000
 +
export JTAGPASSWORD=
 +
/opt/altera/13.0sp1/quartus/bin/jtagd
 +
/opt/altera/13.0sp1/quartus/bin/jtagconfig --enableremote $JTAGPASSWORD
 +
netstat -lnt --wide |grep '1309\|State'
 +
ssh -oStrictHostKeyChecking=no -i jtagserverkey -R $JTAGPORT:localhost:1309 $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224 -N -f -v
 +
 
 +
* Execute
 +
chmod +x jtagserver.sh
 +
./jtagserver.sh
  
 
===<span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">Na nuvem (blue_host)</span>===
 
===<span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">Na nuvem (blue_host)</span>===
  
 
* Acessar a nuvem com usuario_blue e senha e verificar se existe a pasta '''.ssh'''.
 
* Acessar a nuvem com usuario_blue e senha e verificar se existe a pasta '''.ssh'''.
  ssh <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue@nuvem.sj.ifsc.edu.br</span> -p 2224
+
  ssh <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE@nuvem.sj.ifsc.edu.br</span> -p 2224
 
  ls .ssh
 
  ls .ssh
  
Linha 61: Linha 89:
 
* Conferir se chave publica está aqui.
 
* Conferir se chave publica está aqui.
 
  ls -la .ssh/authorized_keys
 
  ls -la .ssh/authorized_keys
  -rw-r--r--  1 <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue</span> Domain Users  741 May 27 22:38 authorized_keys
+
  -rw-r--r--  1 <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE</span> Domain Users  741 May 27 22:38 authorized_keys
  
 
* Se OK, fazer logoff e logon com a chave privada.   
 
* Se OK, fazer logoff e logon com a chave privada.   
  ssh -i jtagserverkey <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">usuario_blue@nuvem.sj.ifsc.edu.br</span> -p 2222
+
  ssh -i jtagserverkey <span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">$USERBLUE@nuvem.sj.ifsc.edu.br</span> -p 2224
  
 
* Conferir se o túnel reverso ssh está aberto.  É possível conferir verificando se a '''porta 60000''' está aberta no blue_host.  
 
* Conferir se o túnel reverso ssh está aberto.  É possível conferir verificando se a '''porta 60000''' está aberta no blue_host.  
Linha 74: Linha 102:
 
* Se tudo OK, fazer logoff.
 
* Se tudo OK, fazer logoff.
  
===<span style="color: rgb(51, 102, 255);" data-mce-style="color: #3366ff;">Na nuvem (alunos) (red_host)</span>===
+
===<span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">Na nuvem (alunos) (red_host)</span>===
 +
 
 +
* Acessar a nuvem com <span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">USERBRED</span> através de ssh ou pelo x2go com seu login e senha.
 +
* Conferir se o túnel reverso está estabelecido na porta 60000.
 +
netstat -lnt --wide |grep '60000\|State'<br  />Proto Recv-Q Send-Q Local Address          Foreign Address        State      <br  />tcp        0      0 127.0.0.1:60000        0.0.0.0:*              LISTEN
 +
 
 +
* Executar o Quartus II e abrir o programador.  Configurar as '''JTAG Setting''', com Server: '''127.0.0.1:60000''' e senha '''********''' (pergunte a senha ao professor que estiver disponível, pois pode ter mais de um kit disponível).<br  />
 +
'''[[Arquivo:Screenshot from 2020-05-28 20-27-46.png|600px|center|middle|thumb|Configuração da jTAG]]'''
 +
* Se a conexão estiver OK, selecione a''' USB-Blaster '''indicada'''.'''
 +
'''[[Arquivo:Screenshot from 2020-05-28 20-20-55.png|600px|center|middle|thumb|Conexão com exito ao jTAG server remoto]]'''
 +
* Se tiver algum problema depois de configurado as''' JTAG Setting '''o Connection Status indicará o problema.
 +
[[Arquivo:Screenshot from 2020-05-28 19-00-53.png|600px|center|middle|thumb|Erro na configuração]]
 +
 
 +
==Uso do Laboratório Remoto pelo usuário da nuvem do IFSC==
 +
 
 +
# Acessar a nuvem [[Acesso ao IFSC-CLOUD (NUVEM)#Quartus II - Modelsim - QSIM]]
 +
# Desenvolver o sistema realizando todas as fases do projeto
 +
# Configurar o programador do quartus para acessar o jTAG server. Ver acima o procedimento de configuração do <span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;">usuario_red</span>.
 +
# Enviar o arquivo .sof para programar o kit.
 +
# Observar o funcionamento do hardware pela câmera do celular que está sendo mostrada no G-MEET.
 +
# Assista o abaixo o vídeo amador de como acessar o kit FPGA.
 +
 
 +
<center> {{#ev:youtube|AgxmpFXcU9Y }} </center>
 +
 
 +
===Programação via comandos de linha===
 +
:'''PASSO 1 -''' Obter a senha de acesso e a porta onde está o kit com o professor.  Note que podem estar disponíveis mais de um kits remotos. 
 +
export JTAGPORT=60000
 +
export JTAGPASSWORD=<password>
 +
export FILENAME=timer00_99
 +
 
 +
:'''PASSO 2 -''' Adicionar o jtag server, e testar se está OK?
 +
jtagconfig  --addserver 127.0.0.1:$JTAGPORT $JTAGPASSWORD
 +
jtagconfig
 +
 
 +
<i>
 +
1) USB-Blaster on 127.0.0.1:60000 [2-1.2]
 +
    020F40DD  EP3C40/EP4CE(30|40)
 +
</i>
 +
 
 +
::FONTE: jtagconfig --help
 +
 
 +
:'''PASSO 3 -''' Programar o FPGA usando o tunel e o jtag server:
 +
/opt/altera/13.0sp1/quartus/bin/quartus_pgm -m jtag -c "USB-Blaster on 127.0.0.1:$JTAGPORT" -o "p;$FILENAME.sof"
 +
 
 +
<i>
 +
    Info: *******************************************************************
 +
    Info: Running Quartus II 32-bit Programmer
 +
    Info: Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version
 +
    Info: Copyright (C) 1991-2013 Altera Corporation. All rights reserved.
 +
    Info: Your use of Altera Corporation's design tools, logic functions
 +
    Info: and other software and tools, and its AMPP partner logic
 +
    Info: functions, and any output files from any of the foregoing
 +
    Info: (including device programming or simulation files), and any
 +
    Info: associated documentation or information are expressly subject
 +
    Info: to the terms and conditions of the Altera Program License
 +
    Info: Subscription Agreement, Altera MegaCore Function License
 +
    Info: Agreement, or other applicable license agreement, including,
 +
    Info: without limitation, that your use is for the sole purpose of
 +
    Info: programming logic devices manufactured by Altera and sold by
 +
    Info: Altera or its authorized distributors.  Please refer to the
 +
    Info: applicable agreement for further details.
 +
    Info: Processing started: Tue Jun  2 14:46:36 2020
 +
    Info: Command: quartus_pgm -m jtag -c "USB-Blaster on 127.0.0.1:60000" -o p;timer00_99.sof
 +
    Info (213046): Using programming cable "USB-Blaster on 127.0.0.1:60000 [2-1.2]"
 +
    Info (213011): Using programming file timer00_99.sof with checksum 0x00207160 for device EP4CE30F23@1
 +
    Info (209060): Started Programmer operation at Tue Jun  2 14:46:37 2020
 +
    Info (209016): Configuring device index 1
 +
    Info (209017): Device 1 contains JTAG ID code 0x020F40DD
 +
    Info (209007): Configuration succeeded -- 1 device(s) configured
 +
    Info (209011): Successfully performed operation(s)
 +
    Info (209061): Ended Programmer operation at Tue Jun  2 14:46:39 2020
 +
    Info: Quartus II 32-bit Programmer was successful. 0 errors, 0 warnings
 +
    Info: Peak virtual memory: 127 megabytes
 +
    Info: Processing ended: Tue Jun  2 14:46:39 2020
 +
    Info: Elapsed time: 00:00:03
 +
    Info: Total CPU time (on all processors): 00:00:01
 +
</i>
 +
 
 +
::FONTE: [https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/tclscriptrefmnl.pdf Quartus II Scripting Reference Manual]
 +
 
 +
==Outras possibilidades estudadas==
 +
Antes de implementar a solução acima com túnel reverso, foi tentado realizar a criação do laboratório remoto usando um '''jtag server''' em uma maquina Windows 10, mas devido a existência do GCNAT na rede da NET-CLARO, não houve sucesso.  Nestas configurações fui auxiliado pelo prof. [[Roberto de Matos]] e pelo servidor da DTIC [[Humberto José de Sousa]].  Todas as configurações foram feitas e testadas, mas esbarramos ao final no GCNAT. Na tentativa de obter um IP público não tivemos sucesso por enquanto pois a NET não está atendendo trabalhos não prioritários.
  
* Acessar a nuvem com usuario_red através de ssh ou pelo x2go com seu login e senha.
+
==Agradecimentos==
 +
Agradeço ao aluno [[João Pedro Menegali Salvan Bittencourt]], pois sem a sua ajuda remota, explicando as configurações e funcionamento do túnel ssh reverso e uso de chaves criptográficas, este laboratório remoto não seria possível em um tempo tão curto. Agradeço ainda ao professor [[Ederson Torresini]] que se resolveu o problema da derrubada do tunel pelo serviço de acesso. Agradeço também ao [[Humberto José de Sousa]] pela ajuda e orientação na tentativa de fazer funcionar o laboratório remoto com acesso direto ao '''jtag server'''.   [[Usuário:Moecke|Marcos Moecke]] ([[Usuário Discussão:Moecke|discussão]]) 11h55min de 2 de junho de 2020 (-03)
  
*Executar o Quartus II e abrir o programador.  Configurar o
 
  
==Acesso pelo usuário da nuvem==
+
==Referências==
# acessar a nuvem [[Acesso ao IFSC-CLOUD (NUVEM)#Quartus II - Modelsim - QSIM]]
+
*https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/
# desenvolver o sistema realizando todas as fases do projeto
 
# configurar o programador do quartus para acessar o jTAG server através da porta 6000
 
# enviar o arquivo .sof para programar o kit.
 
# observar o funcionamento do hardware pela câmera do celular que está sendo mostrada no G-MEET.
 

Edição atual tal como às 12h12min de 2 de junho de 2020

Cenário utilizado

Para a programação remota de um kit MERCURIO IV, foi criado o seguinte cenário:

  1. Na casa do professor foi disponibilizado o kit MERCURIO conectado a um notebook com UBUNTU 20.04 e com o software Quartus II.
  2. Uma câmera de smartphone será usada para mostrar o funcionamento da placa.
  3. Os alunos utilizaram os serviços da nuvem.sj.ifsc.edu.br porta 2224 para fazer a programação

Preparando o servidor

  1. Instalar a versão 13.0sp1 no notebook.
  2. Fazer as configurações necessárias para acessar a JTAG. Configuração da USB para programação do FPGA via JTAG
  3. Testar se está funcionando o gravador LOCAL. Programando o FPGA através da USB-Blaster

Criando o tunel ssh

A proposta aqui é a criação de um tunel ssh reverso.

ReverseTunel.png

FONTE:

Servidor jTAG (green_host)

Para facilitar os script abaixo foram estabelecidas duas variáveis onde os login devem ser inseridos, evitando redigitar no código que segue.

export USERBLUE=usuario_bluehost
export USERGREEN=usuario_greenhost
export JTAGPORT=60000
export JTAGPASSWORD=password
echo USERBLUE USERGREEN
echo $USERGREEN $USERBLUE

Na maquina onde está o kit FPGA conectado, será instalado um server jTAG.

  • Conectar o jtag através de uma senha password a ser compartilhada com os alunos.
/opt/altera/13.0sp1/quartus/bin/jtagd
/opt/altera/13.0sp1/quartus/bin/jtagconfig --enableremote $JTAGPASSWORD
  • Gerar um conjunto de chaves jtagserverkey jtagserverkey.pub para acesso remoto através de chave privada e a publica, na pasta /home/$USERGREEN
ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/$USERGREEN/.ssh/id_rsa): jtagserverkey
jtagserverkey already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in jtagserverkey
Your public key has been saved in jtagserverkey.pub
  • Mudar o nome da chave publica jtagserverkey.pub para authorized_keys. Em seguida mover a chave para a conta do $USERBLUE na nuvem do IFSC (Blue). Essa chave permitirá que os usuarios_red acessem o túnel ssh reverso sem senha.
mv jtagserverkey.pub authorized_keys
scp -P 2224 authorized_keys $USERBLUE@nuvem.sj.ifsc.edu.br:/home/$USERBLUE/.ssh  
  • Testar se a chave criptográfica está funcionando
ssh -i jtagserverkey $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224
  • Conferir se a porta 1309 está aberta no green_host.
netstat -lnt --wide |grep '1309\|State'
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:1309            0.0.0.0:*               LISTEN
  • Criar o tunel ssh
ssh -oStrictHostKeyChecking=no -i jtagserverkey -R 60000:localhost:1309 $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224 -N -f

Script para reconfigurar o tunel

  • Crie o arquivo jtagserver.sh com o conteúdo:
export USERBLUE=
export USERGREEN=
export JTAGPORT=60000
export JTAGPASSWORD=
/opt/altera/13.0sp1/quartus/bin/jtagd
/opt/altera/13.0sp1/quartus/bin/jtagconfig --enableremote $JTAGPASSWORD
netstat -lnt --wide |grep '1309\|State'
ssh -oStrictHostKeyChecking=no -i jtagserverkey -R $JTAGPORT:localhost:1309 $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224 -N -f -v
  • Execute
chmod +x jtagserver.sh
./jtagserver.sh

Na nuvem (blue_host)

  • Acessar a nuvem com usuario_blue e senha e verificar se existe a pasta .ssh.
ssh $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224
ls .ssh
  • Se não tiver a pasta .ssh criar uma:
mkdir .ssh
exit ou [CTRL D]
  • Fazer o passo de cópia da chave publica para esta pasta (ver procedimento no blue_host).
  • Conferir se chave publica está aqui.
ls -la .ssh/authorized_keys
-rw-r--r--  1 $USERBLUE Domain Users  741 May 27 22:38 authorized_keys
  • Se OK, fazer logoff e logon com a chave privada.
ssh -i jtagserverkey $USERBLUE@nuvem.sj.ifsc.edu.br -p 2224
  • Conferir se o túnel reverso ssh está aberto. É possível conferir verificando se a porta 60000 está aberta no blue_host.
netstat -lnt --wide |grep '60000\|State'
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:60000         0.0.0.0:*               LISTEN 
  • Se tudo OK, fazer logoff.

Na nuvem (alunos) (red_host)

  • Acessar a nuvem com USERBRED através de ssh ou pelo x2go com seu login e senha.
  • Conferir se o túnel reverso está estabelecido na porta 60000.
netstat -lnt --wide |grep '60000\|State'
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:60000 0.0.0.0:* LISTEN
  • Executar o Quartus II e abrir o programador. Configurar as JTAG Setting, com Server: 127.0.0.1:60000 e senha ******** (pergunte a senha ao professor que estiver disponível, pois pode ter mais de um kit disponível).
Configuração da jTAG
  • Se a conexão estiver OK, selecione a USB-Blaster indicada.
Conexão com exito ao jTAG server remoto
  • Se tiver algum problema depois de configurado as JTAG Setting o Connection Status indicará o problema.
Erro na configuração

Uso do Laboratório Remoto pelo usuário da nuvem do IFSC

  1. Acessar a nuvem Acesso ao IFSC-CLOUD (NUVEM)#Quartus II - Modelsim - QSIM
  2. Desenvolver o sistema realizando todas as fases do projeto
  3. Configurar o programador do quartus para acessar o jTAG server. Ver acima o procedimento de configuração do usuario_red.
  4. Enviar o arquivo .sof para programar o kit.
  5. Observar o funcionamento do hardware pela câmera do celular que está sendo mostrada no G-MEET.
  6. Assista o abaixo o vídeo amador de como acessar o kit FPGA.

Programação via comandos de linha

PASSO 1 - Obter a senha de acesso e a porta onde está o kit com o professor. Note que podem estar disponíveis mais de um kits remotos.
export JTAGPORT=60000
export JTAGPASSWORD=<password>
export FILENAME=timer00_99
PASSO 2 - Adicionar o jtag server, e testar se está OK?
jtagconfig  --addserver 127.0.0.1:$JTAGPORT $JTAGPASSWORD
jtagconfig 

1) USB-Blaster on 127.0.0.1:60000 [2-1.2]
   020F40DD   EP3C40/EP4CE(30|40)

FONTE: jtagconfig --help
PASSO 3 - Programar o FPGA usando o tunel e o jtag server:
/opt/altera/13.0sp1/quartus/bin/quartus_pgm -m jtag -c "USB-Blaster on 127.0.0.1:$JTAGPORT" -o "p;$FILENAME.sof"

   Info: *******************************************************************
   Info: Running Quartus II 32-bit Programmer
   Info: Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version
   Info: Copyright (C) 1991-2013 Altera Corporation. All rights reserved.
   Info: Your use of Altera Corporation's design tools, logic functions 
   Info: and other software and tools, and its AMPP partner logic 
   Info: functions, and any output files from any of the foregoing 
   Info: (including device programming or simulation files), and any 
   Info: associated documentation or information are expressly subject 
   Info: to the terms and conditions of the Altera Program License 
   Info: Subscription Agreement, Altera MegaCore Function License 
   Info: Agreement, or other applicable license agreement, including, 
   Info: without limitation, that your use is for the sole purpose of 
   Info: programming logic devices manufactured by Altera and sold by 
   Info: Altera or its authorized distributors.  Please refer to the 
   Info: applicable agreement for further details.
   Info: Processing started: Tue Jun  2 14:46:36 2020
   Info: Command: quartus_pgm -m jtag -c "USB-Blaster on 127.0.0.1:60000" -o p;timer00_99.sof
   Info (213046): Using programming cable "USB-Blaster on 127.0.0.1:60000 [2-1.2]"
   Info (213011): Using programming file timer00_99.sof with checksum 0x00207160 for device EP4CE30F23@1
   Info (209060): Started Programmer operation at Tue Jun  2 14:46:37 2020
   Info (209016): Configuring device index 1
   Info (209017): Device 1 contains JTAG ID code 0x020F40DD
   Info (209007): Configuration succeeded -- 1 device(s) configured
   Info (209011): Successfully performed operation(s)
   Info (209061): Ended Programmer operation at Tue Jun  2 14:46:39 2020
   Info: Quartus II 32-bit Programmer was successful. 0 errors, 0 warnings
   Info: Peak virtual memory: 127 megabytes
   Info: Processing ended: Tue Jun  2 14:46:39 2020
   Info: Elapsed time: 00:00:03
   Info: Total CPU time (on all processors): 00:00:01

FONTE: Quartus II Scripting Reference Manual

Outras possibilidades estudadas

Antes de implementar a solução acima com túnel reverso, foi tentado realizar a criação do laboratório remoto usando um jtag server em uma maquina Windows 10, mas devido a existência do GCNAT na rede da NET-CLARO, não houve sucesso. Nestas configurações fui auxiliado pelo prof. Roberto de Matos e pelo servidor da DTIC Humberto José de Sousa. Todas as configurações foram feitas e testadas, mas esbarramos ao final no GCNAT. Na tentativa de obter um IP público não tivemos sucesso por enquanto pois a NET não está atendendo trabalhos não prioritários.

Agradecimentos

Agradeço ao aluno João Pedro Menegali Salvan Bittencourt, pois sem a sua ajuda remota, explicando as configurações e funcionamento do túnel ssh reverso e uso de chaves criptográficas, este laboratório remoto não seria possível em um tempo tão curto. Agradeço ainda ao professor Ederson Torresini que se resolveu o problema da derrubada do tunel pelo serviço de acesso. Agradeço também ao Humberto José de Sousa pela ajuda e orientação na tentativa de fazer funcionar o laboratório remoto com acesso direto ao jtag server. Marcos Moecke (discussão) 11h55min de 2 de junho de 2020 (-03)


Referências