Escolar Documentos
Profissional Documentos
Cultura Documentos
Mario Alexandre Gazziro Lirio Onofre Baptista de Almeida Coordenador: Jan Frans Willem Slaets
Organizao
Parte 1: Demonstrao com binrios j preparados Parte 2: Compilao do NIOS II e sntese da FPGA Parte 3: Acrscimo do controlador de I/O ao barramento AVALON Parte 4: Instalao do cross-compilador nios2gcc Parte 5: Compilao do kernel do uClinux com recursos bsicos Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer Parte 7: Instalao do mdulo de controle de I/O junto ao kernel Parte 8: Compilao cruzada de aplicativo para acessar o I/O via mdulo do kernel
Arquivos utilizados:
Roteiro:
Entrar no "Nios II Command Shell" e mudar para o diretrio onde se encontram os arquivos acima. Carregamento do arquivo SOF (SRAM OBJECT FILE) >nios2-configure-sof DE2_NIOS_HOST_MOUSE_VGA_time_limited.sof Entrar em outro interpretador "Nios II Command Shell" Carregamento da imagem do kernel e do sistema de arquivos raiz >nios2-download -g zImage_de2_vga Boot do uClinux via console JTAG >nios2-terminal O uClinux vai apresentar as mensagens de boot atravs do terminal do NiosII O smbolo /> indica o prompt do interpretador de comandos SASH (Standalone Shell) usado no uClinux
Shell invoked to run file: /etc/rc Command: hostname uClinux Command: mount -t proc proc /proc Command: mount -t sysfs sysfs /sys input: AT Raw Set 2 keyboard as /class/input/input0 Command: mount -t usbfs none /proc/bus/usb Command: mkdir /var/tmp Command: mkdir /var/log Command: mkdir /var/run Command: mkdir /var/lock Command: mkdir /var/empty Command: ifconfig lo 127.0.0.1 Command: route add -net 127.0.0.0 netmask 255.0.0.0 lo Command: cat /etc/motd Welcome to
____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_|
For further information check: http://www.uclinux.org/ Execution Finished, Exiting Sash command shell (version 1.1.1) />
lo
Ajuste de rota (via gateway) e habilitao de servidores de ftp e telnet Definio da rota padro />route add default gw 192.168.180.1 />route
Kernel IP routing table Destination Gateway 192.168.180.0 * 127.0.0.0 * default 192.168.180.1 Genmask 255.255.255.0 255.0.0.0 0.0.0.0 Flags U U UG Metric 0 0 0 Ref 0 0 0 Use 0 0 0 Iface eth0 lo eth0
Inicializao do servidor de FTP e TELNET embutido no BusyBox />inetd & >ftp 192.168.180.116
Conectado a 192.168.180.116. 220- Welcome to the uClinux ftpd! 220 uClinux FTP server (GNU inetutils 1.4.1) ready. Usurio (192.168.180.116:(none)): ftp 331 Guest login ok, type your name as password. Senha: 230 Guest login ok, access restrictions apply. ftp>
>telnet 192.168.180.116
Sash command shell (version 1.1.1) />
Montagem de pasta em computador externo via NFS (sobre uma pasta exportada na mquina 192.168.180.122 chamada home/nios2) />mkdir /mnt/nfs />mount -t nfs -n -o nolock,rsize=1024,wsize=1024 192.168.180.122:/home/nios2 /mnt/nfs Inicializao do servidor Web />boa &
Inicializao do ambiente de janelas Nano-X />nano-X & />nanowm & Visualizao do logotipo do IFSC pelo aplicativo nxview />nxview /mnt/nfs/IFSC.jpg
Criao dos devices para comunicao com o controlador de I/O />mknod /dev/iodata c 240 0 />mknod /dev/iodir c 241 0 Execuo do aplicativo de teste do controlador de I/O />cd /mnt/nfs />./teste
Imprimindo 1010101b nos leds verdes
Arquivos utilizados:
Roteiro:
Extrair o contedo do arquivo DE2_NIOS_HOST_MOUSE_VGA.ZIP para o diretrio \altera\qdesignsXX (onde XX a verso do Quartus). Extrair os demais arquivos comprimidos (indicados acima) para o diretrio \altera\qdesignsXX\DE2_NIOS_HOST_MOUSE_VGA Executar o programa Quartus II Abrir o projeto DE2_NIOS_HOST_MOUSE_VGA.qpf Acessar o menu Tools, opo SOPC Builder Clicar no boto Generate e aguardar a compilao da CPU do Nios II. Clicar em Exit Clicar 2 vezes no componente SDRAM_PLL e seguir o tutorial de PLL at o fim para gerao dos arquivos necessrios para a nova configurao de clock (de 50 para 100MHz). No ambiente do Quartus, selecionar menu Processing e submenu Start Compilation Verificar se a compilao ocorreu corretamente.
OBS: Um novo arquivo em verilog descrevendo a PLL de 100MHz j foi extrado no diretrio de trabalho, mas mesmo assim o tutorial de PLL deve ser executado para complementar os arquivos necessrios.
);
end entity pio eigen;
pio_eigen.vhd altera_vhdl_support_lib.vhd
Roteiro:
Copiar os arquivos indicados acima para o diretrio \altera\qdesignsXX\DE2_NIOS_HOST_MOUSE_VGA Abrir o projeto DE2_NIOS_HOST_MOUSE_VGA.qpf Acessar o menu Tools, opo SOPC Builder Clicar 2 vezes sobre "Create New Component..." Selecionar o TAB "HDL Files" Clicar em "Add HDL File..." Selecionar "altera_vhdl_support_lib.vhd" Aguardar a verificao do componente e clicar em Ok Clicar novamente em "Add HDL File..." Selecionar "pio_eigen.vhd" Aguardar a verificao do componente e clicar em Ok Selecionar o TAB "Signals" e verificar se aparecem os sinais de controle do avalon Selecionar o TAB "Component WizardDI" e escolher um nome para o grupo do componente:
Component Group: DIPTERALAB Selecione YES para salvar as alteraes no componente Selecione o grupo DIPTERALAB na lista de componentes do NIOS II Clique 2 vezes sobre o componente recm criado "pio_eigen" Clicar em "Finish" Clicar em "Generate" Clicar em "Exit"
OBS: Anotar o endereo no qual o componente foi instalado no barramento Avalon. Neste exemplo, o valor foi 0x00400000 , porm este endereo varia sempre. O componente instanciado se chama pio_eigen_0
No Quartus, com o projeto aberto, editar a linha 413 do arquivo DE2_NIOS_HOST_MOUSE_VGA.v : .out_port_from_the_led_green(LEDG), deve se tornar: .out_port_to_and_from_the_pio_eigen_0(LEDG), para associar os pinos do KIT DE2 ligados aos leds verdes ao novo componente criado. No menu "Project", selecionar "Add/Remove Files in Project..." Adicionar primeiro o arquivo "altera_vhdl_support_lib.vhd" e depois o arquivo "pio_eigen.vhd" Salvar o projeto Selecionar menu "Processing" e submenu "Start Compilation" Verificar se a compilao ocorreu corretamente.
nios2gcc.tar.bz2 nios2libs.tar.bz2
Roteiro:
Extrair os arquivos acima no diretrio raiz >su >tar jxf nios2gcc.tar.bz2 -C / >tar jxf nios2libs.tar.bz2 -C / >exit As ferramentas de cross-compilao sero instaladas no diretrio /opt/nios Ajuste o Path para
PATH=$PATH:/opt/nios2/bin:$HOME/bin
Arquivos utilizados:
Roteiro:
Extrair o arquivo uClinux-dist-20070130.tar.gz no diretrio do usurio ($home) e aplicar o patch >tar -zxvf uClinux-dist-20070130.tar.gz >cd uClinux-dist >zcat ../uClinux-dist-20070130-nios2-02.diff.gz | patch -p0
Selecionar kernel verso 2.6.x, excluir a Libc e ajustar para configuraes padro.
Kernel/Library/Defaults Selection ---> (linux-2.6.x) Kernel Version (None) Libc Version [*] Default all settings (lose changes) [ ] Customize Kernel Settings [ ] Customize Vendor/User Settings [ ] Update Default Vendor Settings Then <exit> <exit> <yes>
Copiar o arquivo system_0.ptf , gerado pelo SOPC Builder do Nios II (contendo especificaes do processador) para o diretrio ~/uClinux-dist/linux-2.6.x/ >make vendor_hwselect SYSPTF=system_0.ptf Escolher a partir de qual memoria o kernel deve inicializar. Escolher 1, 1 e 2 para SDRAM. Cria imagem do sistema de arquivos >make romfs Compila o kernel + filesystem, estilo initramfs >make (o primeiro make pode falhar, por causa da compilao concorrente) >make Cria imagem contendo o kernel e o sistema de arquivos para ser carregada na memoria do kit. >make linux image
Para entrar nas configuraes do kernel e dos aplicativos: >cd ~uClinux-dist >make menuconfig
Kernel/Library/Defaults Selection ---> (linux-2.6.x) Kernel Version (None) Libc Version [ ] Default all settings (lose changes) [*] Customize Kernel Settings [*] Customize Vendor/User Settings [ ] Update Default Vendor Settings
File systems -> Network File Systems --> [*] NFS file system support [*] Provide NFSv3 client support
select input device drivers, Device Drivers --> Input device support --- Generic input layer (needed for keyboard, mouse, ...) [ ] Userland interfaces [*] Mouse interface [ ] Provide legacy /dev/psaux device # DESELECIONAR ESTA OPO! (1024) Horizontal screen resolution (768) Vertical screen resolution
if you will use PS/2 mouse or keyboard, --Input Device Drivers [*] Keyboard ---> <*> AT keyboard [*] Mouse ---> <*> PS/2 mouse Hardware I/O ports ---> --- Serial I/O support [ ] i8042 PC Keyboard controller [ ] Serial port line discipline
MicroWindows ---> [*] MicroWindows --- Compiling Options [*] Optimize --- Libraries [*] NanoX --- Demos [*] NanoXDemo --- Applications [*] NanoWM --- Settings (Packed-16bit-5/6/5) Screeen PixType [ ] Link App into server [*] Have File IO [*] Have JPEG Support be selected --- Display Config [*] Frame Buffer Display --- Mouse/Touch Screen [*] Serial Mouse --- Keyboard [*] Scan Keyboard --- Install These Applications [*] Nano-X [*] NanoWM [*] NTetris [*] NXclock [*] NXterm [*] NXView
Arquivos utilizados:
nios2rootfs.tar.bz2 nios2-uClinux-additional_hardware-files.tar.gz
Roteiro:
Extrair o arquivo nios2rootfs.tar.bz2 na rea $home do usurio Acrescentar as linhas no arquivo "rootfs_list" no diretrio ~/uClinux-dist/vendors/Altera/nios2nommu
nod /dev/iodata 666 0 0 c 240 0 nod /dev/iodir 666 0 0 c 241 0
Alterar o arquivo "io.c" colocando o endereo que foi atribuido automaticamente no barramento avalon para o registrador de dados e acrescente 1 para o endereo do registrador de endereos.
/* register addresses */ #define DATA_REGISTER 0x00400000 #define DIR_REGISTER 0x00400001
OBS: O arquivo deve ser mantido terminando com "endmenu" >make menuconfig
Kernel/Library/Defaults Selection ---> (linux-2.6.x) Kernel Version (None) Libc Version [ ] Default all settings (lose changes) [*] Customize Kernel Settings [ ] Customize Vendor/User Settings [ ] Update Default Vendor Settings
Retornar ao menu principal e sair Selecionar "Device Drivers --> Misc Devices"
[*] IO module for custom IO
Parte 8: Compilao cruzada de aplicativo para acessar o I/O via mdulo do kernel Arquivos utilizados:
pio_eigen.h teste.c
Roteiro:
No computador desktop, realizar a cross-compilao do aplicativo de teste: >nios2-linux-uclibc-gcc teste.c -o teste -elf2flt="-s 16000" -Wall Copiar o aplicativo teste para o diretrio /home/nios2/ visvel para o NFS do kit altera Executar o aplicativo de teste a partir do shell do uClinux />cd /mnt/nfs />./teste
Imprimindo 1010101b nos leds verdes
#include <stdio.h> #include <unistd.h> #include "pio_eigen.h" int main(void) { /* define todos os pinos como saida */ write_dev(dir_file,255); printf("Imprimindo 1010101b nos leds verdes\n"); write_dev(dat_file,0x55); return(0); }
Parte 8: Compilao cruzada de aplicativo para acessar o I/O via mdulo do kernel
#define DIR_FILE "/dev/iodir" #define DAT_FILE "/dev/iodata" typedef enum{dat_file,dir_file} files; // read from device file and return value of byte unsigned char read_dev(files file) { char string[5]={0}; FILE *f=NULL; int i=0; /* open requested file for reading */ switch(file) { case dat_file: f=fopen(DAT_FILE,"r"); break; case dir_file: f=fopen(DIR_FILE,"r"); break; } /* read line */ while((i<5) && (string[i++]=fgetc(f))); fclose(f); /* return value */ return atoi(string); } // write byte to device file void write_dev(files file, unsigned char val) { char string[5]={0}; FILE *f=NULL; /* open requested file for writing */ switch(file) { case dat_file: f=fopen(DAT_FILE,"r+"); break; case dir_file: f=fopen(DIR_FILE,"r+"); break; } /* read line */ itoa(string,val); fprintf(f,string); fclose(f); }
No SASH: />echo "255" > /dev/iodir />echo "85" > /dev/iodata />cat /dev/iodata
Referncias
DE2 Kit information: http://users.ece.gatech.edu/~hamblen/DE2/ SASH Shell: http://members.tip.net.au/~dbell/ Busybox: http://www.busybox.net/ Nioswiki JotSpot: http://nioswiki.jot.com/WikiHome/%C2%B5Clinux Nios II uClinux with additional hardware: http://piie.net/index.php?section=nios Niosforum: http://www.niosforum.com/ Uclinux: http://www.uclinux.org/ The Nano-X System: http://www.microwindows.org/