0% acharam este documento útil (1 voto)
221 visualizações28 páginas

Tutorial Uclinux

Este documento apresenta um tutorial sobre como configurar e utilizar um sistema uClinux rodando sobre uma CPU Nios II na FPGA DE2 da Altera, contendo 7 partes: 1) Demonstração com binários pré-compilados 2) Compilação do Nios II e síntese da FPGA 3) Adicionando um controlador de I/O 4) Instalando o cross-compilador Nios 2GCC 5) Compilando o kernel uClinux 6) Adicionando suporte de rede e framebuffer 7) Compilando aplicativos para acessar o I/O.

Enviado por

nnlicomm
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (1 voto)
221 visualizações28 páginas

Tutorial Uclinux

Este documento apresenta um tutorial sobre como configurar e utilizar um sistema uClinux rodando sobre uma CPU Nios II na FPGA DE2 da Altera, contendo 7 partes: 1) Demonstração com binários pré-compilados 2) Compilação do Nios II e síntese da FPGA 3) Adicionando um controlador de I/O 4) Instalando o cross-compilador Nios 2GCC 5) Compilando o kernel uClinux 6) Adicionando suporte de rede e framebuffer 7) Compilando aplicativos para acessar o I/O.

Enviado por

nnlicomm
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy