UV TL53 UTBM



µcLinux

= Linux embarqué

Présentation

I) µcLinux

µClinux est une distribution Linux faite pour être implémentée sur des µC de platines embarquées.

Linux embarqué:

( A quoi cela sert: On peut implémenter des applications faites pour Linux. Sans µcLinux, on doit faire le code pour faire des drivers du matériel de la carte ( par exemple TCP/IP ).

source:

( Comment on l'utilise: On compile un noyau linux avant en intégrant les drivers => image dédiée à la cible.

On le transfère ensuite dans la mémoire de la carte selon le dispositif disponible pour la carte.

( Capacité de la cible: On doit transférer une image d'environ 2 Mo ( donc il faut au moins 4 Mo )

quels processeurs ??? 32 bits OK mais 24 bits comme PIC 24 ????



( Définir les drivers: On va recompiler le noyau en y intégrant les éléments dont on a besoin sur la carte embarquée.

= "board specific kernel"

II) Etapes du projet

Il faut 3 fichiers ptf, sof et zImage.

Test avec des fichiers sof et zImage existants

µcLinux = Création du noyau Linux pour

le microprocesseur NIOS2 = ptf et sof existants,

création de zImage ( recompiler noyau )

Implémentations d'applications Linux

Modification des fichiers ptf et sof,

Utilisation des périphériques LED, LCD, carte son,...

Implémentation d'un téléphone SIP

( intégration de l'application à la recompilation au noyau )

III) Platine TERASIC DE2-xx et outils de développement

Le matériel utilisé pour ce projet est la platine Terasic DE2-xxx

( )

( Eléments du projet

Les éléments qui interviennent sont:

|ALTERA DE2-xxx |platine avec FPGA altera + UART + USB + carte son + RAM + Ethernet + Flash + VGA + ... |

| |Elle est développée par la société Terasic |

| |xxx = version de la platine ( le FPGA et les composants autour changent selon la version ) |

|FPGA |Le composant programmable de la platine. |

| |Pour platine DE2-xxx c'est un Cyclone2 EP2C35 de marque ALTERA |

|Quartus |IDE = Logiciel qui fait interface de développement d'applications. |

|( 1er CDROM v6 |Il intègre différents logiciels. Pour Quartus II on trouve les logiciels |

|1er DVDROM v11 ) |-> ????????? |

| |-> ????????? |

|SOPC Builder |Permet de ????????? |

| |intégré dans Quartus ??????? |

| |Permet de développer des applications en HDL ( High Developpment Langage ) |

| |-> Soit Verilog HDL |

| |-> Soit VHDL |

| |intégré dans Quartus |

|NIOS2 |Microprocesseur logiciel ( Soft Processeur ) défini dans la suite de logiciel Quartus |

| |=> le FPGA de la platine devient un microprocesseur 32 bits RISC |

|NIOS EDS |IDE = Logiciel qui fait interface de développement d'applications. |

|( Embedded Design Suite ) |Il est basé sur Eclipse. |

|( 2nd CDROM v6 | |

|1er DVDROM v11 ) | |

|Nios II Command Shell |- Logiciel indépendant des IDE qui permet en particulier de transférer des images puis de communiquer avec la |

| |platine ( commande nios-terminal ). |

| |- Il est sous windows ( fichier.exe ) ou sous Linux ( fichier.sh ) |

| |- Il est sur le CD-ROM "Nios EDS", une fois installé l'ensemble, faire une recherche "Nios" pour trouver le |

| |répertoire. |

| |- Une fois lancé, on peut taper help pour voir les commandes disponibles. |

( Versions de la carte Térasic DE-xx

Les versions de cartes DE2 sont ( )

|DE2 2C35 dev board |

|DE2-70 dev board |

|DE1 dev board |

|Nios II Embedded Evaluation Kit, Cyclone III Edition, including Cyclone III starter kit (aka the "NEEK") |

|Cyclone III starter kit only |

|Cyclone III FPGA Development Kit |

|Altera Nios dev board 3C120 edition |

|Altera Nios dev board 2C35 edition (not DSP board 2C35) |

|Altera Nios dev board 1C20 edition |

|Altera Nios dev board 2S60 ROHS edition |

|Altera Nios dev board 1S10 edition |

|Altera Nios dev board 1S40 edition |

En salle 03 on a

- des cartes DE2 2C35 ( écrit simplement DE2 avec rien après )

-> décrite par la documentation

-> FPGA = Cyclone II EP2C35F672C6N

- le logiciel Quartus II.6.1 ( 32 bits ) sous windows

=> Il faut installer NIOS II IDE ( 2nd CDROM ) qui n'a pas besoin de licence mais a besoin de Quartus II qui a besoin d'une licence.

source:

( Logiciels d'un projet sur carte DE-xx

|pqf |Fichier projet Quartus |

|v |Fichier Verilog HDL |

|qar |Fichier Quartus II Project Archived |

|ptf |peripheral template file Fichier texte qui décrit les périphériques d'un microprocesseur NIOS |

| |The .ptf file contains the processor and peripheral details for a given Nios II configuration including the IRQ mappings, memory|

| |address ranges for the memory and I/O peripherals, and a list of the names and types of the peripherals selected in the SOPC |

| |Builder. |

|sof |????? |

|*.GDF ou *.BDF |Schéma : mode de saisie graphique par association de symboles fichiers associés |

source:

Eléments composants la carte DE2

( figure 2.2 p6 de DE2_UserManual.pdf )

Phase 1

Utilisation d'images ucLinux déjà faites

( sof et zImage donnés,

ptf pas nécessaire car on ne recompile pas ucLinux )

On utilise des fichiers déjà faits trouvés sur Internet pour se familiariser avec les outils de développement et tester les logiciels:

I) Fichiers du site web

( Implémentation sur la platine

On charge le sof et la zImage à

|Configurer le FPGA en Nios II sous Linux |Configurer le FPGA en Nios II sous Windows |

| | |

|- Installer Quartus II et NiosII EDS |- Installer Quartus II et NiosII EDS ( CD v11 web edition sans licence )|

|( pas en root, si erreur faire ls -l /bin/sh |sous windows |

| cela donne dash à la place de "/bin/sh -> bash" sous Ubuntu, donc on fait sudo|- Brancher la carte DE2 via USB au PC, installer le driver USB-Blaster. |

|rm /bin/sh puis sudo ln -s bash /bin/sh |( lui indiquer c:\altera\11.1\quartus/drivers/usb-blaster ) |

|penser à /etc/udev/rules.d/51-usbblaster.rules et modifs des droits selon |- Faire une recherche sur le PC de "nios" pour trouver " Nios II |

| ). Pour |Command Shell" |

|quartus 9, sudo apt-get install csh et lien symbo csh |- Démarrer ce programme " Nios II Command Shell" |

|- cd altera/11.0sp1/nios2eds | |

|- ./nios2_command_shell.sh | |

|Configurer le FPGA en Nios II |

|- Charger le fichier DE2_NIOS_HOST_MOUSE_VGA.sof sur |

| |

|- Taper nios2-configure-sof DE2_NIOS_HOST_MOUSE_VGA.sof |

|( faire ls pour vérifier que le fichier est là et utiliser l'autocompletion ) |

| |

|=> On a le message d'info dans la fenêtre du " Nios II Command Shell": |

|Quartus II Programmer was successful. 0 errors, 0 warnings |

|Charger le fichier image et démarrer l'image du noyau ( Download and run the kernel image ) |

|- Taper dans le " Nios II Command Shell" la commande |

|nios2-download -g zImage_DE2_NIOS_HOST_MOUSE_VGA v1.6 |

| |

|=> On a le message d'info dans la fenêtre du " Nios II Command Shell": |

|Downloaded 1346KB in 23.1s (58.2KB/s) |

|Verified OK |

|Starting processor at address 0x02500000 |

| |

|The kernel image was built with File:DE2 NIOS HOST MOUSE VGA.ptf (was system_0.ptf) in the project |

|DE2_System_v1.6/DE2_demonstrations/DE2_NIOS_HOST_MOUSE_VGA of the DE2 v1.6 CD. |

|- Taper la commande dans le " Nios II Command Shell" |

|nios2-terminal |

| |

|=> On voit ucLinux booter puis le prompt dans le " Nios II Command Shell" |

nios2-download -g charge en RAM => reset avec KEY0 perd tout

Dans DE2_UserManual.pdf, on parle de

Demonstration Setup, File Locations, and Instructions (DE2_UserManual.pdf )

Project directory: DE2_NIOS_HOST_MOUSE_VGA

Bit stream used: DE2_NIOS_HOST_MOUSE_VGA.sof

Nios II Workspace: DE2_NIOS_HOST_MOUSE_VGA

• Connect a USB Mouse to the USB Host Connector (type A) of the DE2 board

• Connect the VGA output of the DE2 board to a VGA monitor (both LCD and CRT type of monitors should work)

• Load the bit stream into FPGA

• Run the Nios II and choose DE2_NIOS_HOST_MOUSE_VGA as the workspace. Click on the Compile and Run button

• You should now be able to observe a blue background with an Altera logo on the VGA display

• Move the USB mouse and observe the corresponding movements of the cursor on the screen

• Left-click mouse to draw white dots/lines and right-click the mouse to draw blue dots/lines on the screen.

( Test de ucLinux

( Commandes unix disponibles:

- On tape help pour voir les commandes disponibles.

- On va sous /bin pour voir les programmes installés => Pas de gcc

=> Pas d'éditeur vi ou nano

=> boa = serveur web et ftp ( config dans etc/boa.conf

répertoire dans /home )

- L'image intègre la carte réseau ( voir les premiers messages ). On met un câble ethernet croisé.

ifconfig montre seulement lo => ifconfig eth0 up

ifconfig montre l'interface eth0

ifconfig eth0 192.168.1.3 netmask 255.255.255.0

- ps montre les processus en cours

- cat /proc/cpuinfo montre le processeur utilisé NIOS2 à 100 MHz

- cat /proc/meminfo montre la mémoire disponible

- cat etc/version pour voir la version: ici c'est version 3.2.0 fait en 2008

- more /etc/rc montre ce qui a été lancé au boot

- pas d'éditeur vi ou nano

( Affichage sur l'écran VGA: Non car pas d'applications Xwindows ????

( Sur le port série on n'a rien.

( souris, écran, clavier reconnus mais pas gérés car pas de ????

platine autonome ???? quelle Entrée/sortie pour Linux de la platine ???????

II) Fichiers du livre Rapid Prototyping of Digital System ( RPDS )

On essaie d'autres fichiers prédéfinis selon le livre Rapid Prototyping of Digital Systems:



( Implémentation sur la platine

|nios2-configure-sof rpds18.sof |

|nios2-download -g zImage |

| |

|The reference μClinux kernel provided here supports a VGA monitor, a PS/2 keyboard or mouse, USB HID devices (i.e., keyboards, mice), USB |

|memory sticks, Ethernet communication, and serial UART console terminal. |

|La platine démarre de manière autonome ( nios2-terminal ne donne rien ) => On a un mini PC après 10s. |

| |

|Remarque: En branchant un cable série et en utilisant HyperTerminal ( 115200-8-N-1 Sans Ctrl flux ) on accède aussi à la console μClinux en |

|azerty. |

( Test de ucLinux

On a une détection automatique de clavier PS/2 et souris USB ( plug and play ).

=> Si on branche clavier PS/2, souris USB, on a un PC de base, un écran s'affiche après nios2-download -g zImage grâce à nano-X.

Attention: le clavier est qwerty ( / = !, m= ?, .=/, w=z, _=°, &=7 ), et il n'y a pas de backspace.

Commande de cette image de ucLinux:

|Commandes Linux |ls |List the files and folders in the current directory. |

| |ps |List les infos ( dont le PID ) des processus actifs. |

| |kill |Arret un processus actif dont on donne le PID. |

| |free |Lists the amount of used and available memory. |

| |ping |Starts a network utility that can be used to test network communication. |

| |ifconfig |Configuration réseau. |

| |dhcpd |Démarre un CLIENT DHCP. |

| |ftpd |Démarre un serveur ftp ( répertoire des sources dans /home/ftp ). |

| |telnetd |Démarre un serveur telnet pour accéder à la console μClinux par le réseau. |

| |boa |Démarre un serveur web léger ( répertoire racine dans /home/httpd/ ). |

| |mount |Used to mount/access different filesystems including USB memory sticks. |

| |nano-X |Starts a windowing environment in μClinux. |

| |nanowm |Starts a window manager that runs in the nano-X environment. |

| |nxterm |Ouvre une nouvelle fenêtre de terminal dans nano-X qui a été démarré. |

| |ntetris |Démarre un jeu Tetris dans environnement graphique nano-X. |

| |nxview |Affichage d'une image JPEG dans une fenêtre dans nano-X. |

|Commande |flash_leds |Programme C qui a été inséré dans l'image compilée pour illustrer la gestion des LED. |

|via utilitaire | |= boucle de 0 à 255 et on allume les LED rouges de la platine selon code binaire correspondant. |

|dédié à la platine | | |

( cat /etc/version montre que c'est la version 3.2.0 fait en 2007

( Si on ne met pas de souris USB, on peut mettre une clé usb stockage qui apparaitra en /dev/sda1

mkdir /mydrive

mount –t vfat /dev/sda1 /mydrive

( Pour le réseau

ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX

avec dhcp

ifconfig eth0 up

dhcpcd &

( Utilisation des LED: on tape "flash_leds" et les nombres binaires qui s'incrémentent allument les diodes rouges.

( flash_leds & pour le faire tourner en tache de fond )

( passage en azerty pas faisable car ????passage en azerty ? ou est gestionnaire de clavier ????????

( On va sous /bin puis /sbin pour voir les applications installées

on a aussi stty = gestion des I/O.

on n'a pas d'éditeur

( On branche le port série en 115200-8-n-1 sur la platine DE2. => On voit le boot. On a un terminal linux en azerty.

( ??????????? autres, voir livre

( On voit l'utilisation de la mémoire en tapant: ps

( On ouvre un autre terminal en tapant: nxterm& ( nxterm en tâche de fond = on a encore accès à la ligne de commande )

On voit le numéro de processus qui lui est associé.

=> On peut fermer la fenêtre en tapant: kill n°

( reboot sans tout effacer ( KEY0, prg en RAM ) => par commande ??????? reboot ???

( faire un serveur

- config afdresse IP: ifconfig

- charger les fichiers ( dans /home/httpd )

- démarer le serveur web boa si ce n'est fait

( sinon expliquer comment est fait le démarrage au boot = ligne de commande ??? ajoutée au fichier ???? )

Phase 2

Création d'une image ucLinux

( ptf et sof donnés,

J’utilise les ptf et sof de de2vga_nommu  ( system_0.ptf et de2vga.sof )  avec la distrib uCLinux de rpds ( mais pas les ptf et sof de rpds !! ) = quartus v9 sans erreur

on crée le zImage )

I) Fichiers nécessaires

On veut tester l'affichage vidéo VGA et apprendre à compiler la distribution ucLinux.

A ce stade j'ai chargé ptf et sof à

=> Stockage d el'image compressée du noyau en SDRAM et exécution en SDRAM donc on aura des problèmes de tailles avec les 8 Mo maxi de SDRAM et on changera.

|Il faut un ptf pour la compilation |

|un sof pour le chargement |

|Ils doivent être cohérents |

|Pb: les ptf et sof définissent le controleur VGA avec le nom VGA_0 ( voir dans le ptf qui est un fichier texte ) |

|alors que uclinux dans le fichier nios2-linux/linux-2.6/drivers/video/altfb.c utilise le nom vga_controller_0 |

|=> Soit on refait le ptf et le sof ( pb de version de logiciel ? de licence ? ) |

|=> Soit on modifie nios2-linux/linux-2.6/drivers/video/altfb.c |

II) Préparation du PC linux pour la compilation

On met en place les outils pour pouvoir compiler le noyau ucLinux-dist

source:

|Préparation PC |sudo apt-get update |

|Ubuntu 10 | |

| |sudo apt-get install git-core git-gui make gcc ncurses-dev bison flex gawk \ |

| |gettext ccache zlib1g-dev libx11-dev texinfo liblzo2-dev pax-utils uboot-mkimage corkscrew |

| | |

| |ls -l /bin/sh |

| | |

| |cela donne dash à la place de "/bin/sh -> bash", |

| |donc on fait |

| |sudo rm /bin/sh |

| |sudo ln -s bash /bin/sh |

| | |

| |vérifier que l'on a "cc" lien symbolique vers gcc: |

| |which gcc |

| |gcc -v |

| |which cc |

| |cc -v |

| |Sinon pour le faire: |

| |cd /usr/bin |

| |ln -s gcc cc |

| | |

| |En gcc 4.6 cela ne marche pas ( ubuntu 12 ) |

| |( NE PAS FAIRE Comme j'ai gcc 4.6 et qu'il parle de 4.2, je fais: |

| |sudo rm /usr/bin/gcc sudo ln -s gcc-4.2 /usr/bin/gcc car le build ne trouve pas gcc) |

|Chargement |- wget * . |

|du Linux pour NIOS sur site|- les mettre dans un répertoire tars sauf le files.md5sum |

|Altera |- dans /home/rt lancer la vérification des fichiers: md5sum --check files.md5sum |

|( 6 Go, ftp cachant les |- déplacer les tgz de tars à /home/rt: mv /tars/*.* /home/rt |

|fichiers ) |- supprimer tars qui est vide: rm -Rf tars |

|=> avoir du temps |- décompresser, pas être en root: tar -xzv ce qui crée automatiquement /nios2-linux |

|Chargement |wget |

|du cross-compiler |mettre dans /home/rt/nios2-linux |

|Ubuntu-NIOS |décompresser, pas être en root: tar -xvf nios2gcc-20080203.tar.bz2 |

|sur site Altera | |

| |Cela extrait les fichiers vers nios2-linux/opt |

| |cd nios2-linux |

| |./checkout ( vérifie via git les versions ) |

|Build the toolchain |cd toolchain-build ( dans /home/rt/nios2-linux ) |

| |gcc --version ( pour vérifier que l'on voit bien le lien symbolique gcc ) => 4.2 sinon erreur |

| |git clean -f -x -d |

| |make gcc |

| |make elf2flt |

| |# suite pas indispensable ??? I still get errors trying to make gdb-host, so I'm skipping it for now... |

| |# make distclean si on a fait un essai déjà ( c'est écrit quelquepart dans messages d'erreur ) |

| |make gdb-host |

| |=> avoir du temps |

| |cd .. |

| | |

| |si erreur: gcc: c-parse.c: Aucun fichier ou dossier de ce type |

| |It can be solved by modifying file nios2-linux/gcc3/gcc/c-parse.y. |

| |From the line 1650, 1661, 1670 and 1675 modify $$ to $$. |

| |For example change the line 1650 from { $$ = start_struct (RECORD_TYPE, $2); to { $$ = start_struct (RECORD_TYPE, $2);|

| | |

| |Si erreur msync: Autre version de la compilation en plusieurs étapes |

| |cd nios2-linux/linux-2.6 |

| |git fetch origin ( c'est très long, cela doit scanne rles fichiers ) |

| |git branch test-nios2 origin/test-nios2 |

| |git checkout -f test-nios2 |

| | |

| | |

| |cd nios2-linux/toolchain-build |

| |git clean -f -x -d #clean on restart |

| |make gcc |

| |make elf2flt |

| |#I still get errors trying to make gdb-host, so I'm skipping it for now... |

| |#make gdb-host |

| | |

| |-> Faire "locate nios2-linux-uclibc-flthdr " = un programme créé par make elf2flt et utilisé ensuite |

| |=> dans /home/rt/opt/nios2/bin on a les raccourcis vers les exécutables |

| |=> dans /home/rt/nios2-linux//toochain-build/buils/nios2/bin on a les exécutables |

| |nios2-linux-flthdr ( sans le uclib du raccourci ) |

|Utilisation du |-> Ajouter le chemin par défaut d'installation ( toolchain-build/build/nios2 ) dans le fichier caché |

|Crosscompiler |~/.bashrc ( ou ~/.bash_profile si on n'est pas sous Ubuntu ) de /home/rt |

|( toolchain ) |ls -a pour le trouver |

|et |ajouter à la fin une ligne PATH=$PATH:/home/rt/nios2-linux/toolchain-build/build/nios2/bin |

|test | |

| |-> Fermer la session et rouvrir pour prendre en compte la modification |

| | |

| |-> Vérifier que l'OS trouve le logiciel grâce au chemin de recherche des commandes: |

| |nios2-linux-uclibc-gcc -v |

| | |

| |-> Créer un fichier hello.c |

| |#include |

| |int main(void) |

| |{ |

| |printf("hello world"); |

| |return 0; |

| |} |

| | |

| |-> Compiler le fichier test: nios2-linux-uclibc-gcc -elf2flt hello.c -o hello |

| |L'objet compilé est au format FLAT. |

| | |

| |-> Vérifier que le logiciel exécutable est compréhensible: nios2-linux-uclibc-flthdr hello |

| |( pour l'exécuter il faut une architecture Nios = copier dans romfs/bin et recompiler le noyau, voir ensuite ) |

III ) Création d'image = Compilation du noyau

Le PC est prêt pour créer l'image du noyau ucLinux

|Construire |- Installer cd .. pour xconfig |

|l'image du noyau | |

|ucLinux |- cd uClinux-dist ( dans /home/rt/nios2-linux ) |

| | |

| |- J'ai chargé un fichier ptf dans les démonstrations et renommé en system_0.ptf |

|= BUILD KERNEL |Je prends le sof qui est associé |

| |Le ptf utilisé pour la compilation doit être celui utilisé pour créer le sof utilisé à la configuration !!! |

| | |

| |-> make xconfig ou make menuconfig |

| |Si erreur dans make xonconfig, faire make menuconfig |

| |Si erreur menuconfig, virer le fichier mconf de /config/kconfig ( voir détails erreur ) |

| |=> Vendor ALTERA |

| |=> Project nommu |

| |=> ne rien cocher dans "Kernel/Library/Defaults Selection" |

| | |

| |-> make vendor_hwselect SYSPTF=/home/rt/nios2-linux/uClinux-dist/system_0.ptf |

| |=> Choix cpu = nios2 = 1 |

| |=> Choix RAM = SDRAMM 8Mo = 2 |

| | |

| |-> make |

| |=> erreur de boa qui demande daemon ( mise en tache de fond de boa ) |

| | |

| |Je modifie le fichier src: |

| |Cd /user/boa/boa-0.94.14rc21/src |

| |Sudo gedit boa.c |

| |Je vais à la ligne de l'erreur et mets le paragraphe en remarque |

| |// if (do_fork) { |

| |// if (daemon(1, 1)) { |

| |// perror("daemon"); |

| |// exit(EXIT_FAILURE); |

| |// } |

| |// } |

| | |

| |A la fin on a en particulier une ligne dans les messages Kernel: arch/nios2/boot/zImage is ready |

| |Le noyau compressé est un fichier nommé zImage de format ELF dans le réperoire indiqué. |

| | |

| |- cd linux-2.6.x/arch/nios2/boot et on a le fichier zImage |

On a chargé le fichier sof qui décrit le matériel de la platine

On a créé le fichier image de la distibution ucLinux

On transfère le fichier sof sur la platine Altera DE2 en DDR RAM ( choix 2ème make ) via le NIOS Shell:

|Transfert de |- cd /home/rt/quartus/11.1/nios2eds |

|l'image à la |- ./nios2_command_shell.sh |

|platine |Jtagconfig pour vérifier que l'USB-Blaster est bien reconnu |

| |nios2-configure-sof fichier.sof |

| |nios2-download -g zImage |

| |nios2-terminal |

On la charge => Cela ne marche pas

L'image est trop grosse, on n'a plus de mémoire => Kernel panic

Il faut faire des choix lors de la construction du noyau ( kernel build ).

Pour vérifier que c'est bien cela, on construit une image minimale:

|make menuconfig |

|dans "Kernel/Library/Defaults Selection" cocher "Customize Kernel Settings" |

|=> en quittant on aura un menu de sélection. |

|ATTENTION c'est sensible |

|ATTENTION: on a vide ( pas activé ) , M ( config par module ) et * ( activé selon build ) => M ≠ * |

| |

|Si erreur: difficile de corriger => make distclean ( qui détruit répertoire imageb) |

|=> make menuconfig remettre Alter, nommu |

|defaults settings et mettre N à toutes demandes !!! |

|taper entrée ( cela prend la réponse suggérée en majuscule ) |

On vérifie que l'image se charge ( logo µcLinux ).

Mais en testant on constate que l'on ne peut pas faire grand chose.

Il faut customiser le noyau par rapport à la platine Terasic "Altera DE2". Comme c'est sensible, on le fait par étapes.

|-> Charger rpds.sof et la zImage associée ( livre rapid protoyping of digital system ) |

| |

|Messages de boot: |

|Memory Available 5744k/8192k |

|1473k Kernel / 694k Data |

On part de la config par défaut et on construit l'image

|Make menuconfig -> Customize kernel pour la platine DE2: ( ) |

|Exit, exit, yes ce qui lance l'interface de configuration. |

| |

|* Processor type and features > CPU : NIOS2 |

|> Plateform: Altera DE2 Developpment Board |

|( pas Altera NIOS II Embedded Evaluation Kit = NEEK ) |

|* Enlever Networking Support - -> Wireless |

|--> Networking options --> IPsec |

|--> The IPv6 protocol |

| |

|Avant de compiler on modifie un fichier d'affichage pour la suite: |

|* Modif de /nios2-linux/linux-2.6/drivers/video/altfmb.c: Remplacer vga_controller_0 par VGA_0 qui est utilisé dans ces ptf et sof |

| |

| |

|make vendor_hwselect SYSPTF=/home/rt/nios2-linux/uClinux-dist/system_0.ptf |

|=> Choix cpu = nios2 = 1 |

|=> Choix RAM = SDRAMM 8Mo = 2 |

|make |

| |

|-> Charger ALTERAWIKI_DE2_NIOS_HOST_MOUSE_VGA.sof et zImage créée |

|( Prendre le fichier zImage.initramfs.gz dans nios2-linux/uCLinux-dist/images, |

|zImage est un lien symbolique vers ce fichier, |

|le copier dans altera/11.0sp1/nios2eds, |

|le renommer en zImage ) |

|Jtagconfig pour vérifier que l'USB-Blaster est bien reconnu |

|nios2-configure-sof ALTERAWIKI_DE2_NIOS_HOST_MOUSE_VGA.sof |

|nios2-download -g zImage |

|nios2-terminal |

| |

|Messages de boot: |

|Memory Available 5272k/2637k |

|1650k Kernel / 987k Data |

| |

|Pourquoi on n'a plus 8192k en memory available ??????? mauvaise partition ???????? |

|Pourquoi message "mount not found" ? |

C'est la version T2_BT_Ubuntu_10.04_ucLinux__v5_Base_OK.

Ensuite il y a toujours des problèmes de mémoire et la configuration de ce noyau ne permet pas apparemment de gérer la mémoire pour ce applications embarquées ( pas mis un pach uclinux pour nios ??? ou le git mal appliqué ??? )

Sur le web on parle de la gestion mémoire avec pour des fichiers de plus de 1 Mo dans

menuconfig: Processor type and features ===> [X] Allow allocating large blocks (> 1MB) of memory

Mais je n'ai pas cette option dans ma version et ce sont des messages de 2007-2008 alors que j'ai la version 2012.

Bref changement de direction: J'efface le répertoire ucLinux-dist et le remplace par celui du livre Rapid Prototyping of Digital Systems qui donne un zImage proche de ce qu'on veut.

Ayant regardé le projet du livre, il est en quartus v6 et je ne peux le modifier avec quartus v9, v11 et v12 essayés.

Mais j'avais trouvé les ptf, sof et zImage d'un autre projet: Fichiers du site Alterwiki page de2vga_nommu

C'est intéressant car le stockage du noyau se fait en mémoire flash, on a toute la SDRAM pour exécuter ucLinux.

make menuconfig: La configuration du noyau est déjà bonne pour le projet de base ( VGA, souris, clavier ).

make vendor_hwselect SYSPTF=/home/rt/nios2-linux/uClinux-dist/system_0.ptf

On a le µP NIOS2, on stocke le noyau en mémoire flash, on l'exécute en SDRAM: 1,1,2

make => Des erreurs, il y a des adaptations à faire:

|Ajouter #include au fichier qui fait l'erreur 'PATH_MAX' = sumversion.c |

|pb compil bibliothèque ljpeg et libz car les liens symboliques sont ceux du PC de l'auteur ( tyson ) => on adapte à notre pc: |

| |

|cd /home/rt/nios2-linux/uClinux-dist/lib |

|ls -l |

|rm libjpeg.a |

|sudo ln -s /home/rt/nios2-linux/uClinux-dist/lib/libjpeg/libjpeg.a libjpeg.a |

|rm libz.a |

|sudo ln -s /home/rt/nios2-linux/uClinux-dist/lib/zlib/libz.a libz.a |

|On a des définitions de qui ajoute des fonctions non standard à |

|( bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp… ) |

| |

|Le plus simple est de remplacer ces utilisations de fonctions pour revenir à des fonctions standards: |

| |

|=> remplacer bzero() par memset()       memset a besoin de 3 arguments, mettre le second à 0 |

|=> remplacer bcopy() with memcpy(),        bcopy(src, dst, len); devient  memset(dst, src, len); |

|                                                                ordre arguments 1 2 3 -> 2 1 3 |

|=> remplacer index par strchr |

|=> remplacer rindex par strrchr |

| |

|source: |

| |

|ligne 328 bzero    sudo gedit /home/rt/nios2-linux/uClinux-dist/user/boa/src/auth.c      |

|ligne 325 bzero    sudo gedit /home/rt/nios2-linux/uClinux-dist/user/boa/src/config.c |

|ligne 949 index     sudo gedit  /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/cmds.c |

|ligne 2011 index   sudo gedit  /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/cmds.c |

|ligne 2015 index   sudo gedit  /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/cmds.c |

|ligne 1556 rindex sudo gedit /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/ftp.c |

|ligne 797 rindex    sudo gedit /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/ftp.c |

|ligne 121 index     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/ruserpass.c |

|ligne 126 index     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/ftp/ftp/ruserpass.c |

|ligne 115 bzero     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/ftpd/logwtmp.c |

|ligne 583 bzero     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/inetd/inetd.c |

|ligne 628 bzero     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/init/simpleinit.c |

|ligne 505 index      sudo gedit /home/rt/nios2-linux/uClinux-dist/user/sash/sash.c |

|ligne 501,507, 513, 518, 589 bcopy     |

|sudo gedit /home/rt/nios2-linux/uClinux-dist/user/telnetd/telnetd.c   |

|ligne 955 bzero    sudo gedit /home/rt/nios2-linux/uClinux-dist/user/telnetd/sys_term.c |

|ligne 233 bcopy     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/telnetd/utility.c           |

|ligne 340 bcopy     sudo gedit /home/rt/nios2-linux/uClinux-dist/user/telnetd/utility.c      |

On fait un make sans erreur ! On a l'image dans uclinux-dist/images.

On branche le port série avec un logiciel à 115200-8-n-1

On charge le sof et l'image via le jtag de l'USB.

A la fin la console bascule sur le port série

Mais on a l'erreur: à nios2-terminal

|VFS: Cannot open root device "" or unknown-block(0,0) |

|Please append a correct "root=" boot option |

|Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) |

On fait make romfs ( create the ROM filesystem into romfs/ folder )

Puis on refait make

Cela marche !! C'est la version Ubuntu_10.04_ucLinux__v7_rpds_OK

On fait cat /proc/meminfo => 5956 ko de mémoire

=> 2684 ko libres

On vérifie l'interface graphique avec nano-X &

puis nanowm &

puis nxterm &

On fait cat /proc/meminfo => 5956 ko de mémoire

=> 1200 ko libres

On modifie le logo = fichier uClinux-dist/romfs/etc/motd (voir message de boot avant le logo )

C'est un fichier texte, je le modifie et fais make.

NB: - Cela marche une fois pour créer une image , il faut recommencer la manipulation au make suivant ( dans romfs/etc

on a retour au fichier d'origine ).

- Ne pas mettre d'accent

IV) Intégrer les applications au Démarrage:

On modifie le fichier /uCLinux-dist/Vendor/Altera/nios2nommu/rc qui est copié dans la zImage = /uCLinux-dist/romfs/etc/rc

-> réseau: On ajoute une ligne au boot: ifconfig eth0 hw ether 08:08:08:08:08:08 192.168.1.23

Remarque: Si ce n'est pas au boot, pour l'adresse MAC, il faut déjà désactiver l'interface

/> ifconfig eth0 down

/> ifconfig eth0 hw ether 08:08:08:08:08:08 192.168.1.23

/> ifconfig eth0 up

-> affichage d'une fenêtre: On ajoute 3 lignes nano-X & ( lancer le gestionnaire nano-X en tache de fond: nano-X & )

nanowm & ( lancer le gestionnaire de fenêtre en tâche de fond )

nxterm & ( ouvrir un terminal dans la fenêtre en tâche de fond )

Au lancement on a le numéro du processus associé

On peut le fermer en faisant kill -p n°

Infos:

Phase 3

Intégration d'applications

à l'image ucLinux

I) Entrée/Sorties de la platine

On s'intéresse aux entrées/sorties qui permettront de piloter le softphone SIP:

Réseau Ethernet - Souris USB - Carte son - écran VGA - Boutons poussoirs - Clavier PS2

On s'intéresse aussi à des éléments qui peuvent servir pour gérer l'OS de la platine:

Ecran LCD pour débuggage - Diodes LED

( Contenu de system_0.ptf ( Alterawiki de2vga_nommu )

On analyse le contenu de la platine autour du microprocesseur NIOS2 pour nos fichiers ptf et sof du projet de2vga_nommu de Alterawiki

=> Soit on analyse le ptf: system_0.ptf dans /uClinux-dist,

=> Soit on analyse un fichier créé automatiquement à la compilation à partir du ptf: nios2_system.h

Pour nos fichiers de Alterawiki_de2vga_nommu:

( )

On en déduit la carte mémoire:

|000000,à 7FFFFF  Entry pipeline_bridge/s1 |

|000000 à 3FFFFF  cfi_flash_0/s1 |

|400000 à 47FFFF  sram_0/avalon_slave_0 |

|480000 à 4807FF cpu_0/jtag_debug_module |

|480800 à 480FFF epcs_controller/epcs_control_port |

|481000 à 4810FF  Gpio |

|481100 à 481119 timer |

|481120 à 481139 uart_0/s1 |

|481140 à 48115F mmc_spi |

|481160 à 481169 lcd_16207_0/control_slave                |

|481170 à 481179 VGA |

|481190 à 48118F USB |

|481190 à 481197 jtag_uart_0/avalon_jtag_slave |

|481198 à 48119F clavier PS2 |

|4811A0 à 4811A7 ethernet |

|4811A8 à 4811AF sysid |

|4811B0 à 4811B7 ?????????? |

|4811B8 à 4811BB SEG7_Display/avalon_slave_0         = 8 Afficheurs 7 segments |

|4811BC à 4811BF audio |

|4811C0 à 7FFFFF ?????????? |

|800000 à 1000000 sdram |

On constate qu'il n'y a pas de détails des ports parallèles = 18 LED rouges ( LEDR )

8 LED vertes ( LEDG )

18 Interrupteurs ( switch SW )

4 Boutons poussoirs ( Buttons KEY )

( Eléments configurés par l'interface menuconfig

|Réseau Ethernet |On a intégré le driver DM9000 et les logiciels de gestions du réseau dans la configuration du noyau. |

| |On a mis des applications réseaux dans busybox ( ifconfig, ping, dhcpd ). On utilise ifconfig pour configurer la carte ethernet et |

| |ping pour tester. |

| | |

| |Config: On retrouve un PC sous Linux |

| |=> config ethernet: ifconfig eth0 hw ether ADR_MAC 192.168.1.3 netmask 255.255.255.0 |

| | |

| |=> test ethernet: ping 192.168.1.1 |

|Souris USB |Lors de la configuration du noyau, on a coché: |

| | |

| |on peut la voir avec la commande: cat /dev/input/mice |

|Clavier PS2 |Lors de la configuration du noyau, on a coché: |

|Ecran VGA |On utilise framebuffer |

| | |

| |Lors de la configuration du noyau, on a coché: |

| | |

| |On a intégré à la distribution ucLinux la gestion d'affichage X-windows. |

| | |

| |Remarque: Dans le sof et ptf, on a un nom cohérent avec les fichiers c altfb.c |

| |( VGA_0 ou vga_controller_0 selon les versions ) |

( Eléments hors menuconfig

a) Pas d'utilisation des périphériques = Test de compilation et intégration à l'image du noyau

|On crée la source |J'ai fait un répertoire essai dans uCLinux-dist/user/ puis gedit hello.c |

| |#include |

| |int main(void) |

| |{ |

| |printf("petit essai \n"); |

| |} |

|Compilation avec cross-compiler |On compile sur le PC ubuntu avec le cross-compiler au format Flat     |

| |nios2-linux-uclibc-gcc hello.c -o hello -elf2flt |

| | |

| |On peut vérifier l’exécutable sur le pc Ubuntu avec nios2-linux-uclibc-flthdr hello |

| |( mais pas l’utiliser )  |

| |    |

|On charge l'exécutable sur ucLinux de |- Soit on utilise le ftp |

|la platine |- Soit on utilise une clé USB |

| |- Soit on intègre l'exécutable à l'image: |

| |Copier dans uCLinux-dist//romfs/bin puis make puis rechargement d'image zImage |

|On exécute l'application |Comme on utilise l'affichage, il faut lancer avant nano-X & |

| |nanowm & |

| |nxterm & |

| |Avec le claver de la platine: cd /bin |

| |hello |

b) Utilisation des périphériques via la carte mémoire

On essaie en tapant dans les adresses possibles ( GPIO ? libres ? ) selon flash_leds.c du livre rpds.

Cela ne marche pas ( trop de valeurs à tester ).

On décide donc de modifier le projet:

|cd altera/11.0sp1/quartus/bin/ |

|./quartus |

|open project > le_fichier.qpf |

|> Tools > SOPC Builder |

|A gauche: library > peripherals > microcontroller peripherals > PIO ( Parallels I/O ) |

|cliquer sur Add |

|8bits output, finish |

|se mettre dessus, clic droit, edit > rename leds, |

|recommencer avec 8bits input et nommer switchs |

| |

|System > Assign address ???????????? |

| |

|faire les connexions au bus ( s’inspirer du projet rpds où on a les leds, pas relier led - vga par exemple  ou |

|     ) |

| |

|Generate, Save = > ce qui va créer un fichier "system_0.ptf" dans le répertoire du projet |

|Exit en bas pour fermer sopc builder |

|Dans quartus: File > Processing > Start Compilation => cela crée automatiquement le sof |

| |

|( On peut transférer le sof et configurer la platine via quartus: -> Tools > Programmer, choisir "USB-Blaster", mode JTAG, |

|fichier.sof , cliquer sur "Program/Configure" puis Start |

|A la fin de cette programmation, le µP NIOS II est implémenté dans le FPGA de la platine. ) |

| |

|Fermer quartus |

Avec la version web free de quartus, on a un sof qui ne peut s'exécuter en flash, or c'est ce que l'on veut => il faut le faire à l'IUT avec la licence !!!!

On remplace le ptf dans /nios2-linux/uClinux-dist et le sof dans altera/11sp1/quartus/nios2eds.

Carte mémoire du projet de2vga_nommu modifié pour intégrer les PIO ( LEDs, switchs, boutons Key )

|LED |Principe: |

| |On veut allumer/éteindre les LEDS. On utilise la carte mémoire ( fichier ptf ). |

| | |

| |Pour piloter les LED: 1 adresse pour 9 LED vertes => 8 bits = 1 octets pour les piloter |

| |LEDG8 LEDG7 LEDG6 LEDG5 LEDG4 LEDG3 LEDG2 LEDG1 LEDG0 |

| | |

| |2 adresses pour 18 LED rouges => 16 bits = 2 octets pour les piloter |

| |LEDR17 LEDR16 ---------------------------------------------------- LEDR0 |

| | |

| |Source: DE2_Basic_Computer.pdf |

| | |

| |Pour notre ptf: Adresse LED verte = |

| |Adresse basse LED rouge = |

| |Adresse haute LED rouge = |

| | |

| |Programme pour allumer des diodes: Hello.c |

| | |

| |J'ai fait un répertoire Hello dans uCLinux-dist/user/ puis gedit hello.c |

| | |

| |#include |

| |#include // pour sleep |

| | |

| |#define leds (char*) 0x80501090 // Base adress in SOPC Builder |

| | |

| |int main( void ) |

| |{ |

| |int i; |

| | |

| |for(i=0; i Il faut du temps pour |

| |changer la valeur ( boucle avec attente 1s = trop rapide, gênant pour faire un chrono ou une horloge !! 5 sec, on voit tout ) |

| | |

| |=> Pas d'accès à un seul afficheur. |

| |=> Pas de modifs de valeur rapides |

| | |

| |Programme pour afficher sur les 7 segments: |

| |Idem LED en changeant l'adresse |

|LCD sans driver (|L'adresse de base est ??? |

|pas logiciel du |On a un registre de commande en ??? |

|noyau ) |On a un registre de données en ??? |

| | |

| |On fait l'initialisation en mettant voir tp sm51 et fichier du driver utilisé ensuite. |

| | |

|LCD avec driver | |

|ajouté au noyau |- Vérifier dans le ptf que l’on a bien le nom  lcd_16207_0 ( utilisé dans .c et .h ) |

| |- Copier les 2 fichiers lcd_16207.c et lcd_16207.h  de dans |

| |uClinux-dist/linux-2.6.x/drivers/char |

| |- Editer le fichier Kconfig du répertoire uClinux-dist/linux-2.6.x/drivers/char |

| |et ajouter une section pour le module LCD ( ou rechercher et modifier ): |

| |[pic] |

| |config LCD_16207    # note: in the patched tree this seems to be called NIOS_LCD_16207, watch out. |

| |    bool "Nios LCD 16207 device support" |

| |    depends on NIOS || NIOS2 |

| |    help |

| |      This driver supports the Nios LCD 16207 device. |

| |[pic] |

| |    Cela indique    - le menu dans lequel on le trouvera dans make menuconfig = Ici c’est menu "Misc devices" |

| |            - dans quel cas on l’utilise “depends on” = autre configuration qui fait apparaitre ce sous-menu. |

| |- le nom après “config” = Ici DE2_LEDS |

| |- l’aide affichée si dans menuconfig on va sur help |

| |C'est placé entre menu et endmenu qui indique le menu de menuconfig où on le trouvera. |

| | |

| |-Ajouter une ligne au Makefile du même répertoire uClinux-dist/linux-2.6.x/drivers/char |

| |[pic] |

| |obj-$(CONFIG_LCD_16207)         += lcd_16207.o |

| |[pic] |

| | |

| |- Compiler le noyau ( faire make menuconfig, kernel, sélectionner Device driver → Character devices → "Nios LCD 16207 device support" )|

| | |

| |source: |

| |Utilisation avec echo: |

| |- Le chargement du module se fait automatiquement ( c’est modprobe lcd_16207   = nom du .o ) |

| |=> En cas de succès on a le message lors du boot: "Device /dev/lcd16207 registered". |

| |Rem: Si on veut activer le module qui est déjà actif => erreur après   modprobe lcd_16207    |

| |=>   modprobe: could not parse modules.dep |

| | |

| |- On fait cat /proc/devices  pour voir le major number et minor number |

| |( on a un message à la compilation mais il est noyé dans le flux global donc inexploitable ) |

| | |

| |- Créer un fichier associé au périphérique:   mknod /dev/lcd16207 c 250 0     |

| |Lcd16207 = nom du module chargé = que l'on voit avec commande précédente |

| |250 = major number donné par commande précédente |

| | |

| |- Vérifier avec ls -l lcd* |

| | |

| |Cd /dev et chmod 777 ldc16207 |

| | |

| |Echo "salut" > /dev/lcd16207 ne marche pas car le shell sash de busybox ne permet pas la redirection de sortie d'echo donc on change |

| |dans les applis du noyau -> busybox -> shell -> hush |

| | |

| |Remarque: pour faire cela automatiquement au boot, on l’intègre au fichier |

| |uClinux-dist/vendors/Altera/nios2/romfs_list |

| |en ajoutant une ligne nod / dev/lcd16207 666 0 0 c 250 0 |

| |Utilisation avec FILE et fprintf: |

| | |

| |- on fait mknod /dev/lcd16207 c 250 0 ( voir avant ) |

| | |

| |- on fait le fichier source hello.c |

| |#include |

| | |

| |int main() |

| |{ |

| |FILE *monlcd; |

| | |

| |monlcd = fopen("/dev/lcd16207","w"); |

| |fprintf(monlcd,"%s","cela marche :) "); /*writes*/ |

| |fclose(monlcd); /*done!*/ |

| | |

| |return 0; |

| |} |

| | |

| |- on fait la cross compilation: nios2-linux-uclibc-gcc hello.c -o hello -elf2flt |

| | |

| |- on charge sur la platine: Copier dans uCLinux-dist//romfs/bin puis make puis rechargement d'image zImage |

| | |

| |- on exécute: cd /usr/bin puis hello |

| | |

| |Exemple: |

Maintenant que l'on sait lire l'état des interrupteurs, tester les boutons poussoirs et dialoguer avec le lcd, on fait une application qui va lire l'état des interrupteurs quand on appuie sur KEY3 et affiche le code ascii correspondant sur le LCD.

|Fichier source dans répertoire /uClinux-dist/user/essai |

| |

|elle existe en vhdl à |

************************************************************************************************************************************************************************************************************

Remarque: On utilise dans le programme l'adresse avec un bit de poids fort à 1

0x00000000 (cachable) maps to address 0x8000000 (non-cachable)

Remarque: Utilisation de nios2_system.h

PB erreur np_pio

b) Avec utilisation des périphériques: nios2_system.h

nios2_system.h: Sur internet et même dans la distribution on a des versions différentes

( pas mêmes adresses et pas #define na_led_green , ... )      

La version du fichier "/home/rt/nios2-linux/uClinux-dist/linux-2.6.x/include/nios2_system.h" est généré automatiquement ( voir dans l'entête, sans doute à partir du ptf ou du sof ? )

Donc on y ttrouve les bonnes adresses mais on n'a pas tout.

Par exemple dans la carte mémoire on voit les adresses de LED de 0x00501090 à 0x0050109F.

Pour utiliser nios2_system.h: 1) Dans le .c je mets le chemin complet

"/home/rt/nios2-linux/uClinux-dist/linux-2.6.x/include/nios2_system.h"

2) Je modifie dans le fichier nios2_system.h les expressions < > par " "

pour uart_struct.h, uart_timer.h et spi_struct.h

3) J'ajoute à nios2_system.h

#define na_leds       0x80501090 // 0x90 à 9F au dessus c'est le VGA

et

#undef na_leds

#define na_leds ((np_pio*) 0x80501090)

Reamrque: On utilise un bit de poids fort à 1

0x00000000 (cachable) maps to address 0x8000000 (non-cachable)

|On crée la source |J'ai fait un répertoire Hello dans uCLinux-dist/user/ puis gedit hello.c |

| |#include |

| |#include |

| |#include "nios2_system.h" // cohérent avec sof et ptf utilisés = carte mémoire platine |

| | |

| |int main( void ) |

| |{ |

| |int i; |

| |volatile unsigned *leds = ((volatile unsigned *)(na_leds)); |

| |// dans le .h on a #define na_leds 0x80501090 => variable leds est un pointeur de l'adresse |

| | |

| |for(i=0; i cat /dev/switches

Which button was pressed last time?

> cat /dev/buttons

Display the number 255dec = 11111111bin (8 LEDs enabled) on the green and red LED-Line:

> echo 255 > /dev/leds_green

> echo 255 > /dev/leds_red

interruption

uClinux_Nios2_Devicedrivers_and_Testapplication_Documentation.pdf

On crée un programme C

|Créer un répertoire dans le dossier uClinx-dist/romfs |

|On crée le code source Hello.c qui utilise les adresses des composants |

| |

|#include |

|#include  // inlcude for outl() |

|#include // include for usleep() |

| |

|#define PIO_0_BASE 0×11840 // This is your PIO adress |

| |

|int main(void) |

|{ |

|printf(“Hello\n”); |

|while(1) |

|{ |

|outl(0xF, PIO_0_BASE); // direct output to PIO |

|usleep(1000000); |

|outl(0×0, PIO_0_BASE); |

|usleep(1000000); |

|} |

|} |

| |

|Source: grigaitis.eu/wp-content/uploads/2011/10/hello.c |

|Compiler : nios2-linux-uclibc-gcc hello.c -o hello -elf2flt |

|Copier le fichier compilé dans /nios2-linux/uClinux-dist/romfs/bin |

| |

|Faire un Makefile ?????????? |

|Faire l'image uCLinux: make ("make image" ne marche pas, make romfs ???? ) |

|Charger l'image sur la platine. |

|Démarrer l'application en tapant Hello |

|=> Affichage de Hello dans la console et clignotement des diodes. |

GAFFE ce n'est pas la même adresse que la carte mémoire en annexe !!!!!!!

b) Accès par adresse de base = Boutons poussoirs

On veut lire l'état des bourtons poussoirs appuyés/relachés.

c) Affichage LCD

Configuration: On commence pat intégrer le LCD à l'image du noyau

|1ère étape: Ajouter les drivers à |Place the LCD driver c file (~/uClinux/distro/drivers/lcd_16207.c) and the LCD driver header file |

|la distribution |(~/uClinux/distro/drivers/lcd_16207.h) under ~/uClinux/distro/nios2-linux/linux-2.6/drivers/char, replacing any |

| |existing files when asked to. |

| | |

| | |

|2ème étape: |Device Drivers ---> Character devices, check Nios LCD 16207 device support. |

|Customize kernel | |

|3ème étape: |- Vérifier que le altera_avalon_lcd_16207 SOPC component est intégré au ptf et sof. |

|Compilation du noyau |( "lcd_16207_0" dans Démo DE2_NIOS_HOST_MOUSE_VGA ) |

| |- modifier un makefile ou truc de ce style ?????????? |

| |- make |

source sur une autre platine:

Utilisation:

If you use a module then you have to do modprobe lcd_16207.

If you successfully loaded by the kernel then you should see this message: "Device /dev/lcd16207 registered".

d) Carte son

on réuitlise le projet mpg123 pour valider



|on a des /dev/ |

|A file “nios2.h” contains the addresses of the peripherals. |



The default stack size of application is 4KB, you can change it with -elf2flt="-s " option,, c'est à dire

nios2-linux-uclibc-gcc hello.c -o hello -elf2flt="-s 16000"

( )

II) Implémenter une application ( Add Userspace Applications ou Porting Applications to uClinux )

Modif du makefile pour cross-compiler

III) Implémenter un téléphone SIP

On sait que la carte ethernet, l'écran VGA et la carte son fonctionne.

On a donc les entrées/sorties nécessaires pour un téléphone SIP.

( Ajouter une application softphone SIP

Dans la distribution uCLInux-dist de 2012, on a l'application Linphone ( dans uCLInux-dist/user ).

Elle est prévue pour le framebuffer => On recopie la source.

On adapte le makefile

Pb cela installe aussi d'autres élémenst autour = alsa, codec



|Linphone dans Apllis > Backfin Apllis >  Blackfin canned demos  ---> |

|     [*] Linphone, a SIP compatible VoIP phone |

|make -k pour éviter shared libraries ( sinon pb libosip2 ) |

|zImage de 1,4 Mo |

|mais on ne voit pas l'applis dans /usr/bin ???? |

|pas sur que linphone soit dedans... on a alsa |

|mater romfs de uclinux-dist |

In tégrer l'application:

user applications can be found in “./uClinux-dist/Documentation/Adding-User-Apps-HOWTO”

exxemple:

- On refait la Compilation d'un noyau Linux, dans le fenêtre de "make xconfig".

OU

- 2nde méthode de

OU



Ajout de programmes en C

Sur linux : Créez un dossier contenant vos sources dans le dossier uClinx-dist/romfs

Votre programme serra alors compilé avec µclinux.

Vous pourrez retrouvez le dossier que vous venez de créer a la racine du système de fichier de µClinux et votre programme dans ce dernier.

comment on intègre l'appli ?????

( Démarrer l'application

comme un programme linux

pour que cela démarre au boot,

comment on démarre appli ???? dans l'initialisation ? par terminal ?

sur une autre cible:



Au lieu d'utiliser des fichiers déjà faits, on va les créer pour pouvoir y intégrer des logiciels en plus que l'on veut utiliser.

On commence par implémenter sur la carte TERASIC DE2 un microprocesseur logiciel 32bit RISC Nios2 dans les FPGA.

= Créer le pseudo-matériel

( Création d'un projet avec processeur logiciel NIOS2

On va suivre les indications de

-> Utiliser des fichiers de démonstrations. Si on a quartus 11 web edition sans les exemples de quartus 6 complet avec licence, on trouve les exemples à



ou en secours ( mais version moins récente )

autre source:

| |

|5. Generating the SOPC Builder System File and the FPGA Configuration |

|Using Quartus II, open the project simple.qpf. |

|In the Altera Quartus II main window, navigate to Tools -> SOPC Builder to open your SOPC system. |

|You should see a window describing the different components of your system and the way they are connected. Generate the system by pressing |

|the Generate button. |

|Once done, a file called nios2_linux.ptf is generated. Please note this file. You will need it when configuring the kernel. |

|Close SOPC Builder saving changes to nios2_linux.sopc when asked. |

|In the Altera Quartus II main window, navigate to Processing -> Start Compilation to implement the design. |

|Once done, this command will generate the bitstream simple.sof that will configure the FPGA on the DE2-70 board. |

autre source:







si pb utiliser

sinon

Sources: ( Part 1 -- Creating the Hardware )





- Démarrer Quartus

- Fichier > Ouvrir, aller à “..\DE2_demonstrations\DE2_SD_Card_Audio\”,

sélectionner le projet “DE2_SD_Card_Audio

- On peut alors démarrer Altera SOPC Builder: Tools > SOPC Builder

( voir )

First step is to enable the LCD display. To do that, we need to build the kernel with :

* Support for frame buffers selected >Support for altera frame buffer selected

* Virtual terminals selected - this option will allow you to view the next two options

* Under device drivers>Graphic Support > Console Display Device Support and make sure that both [] VGA text support and []Frame Buffer Console Support are UNSELCTED.

autre méthode:

explication crosscompiler:

autres sources;





|Recherche des gros fichiers: dans le répertoire uClinux-dist: |

|find -P ./romfs/ -type f -printf "%s %p\n" | sort -nr | less |

- Download the software executable and linkable format file (.elf) to run the program by typing the following in the SDK shell

[SOPC Builder]$ ./run.bash r

The executable uses the following command to download the .elf:

nos2-download –cable USBBlaster –g edge_detector.elf

This starts a process that downloads the software, resets the Nios II processor, and starts execution of the software.



III) ucLinux sur d'autres cibles



Getting Started with uClinux for STR71x - STMicroelectronics

internet/com/TECHNICAL.../CD00049721.pdf

voir

Compilation de noyau Linux ( Build kernel )

Utilisation de Kconfig

Il existe une interface simple permettant la configuration des milliers de symboles du noyau Linux. Elle est appelée par la commande: make menuconfig

[pic]

L’utilitaire kconfig présent dans le noyau linux n’existe pas en tant que projet autonome. Pour pouvoir l’utiliser, il faut soit l’extraire des sources du kernel, soit faire appel à des projets qui ont fait ce travail pour nous = uCLinux-dist.

Arborescence de fichiers Linux

( source:

)

/ : racine (ou root)

/bin : exécutables de base du système

/boot : infos nécessaires au démarrage de la machine.

/dev : fichiers spéciaux correspondant aux périphériques.

/etc : fichiers de configuration.

/home : répertoires personnels des utilisateurs.

( peut être sur un autre disque, partagé en réseau )

/lib : principales bibliothèques partagées

/lost+found : quand un disque crashe on utilise fsck pour

réparer, c’est là qu’il dépose les fragments

de fichiers perdus.

/mnt : répertoires utilisés pour monter temporairement

un système de fichiers (disquette, CD-ROM…).

/tmp : fichiers temporaires.

/opt : c’est la qu’on installe les exécutables commerciaux

structure totalement différente: chaque logiciel y a son propre répertoire. Généralement, chaque répertoire de /opt possède au moins les sous-répertoires bin et etc pour les exécutables et les fichiers de config.

/proc : répertoire factice, dont les fichiers contiennent des infos sur l’état du système et des processus en cours d’exécution.

/root : répertoire de l’administrateur système. Il n’est pas sous /home qui peut être partagé en réseau et sur un autre disque.

/sbin : commandes de base de l’administration système (vérification et réparation des disques, mise en place du réseau…).

/usr : logiciels installés avec le système. Peut être sur un disque distinct de / ( car / a de quoi monter donc sur le pc,

/usr de quoi réparer, peut être monté en réseau et partagé )

/usr/bin : exécutables.

/usr/etc : fichiers de config.

/usr/include : fichiers d’en-tête pour la programmation.

/usr/src : les sources de certains logiciels, principalement le noyau de Linux.

/usr/local : contient des logiciels compilés sur place à partir des sources. Organisation similaire à /usr.

/usr/dict : dictionnaires (pour les correcteurs d’orthographe et les craqueurs de mots de passe).

/usr/doc : doc.

/usr/games : jeux.

/usr/info : doc au format GNU info.

/usr/lib : DLL non vitales.

/usr/man : manuel en ligne. Les fichiers sont compressés.

/usr/sbin : principalement les serveurs réseau.

/usr/share : fichiers de données.

/usr/spool : généralement un lien symbolique vers /var/spool.

/var : données fréquemment réécrites.

/var/catman : pages du manuel décompressées (ça se fait à la demande).

/var/lib : bases de données, des fichiers de config…

/var/local : complète /usr/local de la même façon que /var complète /usr.

/var/lock : fichiers qui servent à marquer l’utilisation de certaines ressources.

/var/log : journal du système.

/var/run : principalement des infos sur les serveurs en fonctionnement.

/var/spool :spools = « de passage » en attente d’utilisation par un logiciel ( mail, news, files d’attente imprimante )

/var/tmp : fichiers temporaires.

Initialisation du système sous Linux

( source: )

Voici dans ses grandes lignes les phases du démarrage du système jusqu'à une session de travail, et le mécanisme (appelé System V) de lancement ordonné des processus et en particulier les services.

Démarrage du noyau

• A la mise sous tension, il y a la phase d'initialisation du BIOS de la carte mère : celle-ci fait l'inventaire de ses "petits", les divers périphériques dont elle se trouve dotée (bus, ram, disques, cartes ...).

Puis il part à la recherche d'un système d'exploitation sur l'un des périphériques accessibles ...

• Habituellement (si on ne démarre pas sur une disquette), le BIOS charge en mémoire le MBR (Master Boot Record, 1er secteur de la 1ère piste du 1er disque dur, 512 octets).

Supposons que le chargeur de systèmes LILO (Linux Loader) s'y trouve, une première partie de LILO est chargée et exécutée (A noter que le chargeur LILO peut se trouver sur une disquette ou sur la partition active du disque)

• Sa tâche consiste à charger en mémoire la 2ème partie de LILO (environ 5 Ko). Lors de cette phase, il y a affichage des lettres LI. S'il y a arrêt, c'est que LILO n'arrive pas à s'exécuter (pb de géométrie du disque)que cette 2ème partie est ce qui va permettre à l'utilisateur de choisir le système à lancer.

• Le noyau de ce système quel qu'il soit (Linux, Windows ..) est décompressé "à la volée" et est chargé en mémoire. Ceci est accompagné de l'affichage du message "Uncompressing Linux ...done. Now booting the kernel .."

• Dès lors c'est le noyau qui prend les affaires en main et inspecte son environnement matériel !

Les niveaux de fonctionnement

Ces 6 niveaux sont décrits au début du fichier /etc/inittab

• 0 : provoque un arrêt (shutdown) de la machine

• 1 : pour rentrer en mode mono-utilisateur, réservé à root

• 2 : mode multi-utilisateurs, sans NFS

• 3 : mode multi-utilisateurs avec tous les services réseaux

• 5 : démarrage du serveur graphique X11 en plus

• 6 : redémarrage de la machine (la commande init 6 ou reboot lance le niveau 6).

La ligne qui suit définit le niveau de fonctionnement par défaut au démarrage (Default runlevel), ici le niveau 3

id:3:initdefault

Donc pour changer de niveau par défaut, il suffit tout simplement de changer ce numéro !

Le premier processus, /sbin/init

Le noyau du système chargé et décompressé, s'exécute et s'initialise : réservation mémoire, prise en compte de la zone d'échange (swap),  détection du matériel et chargement des pilotes des périphériques, montage du système de fichiers et enfin lance le 1er processus /sbin/init

Le paramétrage de ce processus fondamental est entièrement assuré par l'exécution de ce fichier script /etc/inittab dont voici la suite :

# niveau d'exécution 3 par défaut

id:3:initdefault

# il y a ensuite exécution des scripts rc.sysinit

--> initialisation du PATH pour les autres scripts, activation swap,

montage systèmes fichiers, gestion des quotas..

si::sysinit:/etc/rc.d/rc.sysinit

# exécution du script etc/rc.d/rc avec le niveau en paramètre

--> lancement des divers services du niveau choisi, ici 3,

etc/rc.d/rc 3

# ceci lance tous les liens symboliques du rép rc3.d

/etc/rc.d/rc3.d/S*

# par exemple /etc/rc.d/rc3.d/S01kerneld*fait référence

au script /etc/rc.d/init.d/kerneld

# le fichier inittab se termine par

# exécute xdm qui lance X et le login graphique, si le "runlevel" est 5

x:5:respawn:/etc/X11/prefdm -nodaemon

Le dernier script d'initialisation à être exécuté est /etc/rc.d/rc.local

Habituellement, on y écrit d'éventuelles commandes de chargement de modules ou de lancement de services supplémentaires.

Le système (System V) de démarrage des services

• # les scripts de /etc/rc.d/init.d/ sont appelés avec un paramètre start, stop, status, restart Par exemple si on a modifié la configuration du serveur Samba dans le fichier smb.conf, il faut relancer ce service par la commande /etc/rc.d/init.d/smb restart

• Quand on souhaite démarrer un service, il faut placer dans /etc/rc.d/init.d le script de démarrage du service, puis créer un lien symbolique dans chacun des répertoires/etc/rc.d/rcx.d (x=0..6), avec comme règle de créer ce lien symbolique avec un nom commençant par S (comme Start) et un K (comme K).

• Les liens symboliques commençant par K sont lus les premiers, et le numéro indique l'ordre dans lequel les fichiers seront lus (normalement lorsque vous faites une installation à partir d'un rpm cela est fait automatiquement).

• Ainsi pour gérer le serveur dns on doit créer les liens symboliques vers le script de démarrage :named

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc0.d/K40named   Au niveau d'arrêt 0 on l'arrête

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc1.d/K40named   pas de réseau à ce niveau

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc2.d/K40named    bind peut etre démarré ici

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc3.d/S40named   

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc4.d/K40named    niveau inutilisé sur Red Hat

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc5.d/S40named   

ln -s /etc/rc.d/init.d/named /etc/rc.d/rc6.d/K40named    Le niveau 6 étant le reboot, il faut l'arreter

nios2_system.h

du répertoire /home/rt/nios2-linux/uClinux-dist/linux-2.6.x/include

pour ptf et sof de de2vga_nommo modifié avec LEDs

| |

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

[pic]

Phase 1

Phase 3

[pic]

[pic]

[pic]

[pic]

Phase 2

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery