Você está na página 1de 28

Tutorial de uClinux sobre NIOS II

Mario Alexandre Gazziro Lirio Onofre Baptista de Almeida Coordenador: Jan Frans Willem Slaets

DIPTERALAB IFSC USP


www.dipteralab.ifsc.usp.br/novo

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

Parte 1: Demonstrao com binrios j preparados

Arquivos utilizados:

DE2_NIOS_HOST_MOUSE_VGA_time_limited.sof zImage teste

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

Parte 1: Demonstrao com binrios j preparados


uClinux/Nios II Altera Nios II support (C) 2004 Microtronix Datacom Ltd. setup_arch: No persistant network settings signature at 003F0000 Built 1 zonelists. Total pages: 2032 Kernel command line: PID hash table entries: 32 (order: 5, 128 bytes) Console: colour dummy device 80x25 Dentry cache hash table entries: 1024 (order: 0, 4096 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory available: 5452k/8192k RAM, 0k/0k ROM Mount-cache hash table entries: 512 NET: Registered protocol family 16 NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 1024 (order: 0, 4096 bytes) TCP bind hash table entries: 1024 (order: 0, 4096 bytes) TCP: Hash tables configured (established 1024 bind 1024) TCP reno registered fb0: Altera frame buffer device, using 600K of video memory altps2 : base 80682010 irq 9 io scheduler noop registered io scheduler deadline registered (default) Serial: JTAG UART driver $Revision: 1.3 $ ttyJ0 at MMIO 0x806810f0 (irq = 1) is a jtag_uart <DM9KS> I/O: 806810f8, VID: 90000a46 mice: PS/2 mouse device common for all mice TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 Freeing unused kernel memory: 896k freed (0x9a4000 - 0xa83000)

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) />

Parte 1: Demonstrao com binrios j preparados

Realizar a configurao da rede TCP/IP ajustando o IP />ifconfig eth0 192.168.180.116 />ifconfig


eth0 Link encap:Ethernet HWaddr 00:07:ED:00:00:00 inet addr:192.168.180.116 Bcast:192.168.180.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:247 (247.0 B) TX bytes:0 (0.0 B) Interrupt:6 Base address:0x10f8 Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo

Parte 1: Demonstrao com binrios j preparados

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) />

Parte 1: Demonstrao com binrios j preparados

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 &

Parte 1: Demonstrao com binrios j preparados

Inicializao do ambiente de janelas Nano-X />nano-X & />nanowm & Visualizao do logotipo do IFSC pelo aplicativo nxview />nxview /mnt/nfs/IFSC.jpg

Parte 1: Demonstrao com binrios j preparados

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

Parte 2: Compilao do NIOS II e sntese da FPGA

Arquivos utilizados:

DE2_NIOS_HOST_MOUSE_VGA.ZIP Avalon_VGA_Controller.zip PS2.zip de2_vga.zip

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.

Parte 3: Acrscimo do controlador de I/O ao barramento AVALON


entity pio eigen is port ( inputs: signal address : IN STD LOGIC VECTOR (1 DOWNTO 0); signal chipselect : IN STD LOGIC; signal clk : IN STD LOGIC; signal reset n : IN STD LOGIC; signal write n : IN STD LOGIC; signal read n : IN STD LOGIC; signal writedata : IN STD LOGIC VECTOR (7 DOWNTO 0); 10 outputs: signal out port : INOUT STD LOGIC VECTOR (7 DOWNTO 0); signal readdata : OUT STD LOGIC VECTOR (7 DOWNTO 0)

);
end entity pio eigen;

Parte 3: Acrscimo do controlador de I/O ao barramento AVALON Arquivos utilizados:


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:

Parte 3: Acrscimo do controlador de I/O ao barramento AVALON


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

Parte 3: Acrscimo do controlador de I/O ao barramento AVALON

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.

Parte 4: Instalao do cross-compilador nios2gcc Arquivos utilizados:


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

Verifique a instalao com o comando >nios2-linux-uclibc-gcc -v


Reading specs from /opt/nios2/lib/gcc/nios2-linux-uclibc/3.4.6/specs Configured with: /root/buildroot/toolchain_build_nios2/gcc-3.4.6/configure -prefix=/opt/nios2 --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu -target=nios2-linux-uclibc --enable-languages=c --enable-shared disable__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls enablethreads --disable-multilib --enable-cxx-flags=-static Thread model: posix gcc version 3.4.6

Parte 5: Compilao do kernel do uClinux com recursos bsicos

Arquivos utilizados:

uClinux-dist-20070130.tar.gz uClinux-dist-20070130-nios2-02.diff.gz system_0.ptf

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

Iniciar a configurao do kernel >make menuconfig

Ajusta o fabricante: Altera, nios2nommu


Vendor/Product Selection ---> --- Select the Vendor you wish to target (Altera) Vendor --- Select the Product you wish to target (nios2nommu) Altera Products

Parte 5: Compilao do kernel do uClinux com recursos bsicos

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

Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer Roteiro:

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

Retornar ao menu principal e sair

Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer

Dentro da configurao do kernel, a rede deve ser configurada como a seguir:


Networking --> [*] Networking support Networking options ---> <*> Packet socket <*> Unix domain sockets [*] TCP/IP networking Device Drivers -->Network device support > [*] Network device support [*] Ethernet (10 or 100Mbit) [ ] [ ] [ ] [ ] [*] SMC 91C9x/91C1xxx support Opencores (Igor) Emac support MoreThanIP 10_100_1000 Emac support DM9000 support DM9000A with checksum offloading

File systems -> Network File Systems --> [*] NFS file system support [*] Provide NFSv3 client support

Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer

Nas configuraes do kernel, fazer os ajustes para suporte ao Nano-X


Processor type and features --> --- Platform drivers Options [*] Avalon VGA controller support [*] PS2 controller Device Drivers --> Character devices ---> [*] Virtual terminal [ ] Support for console on virtual terminal select the frame buffer driver, Device Drivers --> Graphics support Console display driver support ---> [ ] VGA text console < > Framebuffer Console support ---> # DESELECIONAR ESTA OPO!

# DESELECIONAR ESTA OPO!

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

Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer

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

# DESELECIONAR ESTA OPO! # DESELECIONAR ESTA OPO!

Retornar ao menu principal e sair

Nas configuraes dos aplicativos que vo compor o filesystem, selecionar:


Library Configuration--> [*] Build libZ [*] Build libjpeg

Parte 6: Compilao do kernel com suporte a rede e uso de framebuffer

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

Sair e salvar. Seguir as etapas finais para compilao como na Parte 4.

Parte 7: Instalao do mdulo de controle de I/O junto ao kernel

Arquivos utilizados:

nios2rootfs.tar.bz2 nios2-uClinux-additional_hardware-files.tar.gz

Parte 7: Instalao do mdulo de controle de I/O junto ao kernel

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

Extrair o arquivo "io.c" de nios2-uClinux-additional_hardware-files.tar.gz e colocar no diretorio


~/uClinux/linux-2.6.x/drivers/misc

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

No mesmo diretrio, editar o arquivo Makefile, acrescentando a linha:


obj-$(CONFIG_IO) += io.o

Parte 7: Instalao do mdulo de controle de I/O junto ao kernel

Ainda no mesmo diretorio, editar o arquivo Kconfig acrescentando a seo:


config IO tristate "IO module for custom IO" help Enable module to access custom IO.

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

Sair e salvar. Seguir as etapas finais para compilao como na Parte 4.

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/

Você também pode gostar