Projet système : faq : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
 
(5 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
[[Catégorie:Deuxième Année]]
 
[[Catégorie:Deuxième Année]]
 
[[Catégorie:Informatique]]
 
[[Catégorie:Informatique]]
 +
[[Catégorie:Projets de spécialité]]
  
 
== Conseils ==
 
== Conseils ==
  
* Avez-vous noté le document sur la conduite du projet ? ([[Media:Psys_roadmap.pdf|PC]] ou [http://sebastien-viardot.imag.fr/Enseignements/System/roadmap_FPGA.pdf FPGA])
+
* Avez-vous noté le document sur la [[Projet_système_:_roadmap|conduite du projet]] ?
  
 
== Astuces ==
 
== Astuces ==
 
+
<!--
 
=== Compiler le projet sur une architecture 64bits ===
 
=== Compiler le projet sur une architecture 64bits ===
  
Ligne 32 : Ligne 33 :
 
Nemiver est une interface graphique de <tt>gdb</tt> qui offre des fonctionnalités très pratiques tout en étant beaucoup plus agréable à utiliser que <tt>ddd</tt>. Il devrait être inclus dans les dépôts de vôtre distribution favorite.
 
Nemiver est une interface graphique de <tt>gdb</tt> qui offre des fonctionnalités très pratiques tout en étant beaucoup plus agréable à utiliser que <tt>ddd</tt>. Il devrait être inclus dans les dépôts de vôtre distribution favorite.
  
Pour l'utiliser, il faut tout d'abord ajouter vos dossiers <tt>kernel</tt>, <tt>shared</tt> et <tt>user</tt> dans ''Edition->Préférences->Répertoires de source''. Ensuite, comme avec <tt>gdb</tt>/<tt>ddd</tt>, lancez votre machine virtuelle, faites '<tt>D</tt>' quand l'écran bleu s'affiche et simulez une liaison série avec :
+
Pour l'utiliser, il faut tout d'abord ajouter vos dossiers <tt>kernel</tt>, <tt>shared</tt> et <tt>user</tt> dans ''Edition->Préférences->Répertoires de source''. Ensuite, pour Virtual Box, comme avec <tt>gdb</tt>/<tt>ddd</tt>, lancez votre machine virtuelle, faites '<tt>D</tt>' quand l'écran bleu s'affiche et simulez une liaison série avec :
  
 
   socat UNIX-CONNECT:/tmp/vbox-psys PTY,link=/tmp/gdb-psys
 
   socat UNIX-CONNECT:/tmp/vbox-psys PTY,link=/tmp/gdb-psys
Ligne 39 : Ligne 40 :
 
* Ouvrez ''Fichier->Se connecter à une cible distante...''.
 
* Ouvrez ''Fichier->Se connecter à une cible distante...''.
 
* Dans la fenêtre qui s'ouvre, choisissez le fichier exécutable à charger (normalement <tt>kernel/kernel.bin</tt>)
 
* Dans la fenêtre qui s'ouvre, choisissez le fichier exécutable à charger (normalement <tt>kernel/kernel.bin</tt>)
* Sélectionnez ''connexion ligne série'', puis choisissez le port <tt>/tmp/gdb-psys</tt>
+
** Pour Virtual Box, sélectionnez ''connexion ligne série'', puis choisissez le port <tt>/tmp/gdb-psys</tt>
 +
** Pour qemu, sélectionnez ''connexion tcp/ip'', adresse <tt>localhost</tt> port <tt>1234</tt>
  
Le débuggeur doit maintenant s'ouvrit au début de <tt>kernel_start()</tt>.
+
Le débuggeur doit maintenant s'ouvrit au début de <tt>kernel_start()</tt> (avec virtual box).
 +
-->
 +
 
 +
=== Exécuter et déboguer avec qemu ===
 +
 
 +
Pour exécuter le noyau:
 +
# Compiler votre image noyau <code>kernel.bin</code> normalement.
 +
# pour l'exécuter: <code>qemu -kernel kernel.bin</code>
 +
 
 +
Pour déboguer votre noyau:
 +
# execution avec debug <code>qemu-system-i386 -s -S -m 256M -kernel kernel.bin</code>
 +
# sous gdb: <code>target remote localhost:1234</code>
 +
 
 +
Pour lancer qemu et votre noyau directement depuis la console de gdb
 +
* <code>target remote | exec qemu -gdb stdio -kernel kernel.bin</code>
  
 
=== Construire une image de disquette bootable (pour qemu, bochs,...) ===
 
=== Construire une image de disquette bootable (pour qemu, bochs,...) ===
Ligne 64 : Ligne 80 :
 
  dd if=/dev/zero of=kernel.floppy bs=1440K count=1
 
  dd if=/dev/zero of=kernel.floppy bs=1440K count=1
  
# configurer les mtools pour écrire un fichier <tt>kernel.floppy</tt>. Il faut créer un pseudo-device disquette pointant vers le fichier
+
# configurer les mtools pour écrire un fichier <tt>kernel.floppy</tt>. '''Il faut créer un pseudo-device disquette''' pointant vers le fichier
  
 
  mformat -f 1440 b:
 
  mformat -f 1440 b:
Ligne 108 : Ligne 124 :
  
 
Il faut remplacer ligne 27 "__builtin_stdarg_start" par "__builtin_va_start"
 
Il faut remplacer ligne 27 "__builtin_stdarg_start" par "__builtin_va_start"
 +
 +
=== Problème mémoire ====
 +
 +
Il peut arriver que les options de VirtualBox entrent en conflit avec l'exécution du noyau.
 +
Il faut alors désactiver le VT-x/AMD-V, la pagination imbriquée, ainsi que l'USB dans les propriétés de la machine.

Version actuelle en date du 7 février 2020 à 07:59

Mycomputer.png  Deuxième Année  CDROM.png  Informatique 

Conseils

Astuces

Exécuter et déboguer avec qemu

Pour exécuter le noyau:

  1. Compiler votre image noyau kernel.bin normalement.
  2. pour l'exécuter: qemu -kernel kernel.bin

Pour déboguer votre noyau:

  1. execution avec debug qemu-system-i386 -s -S -m 256M -kernel kernel.bin
  2. sous gdb: target remote localhost:1234

Pour lancer qemu et votre noyau directement depuis la console de gdb

  • target remote | exec qemu -gdb stdio -kernel kernel.bin

Construire une image de disquette bootable (pour qemu, bochs,...)

L'image sera bootable facilement par tous les simulateurs de PC (bochs, qemu, Virtualbox version open-source). L'image est constructible sur les PC en Ubuntu des salle D200 sans les droits d'administrateur.

La construction utilise dd, les mtools, des outils de manipulation de disquette DOS, et grub comme chargeur de votre système.

La construction de l'image n'est faite qu'une seule fois. Ensuite, pour utiliser l'image avec une nouvelle version de kernel.bin, il faut juste mettre à jour kernel.bin.

Constuire l'image kernel.floppy

  1. constuire un fichier kernel.floppy de la taille d'une disquette
dd if=/dev/zero of=kernel.floppy bs=1440K count=1
  1. configurer les mtools pour écrire un fichier kernel.floppy. Il faut créer un pseudo-device disquette pointant vers le fichier
mformat -f 1440 b:
mcopy kernel.bin b:
mmd b:grub
mcopy -s /boot/grub/stage1 b:grub
mcopy -s /boot/grub/stage2 b:grub
  1. créer le menu de boot pour grub, qui boot immédiatement kernel.bin
default 0
timeout 0
title psys
kernel /kernel.bin
boot
  1. copier le menu dans le répertoire grub de la pseudo-disquette
mcopy menu.lst b:grub
  1. faire un fichier contenant les commandes pour installer la partie boot du chargeur, dans un fichier grubcmd.txt
device (fd0) ./kernel.floppy
root (fd0)
setup (fd0)
  1. installer la partie boot du chargeur
grub --device-map=/dev/null --batch < grubcmd.txt


Copier kernel.bin dans la pseudo disquette

Il faut bien sûr mettre à jour kernel.bin dans l'image.

mcopy kernel.bin b:

BUGS

undefined "__builtin_stdarg_start", lors d'une compilation avec gcc-4.4

Avec les versions récentes de gcc, la compilation des sources initiales s'arrête sur une erreur dans le fichier shared/stdarg.h

Il faut remplacer ligne 27 "__builtin_stdarg_start" par "__builtin_va_start"

Problème mémoire =

Il peut arriver que les options de VirtualBox entrent en conflit avec l'exécution du noyau. Il faut alors désactiver le VT-x/AMD-V, la pagination imbriquée, ainsi que l'USB dans les propriétés de la machine.