sábado, 10 de agosto de 2013

Aula 1 - Instalando o Oracle VM VirtualBox

Este tutorial descreve a instalação do Oracle VM VirtualBox.

Requerimentos:
  • Sistema operacional compatível com o VirtualBox
Observações:

  • O sistema operacional usado foi o Windows

Instalação do VirtualBox





Entre no site do VirtualBox (https://www.virtualbox.org/), baixe seu instalador.




Baixe o VirtualBox Oracle VM Virtual Box Extension Pack (referente a versão do VirtualBox instalado), ele servirá para instalar binários referentes aos devices de Usb 2.0, VirtualBox RdP e PXE boot para Intel cards. 



Inicie a instalação do VirtualBox, clique em next > next > next > yes > install > instalar (nas 3 janelas que abrirem na sequência) > finish.








Inicie a instalação do VirtualBoxOracle VM VirtualBox Extension Pack clique em instalar > "Eu concordo".







segunda-feira, 10 de junho de 2013

Tutorial 9 - compilação Device Driver e Load de modulo no Kernel


Olá Pessoal!

Neste 9 tutorial vamos fazer compilar e adicionar ao kernel linux um modulo de device drivers. Você pode tanto adiciona-lo estaticamente, compilando os fontes e habilitando a opção no menu de configuraçao, quanto adicionado como módulo dinamicamente quando achar necessario. Os passos que faremos são os mesmo para qualquer arquitertura, lembrando sempre que você deve mudar os atributos ARCH e CROSS_COMPILE quando tiver uma arquiterura diferente, falando de ARM, por exemplo, ficaria make ARCH=arm CROSS_COMPILE=arm-none-linux-genueabi- .
Vamos começar!

Usaremos os fontes de um driver fornecido chamado simple_char! Que pode ser baixado nos links abaixo.

Primeiramente use o comando para descomprimir o arquivo

gunzip simple_char.zip

Feito isso temos os arquivos:

ioctl.c – Biblioteca de comandos de controle
Makefile – arquivo de configuraçao da compilação, aqui podemos especificar path de instalção, qual compilador devera ser usado.
simple_char.c – fontes do driver
simple_ioctl.h – configuração de ioctl para o driver
simple_load – shellscript que faz o carregamento do driver no kernel
simple_unload – shellscript que faz o descarregamento do modulo no kernel

Mova o driver para uma pasta de sua preferencia e torne o diretorio corrente.

cd /simple_char
dentro do diretorio chame o comando

make


verificamos o seguinte erro:


Isso se deve que o driver adiciona um no struct do fops um atributo de ioctl utilizado para kernel de versões anteriores a 2.6.36. Para corrigir abra os fonte do simple_char.c

gedit simple_char
na linha 287 comente o sequinte codigo:
Feito isso novamente execute o make

make

verifique a mensagem confirmando execução e que os arquivos .o foram gerados.

obs: aqui compilamos para x86 mas o procedimento é o mesmo para todas a arquiteturas adicionando somente os paramentros ARCH e CROSS_COMPILE ficaria:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

feito isso temos o arquivo compilado e vamos adiciona-lo ao kernel usando o shellscript

sudo sh simple_load

para verificar se o modulo esta “online” utilize 
o lsmod para verificar se ele foi inicializado

lsmodpara remover utilize o script de remoção

sudo sh simple_unload

 agora para remove-lo vamos utilizar o script unload

sudo sh simple_unload


utilizaremos o comando

lsmod | grep simple_char 

para procurar na lista de modulos se o nosso simple_char ainda esta la
 

 
confirmando que ele foi removido com sucesso!!!

Abaixo segue video com maiores detalhes do tutorial




bom pessoal por hoje é isso!
Aprendemos a compilar um modulo de acordo com a arquitetura e adiciona-lo ao kernel dinamicamente.
Bom hackeamento do kernel pra vocês e open source na veia!!!
té!






sábado, 1 de junho de 2013

Tutorial 8 - Realizando um Debug Remoto com o Eclipse para a BeagleBoard-xm via ssh



Neste oitavo tutorial será ensinado a como realizar um debug remoto de qualquer aplicação para BeagleBoard-xm via ssh.

Este Tutorial possui 2 videos que poderão ser visualizados logo abaixo, bem como documentado logo abaixo dos videos.


Debugando Remotamente [Parte 1]



Primeiramente vá em Windows > Open Perspective > Other. Selecione "Remote System Explorer" e clique em OK.


Clique com o botão direito na área do explorer, vá em New > Connection. Selecione Linux como o seu SO e clique em Next. Abra um terminal e digite o comando ifconfig para obter seu IP e o insira no campo de IP da janela no Eclipse no campo "Host Name", escreva uma descrição para sua placa e clique em Next. 


Selecione a caixa "ssh.file" e clique em Next. Process shell escolha "processes.shellLinux" e clique em Next. Escolha "ssh.shells" e clique em Next. Na próxima janela clique em Next.



No explorer, clique no ip da sua placa para expandir e clique em seguida em My Home. Clique em Ok na nova janela e aceite todos os próximos avisos.




Agora basta clicar em "Root" para acessar o diretório remoto.

Debugando Remotamente [Parte 2]



Vá no menu Run > Debug Configuration. Clique duas vezes sobre "C/C++ Remote Application" para abrir a janela de configurações.


Em Browse, vá na pasta home e crie uma nova pasta com o nome do seu projeto e dê Ok. Adicione ao caminho final /*nome do seu projeto*.


Para finalizar digite "sudo" na text box de "Commands to execute before application" e clique em Ok. Pronto, seu eclipse está pronto para debuggar remotamente!






Tutorial 7 - Instalando o GDB server na Beagle Board

GDB server é um programa de computador que faz com que seja possível depurar remotamente outros programas.

Em execução no mesmo sistema que o programa a ser depurado, ele permite que o GNU Debugger se conectar a partir de outro sistema, isto é, somente o programa executável é necessário para ser depurado e precisa ser residente no sistema de destino, enquanto que o código-fonte, que é uma cópia do arquivo binário a ser depurado, reside no computador local do desenvolvedor. 

A conexão pode ser TCP ou uma linha serial.

Abaixo segue as linhas de comando necessárias para se instalar o GDB server na BeagleBoard-xm.

Para executar estes comando, o usuário deverá estar no Shell da BeagleBoard:



# opkg update

# opkg install task-native-sdk

# opkg update

# opkg install gdb

# opkg install gdbserver

quarta-feira, 29 de maio de 2013

Tutorial 6 - Setup do Eclipse com a toolchain do buildroot.

Segue abaixo um tutorial para fazer setup do eclipse para utilizar a toolchain gerada pelo buildroot dos tutoriais anteriores.

1. Pelo terminal, vá ate o diretório /buildroot-2012.11.1/output/host/usr/arm-buildroot-linux-uclibcgnueabi/bin/ e verifique através do comando 'ls' se o arquivo executável (verde) gcc está dentro dela. Esse será o compilador utilizado pelo eclipse.



2. Abra o Eclipse e crie um novo projeto em C, com a toolchain sendo a Cross C.




3 Em "Cross compelir prefix" deixe em  branco e em "Cross compelir path" digite o path do passo 1




Pronto, seu eclipse já está utilizando a toolchain do buildroot para compilar os arquivos!

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.