sexta-feira, 5 de abril de 2013

Tutorial 5 - Configurando servidor TFTP e NFS.

      Olá amigos embarcados, estamos aqui mais uma vez continuando com os nossos tutoriais, visando futuramente acionarmos a nossa placa de desenvolvimento Beagle Board.

         Com esse nosso 4° Tutorial iremos aprender a como realizar a gravação, à partir de um servidor NFS e TFTP, das imagens a serem gravadas no SD Card da nossa Beagle Board.

         A vantagem dessa maneira é que com ela não precisaremos ficar preocupados em sempre estar com as imagens no computador local, ou seja, aonde estivermos, se houver um ponto de rede ou sem fio, poderemos realizar a gravação das imagens para o SD card e assim realizarmos o Boot da Beagle Board.



Obs:. Se não houver um espaço entre linhas, não havendo um : entre os comandos deste tutorial, quer dizer que há um espaço entre palavras na digitação e não entre linhas.




Abaixo seguem os passos necessários para a configuração do servidor NFS:

A) Para que se seja possível configurar um servidor NFS, deve-se realizar os seguintes passos:


1° passo: Baixar o pacote do servidor NFS digitando o seguinte comando abaixo:

$ sudo apt-get install nfs-kernel-server




2° passo: Criar ou editar as permissões do arquivo /etc/exports, abaixo pode-se ver o arquivo citado:


---------------------------------------------------------------------------------
---------------------------------------------------------------------------------                                                                                                                                                   
#                                                                                                                                                                                                                                                                                                                                                                                                                                              
# Exemplo para NFSv2 e NFSv3:                                                                                            
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)                                                                                                                                            
#                                                                                                                                                                                                                                                                                                                                                                                                                                          
# Exemplo para NFSv4:                                                                                                              
# /srv/nfs4    gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)                                      
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)                                                                                                                                                                                                                                                                                                                                                    
#                                                                                                                                            
/home/jackbeagle/rootfs    *(rw,sync,no_subtree_check)                                                              
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------


-------> O primeiro parâmetro a ser mudado neste arquivo acima será o PATH no seu linux, ou seja, a última linha do arquivo onde se pode constar /home/jackbeagle/rootfs. No caso, você deverá modificar o nome "jackbeagle" pelo o nome de usuário no qual está em uso.



------->  O * foi colocado no (rw,sync,no_sbtree_check) para que assim seja possível que todos os hosts possam   acessar o diretório via NFS, mas não é poss'ivel selecionar os host um a um, como por exemplo abaixo:


/home/jackbeagle/rootfs 129.168.0.123 (rw,sync,no_subtree_check)




3°passo: Reiniciar o servidor NFS com o seguinte comando abaixo:

$ sudo /etc/init.d/nfs-kernel-server restart  



4°passo: Testar se o servidor NFS está OK:

-------> De uma máquina presente na rede, ou do próprio Host, executar os comandos abaixo:


$ mkdir alguma_pasta

$ sudo mount -t nfs  

endereço.ip.do.servidor:/home/jackbeagle/rootfs alguma_pasta


--------> o rootfs do linux deve aparecer na pasta alguma_pasta


B) Configurando o U-Boot para NFS:

------->Setar as seguintes variáveis no U-boot:

set rootfs_path /path/to/your/rootfs

set bootargs_base 'set bootargs console=${console} noinitrd rw'

set bootargs_nfs 'set bootargs ${bootargs} ip=${ipaddr}::${netmask} root=/dev/nfs nfsroot=${serverip}:${jackbeagle},4'

set bootcmd_net 'run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${serverip}:uImage; bootm ${loadaddr}'

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Abaixo seguem os passos necessários para a configuração do servidor TFTP:


Para configurar um servidor TFTP: é necessário realizar os seguintes passos:
Não esquecer de que o computador em uso será



1° passo: no pc de desenvolvimento, baixar os pacotes necessários:

1 - Os pacotes necessários:


$ sudo apt-get install xinetd tftpd tftp




2 - Criar o arquivo /etc/xinetd.d/tftp (se ja não tiver sido criado) e preenchê-lo com o seguinte texto abaixo:
--------------------------------------------

service tftp                                     
{                                                      
protocol        = udp                         
port            = 69                              
socket_type     = dgram                
wait            = yes                            
user            = nobody                     
server          = /usr/sbin/in.tftpd     
server_args     = /srv/tftp               
disable         = no                            
}                                                      

--------------------------------------------





--------------> Modificar a entrada "server_args =" para a pasta onde ficará a raiz do servidor tftp. 

  Pode ser qualquer pasta de sua preferência. Assim, sempre que um cliente executar a 
  instrução tftp:

get NOME_DO_ARQUIVO






    O servidor procurará pelo NOME_DO_ARQUIVO na pasta especificada em server_args
3 - Criando a pasta do servidor TFTP

$ sudo mkdir /srv/tftp
$ sudo chmod -R 777 /srv/tftp
$ sudo chown -R nobody /srv/tftp







4 - Reiniciando o servidor TFTP:

$ sudo /etc/init.d/xinetd start







5- Testar se a configuração funcionou

a) criar um arquivo qualquer na pasta /srv/tftp:

$ echo "funcionou :)" > /srv/tftp/hello






b) numa máquina diferente na mesma rede ou no próprio pc de desenvolvimento, rodar o comando abaixo:

$ tftp SEU_ENDEREçO_IP

tftp> get hello







----------->Nesse momento, o programa deve dar algum indicativo que o download foi feito e o arquivo 'hello' deve aparecer na pasta onde o comando tftp foi rodado.



B) No u-boot:
1 - Setar a seguinte variável no u-boot:

CM-T3517 # set tftpload 'tftpboot ${loadaddr} ${serverip}:uImage'






2 - Usar a variável tftpload no lugar da mmcload que está sendo usada atualmente

----------------------------------------------------------------------------------------------------------FIM DO TUTORIAL--------------------------------------------------------------------------------------------------------------


Então, basicamente são todas essas instruções acima que se deve seguir para que haja um bom funcionamento do seu servidor, seja via NFS ou seja via TFTP. Qualquer dúvida basta entrar em contato conosco via: 

embarcados.unifor@gmail.com


Até o próximo tutorial!

Tutorial 4 - Baixando e Configurando o Buildroot.







Tutorial 4 - Parte 1 - Baixando e Descompactando o Buildroot.




Tutorial 4 - Parte 2 - Configurando o Buildroot.


Primeiramente será necessário fazer o download do buildroot (http://buildroot.uclibc.org/download.html)  e descompacta-lo na Home.


Com o buildroot descompactado, é necessário baixar as atualizações dos programas de desenvolvimento. Abra o terminal e siga os passos:

  1. Instale a subversion do Ubuntu: sudo apt-get install subversion
  2. Instale os seguintes programas: sudo apt-get install build-essential bison flex gettext libncurses5-dev autoconf automake libtool
  3. sudo apt-get install texinfo
  4. Os seguintes pacotes podem ser uteis no desenvolvimento: sudo apt-get install libpng12-dev libglib2.0-dev libgtk2.0-dev gperf  libxt-dev libxp-dev

Com todos os programas devidamente instalados, e com o diretorio atual sendo o diretorio do buildroot, digite make menuconfig no terminal e a seguinte tela aparecerá:


Use as setas do telcado para navegar para cima e para baixo, as setas para os lados para escolher “Select” ou “Exit”, enter para confirmar e Y ou N para selecionar ou desselecionar um item.
Em “Target Architecture” selecione “ARM (little  endian)”.


Selecione “generic_arm” em “Target Architecture Variant”.



Para “Target ABI”, utilize “EABI”



Entre em “Build Options” e coloque 2 em “Number of jobs to run simultaneously”


Em “Toolchain”, habilite “Enable large file (files > 2GB)” e “Enable WCHAR support”


Altere a “Port to run a getty” para ttyO2 e escolha um nome para seu sistema em “System hostname”


Selecione, em “Host Utilities”, “host omap-u-boot-utils” e “host u-boot tools”.


Volte para o menu inicial e no próximo item, “Filesystem Images”, marque “ext2 root filesystem”.


Em “Bootloaders”, selecione a caixa “U-Boot”, expandindo novas opções. Utilize a tecla enter para mudar o nome em “U-Boot board name” para “omap3_beagle”, modifique “U-Boot binary format” para “u-boot.img” e renomeie “U-Boot SPL target name” para “MLO”.


Vá em “Kernel” e ative “Linux Kernel”, expandindo mais opções. Tecle enter em “Defconfig name” e digite “omap2plus”.


Agora bastar selecionar “Exit” no menu inferior e salvar quando for pedido.


De volta ao terminal, digite o commando make e aguarde. O processo de download e instalação via levar algum tempo.