My Project
Chargement...
Recherche...
Aucune correspondance
main.c
Aller à la documentation de ce fichier.
1
14#undef MANUX_RAMDISK
15
16#include <manux/config.h>
17#ifdef MANUX_BOOTLOADER
18#include <manux/bootloader.h>
19#endif
20#ifdef MANUX_REGISTRE
21# include <manux/registre.h>
22#endif
23#include <manux/errno.h>
24#ifdef MANUX_CONSOLE
25#include <manux/console.h>
26#endif // MANUX_CONSOLE
27#ifdef MANUX_CLAVIER
28#include <manux/clavier.h>
29#endif // MANUX_CLAVIER
30#include <manux/tache.h>
31#include <manux/horloge.h> // initialiserHorloge
32#include <manux/scheduler.h>
33#include <manux/interruptions.h>
34#include <manux/io.h>
35#include <manux/segment.h>
36#include <manux/memoire.h>
37#ifdef MANUX_STDLIB
38#include <manux/stdlib.h>
39#endif
40#ifdef MANUX_KMALLOC
41#include <manux/kmalloc.h>
42#endif
43#include <manux/atomique.h>
44#ifdef MANUX_APPELS_SYSTEME
45#include <manux/appelsysteme.h>
46#endif
47#ifdef MANUX_PCI
48#include <manux/pci.h>
49#endif
50#ifdef MANUX_RAMDISK
51#include <manux/ramdisk.h>
52#endif
53#ifdef MANUX_PRINTK
54#include <manux/printk.h>
55#endif
56#include <manux/debug.h>
57#include <manux/limites.h>
58#ifdef MANUX_PAGINATION
59# include <manux/pagination.h>
60#endif
61#ifdef MANUX_JOURNAL
62# include <manux/journal.h>
63#endif
64#ifdef MANUX_FICHIER
65# include <manux/fichier.h>
66#endif
67#ifdef MANUX_RESEAU
68# ifdef MANUX_VIRTIO_NET
69# include <manux/virtio-net.h>
70# endif
71#endif
72#ifdef MANUX_VIRTIO_CONSOLE
73# include <manux/virtio-console.h>
74#endif
75
76void startManuX(void); // WARNING faire un include ?
77extern void init(void); // Faire un init.h
78
79#ifdef MANUX_VIRTIO_CONSOLE
80INoeud iNoeudVirtioConsole;
81Fichier fichierVirtioConsole;
82#endif
83
87INoeud iNoeudConsole; // Le INoeud qui décrit la console
88
89void startManuX(void)
90{
91#ifdef MANUX_CONSOLE
92# ifdef MANUX_FICHIER
93 consoleInitialisationINoeud(&iNoeudConsole);
94# else
95 // Initialisation de la console noyau (n'utilise rien !)
97# endif
98#endif
99
100#if MANUX_ARCH == i386
101 union {
102 uint32_t registres[3];
103 char caracteres[13];
104 } descriptionProc;
105
106 // Lecture du nom du processeur
107 descriptionProcesseur(0, descriptionProc.registres);
108 descriptionProc.caracteres[12] = 0;
109
110 // Affichage d'un premier message
111 printk_debug(DBG_KERNEL_START, "32 bit ManuX running on a '%s' ...\n",
112 descriptionProc.caracteres);
113#endif
114
115#ifdef MANUX_BOOTLOADER
116 // Initialisation du bootloader : infoSysteme, cmdLine, ...
117 printk_debug(DBG_KERNEL_START, "Initialisation du bootloader ...\n");
119
120 // Affichage de la mémoire disponible
121 printk_debug(DBG_KERNEL_START, "Memoire : %d + %d Ko\n",
124#endif
125
126#ifdef MANUX_GESTION_MEMOIRE
127 // Initialisation de la gestion des pages mémoire (utilise le
128 // bootloader)
129 printk_debug(DBG_KERNEL_START, "Initialisation memoire ...\n");
132#endif
133
134 // Initilisation des descripteurs de segments
136
137 // Initialisation de la table des interruptions
139
140#ifdef MANUX_JOURNAL
141 // Initialisation du journal
142 printk_debug(DBG_KERNEL_START, "Initialisation du journal ...\n");
144 printk_debug(DBG_KERNEL_START, "Journal initialise ...\n");
145#endif
146
147#ifdef MANUX_PAGINATION
148 /* Initialisation de la pagination */
149 printk_debug(DBG_KERNEL_START, "Initialisation pagination ...\n");
151 printk_debug(DBG_KERNEL_START, "Pagination initialisee\n");
152#endif
153
154#ifdef MANUX_APPELS_SYSTEME
155 /* Initialisation de la table des appels système*/
156 printk_debug(DBG_KERNEL_START, "Initialisation appels systeme ...\n");
158 printk_debug(DBG_KERNEL_START, "Appels systeme initialises\n");
159#endif
160
161#ifdef MANUX_PCI
162 /* Initialisation du bus PCI */
163 printk_debug(DBG_KERNEL_START, "Initialisation du bus PCI ...\n");
165 printk_debug(DBG_KERNEL_START, "Bus PCI initialise...\n");
166#endif
167
168#ifdef MANUX_VIRTIO_CONSOLE
169 printk_debug(DBG_KERNEL_START, "Initialisation de virtio console ...\n");
170 if (virtioConsoleInitialisation(&iNoeudVirtioConsole) == ESUCCES) {
171 fichierOuvrir(&iNoeudVirtioConsole, &fichierVirtioConsole, O_WRONLY, 0);
172 journalAffecterFichier(&fichierVirtioConsole);
173 }
174 printk_debug(DBG_KERNEL_START, "Virtio console initialise...\n");
175#endif
176
177#ifdef MANUX_RESEAU
178 // Initialisation du réseau
179 printk_debug(DBG_KERNEL_START, "Initialisation du reseau ...\n");
180# ifdef MANUX_VIRTIO_NET
182# endif
183 printk_debug(DBG_KERNEL_START, "Reseau initialise\n");
184#endif
185
186#ifdef MANUX_FICHIER
187 // Initialisation de la gestion des systèmes de fichiers
188 printk_debug(DBG_KERNEL_START, "Initialisation du systeme de fichiers ...\n");
190 printk_debug(DBG_KERNEL_START, "Systeme de fichiers initialise\n");
191#endif
192
193#ifdef MANUX_RAMDISK
194 // Initialisation du ramdisk
195 if (infoSysteme.tailleRamdisk > 0) {
196 printk_debug(DBG_KERNEL_START, "Ramdisk (a %d de taille %d Ko) ...\n",
197 adresseRamdisk, infoSysteme.tailleRamdisk);
198 initialiserRamDisk(adresseRamdisk, infoSysteme.tailleRamdisk);
199 printk_debug(DBG_KERNEL_START, "Ramdisk initialise\n");
200 }
201#endif
202
203#ifdef MANUX_CLAVIER
204 // Initialisation du clavier
205 printk_debug(DBG_KERNEL_START, "Initialisation du clavier ...\n");
207 printk_debug(DBG_KERNEL_START, "Clavier initialise\n");
208#endif
209
210#ifdef MANUX_TACHES
211 // Initialisation de la gestion des processus
212 printk_debug(DBG_KERNEL_START, "Initialisation du scheduler ...\n");
214 printk_debug(DBG_KERNEL_START, "Scheduler initialise\n");
215#endif
216
217 printk_debug(DBG_KERNEL_START, "Initialisation de l'horloge ...\n");
219 printk_debug(DBG_KERNEL_START, "Horloge initialisee\n");
220
221#ifdef MANUX_KMALLOC
222 // Initilisation du système kmalloc
223 printk_debug(DBG_KERNEL_START, "Initialisation de kmalloc ...\n");
225 printk_debug(DBG_KERNEL_START, "kmalloc initialise\n");
226#endif
227
228#ifdef MANUX_REGISTRE
229 // Initialisation du registre (utilise kmalloc)
230 printk_debug(DBG_KERNEL_START, "Initialisation du registre ...\n");
232 printk_debug(DBG_KERNEL_START, "Registre initialise...\n");
233#endif
234
235#ifdef MANUX_CONSOLES_VIRTUELLES
236 // On va maintenant faire de la tâche en cours une tâche "banale"
237 tacheSetConsole(tacheEnCours, creerConsoleVirtuelle());
238#endif
239
240 init();
241} /* startManuX */
242
243
Définition des opérations de synchronisation de ManuX.
#define O_WRONLY
Definition fichier.h:28
void sfInitialiser(void)
Definition fichier.c:129
int fichierOuvrir(INoeud *iNoeud, Fichier *f, uint16_t fanions, uint16_t mode)
: Ouverture d'un fichier.
Definition fichier.c:145
void initialiserHorloge(void)
Initialisation du système d'horloge.
Definition horloge.c:95
void initialiserAppelsSysteme(void)
Définition des fonctions de base d'accés à la console.
int consoleInitialisation(void)
Initialisation du système de console sans notion de fichier.
Definition console.c:869
#define ESUCCES
Definition errno.h:10
Définition des outils de journalisation des messages du noyau.
void journalInitialiser(void)
Initialisation du système de journalisation.
Definition journal.c:84
void journalAffecterFichier(Fichier *pc)
Affectation d'un fichier sur lequel seront envoyés les messages journalisés.
Définition de kmalloc.
void initialiserMemoire(uint32_t tailleMemoireDeBase, uint32_t tailleMemoireEtendue)
Initialisation de la mémoire au niveau pages.
Definition memoire.c:103
Définition des fonctions de base d'entrée-sortie du noyau.
Gestion des registres (outils permettant de stocker des paramètres)
void registreSystemeInitialiser(void)
Initialisation du registre système.
Definition registre.c:536
unsigned long uint32_t
Definition types.h:20
int virtioNetInit(void)
Initialisation des périphériques.
Definition virtio-net.c:373
void initialiserIDT(void)
! Initialiser l'IDT (Interrupt Description Table)
void kmallocInitialisation(void)
Initialisation du sytème kmalloc.
Definition kmalloc-zs.c:80
void startManuX(void)
Definition main.c:89
void init(void)
INoeud iNoeudConsole
Definition main.c:87
Interfaçage avec les bootloader.
InfoSysteme infoSysteme
Stockage des informations décrivant le système fournies par le bootloader.
Definition bootloader.c:29
void bootloaderInitialiser(void)
Lecture des informations fournies par le bootloader.
Definition bootloader.c:46
void initialiserClavier(void)
Definition clavier.c:28
#define DBG_KERNEL_START
Definition debug.h:22
#define printk_debug(lvl, fmt, args...)
Definition debug.h:86
void PCIEnumerationDesEquipements(void)
: recherche des équipements PCI disponibles
Definition pci.c:180
void initialiserRamDisk(uint32_t adresse, uint16_t tailleKo)
Definition ramdisk.c:10
Définition de quelques fonctions de base (C) Manu Chaput 2020-2023.
int initialiserPagination(int tailleMemoireEtendue)
Definition pagination.c:167
void initialiserScheduler(void)
Identifiant de la tâche actuellement en cours d'exécution dans le noyau (0 si aucune)
Definition scheduler.c:181
Tache * tacheEnCours
: L'identification de la tâche en cours
Definition scheduler.c:91
void initialiserGDT(void)
Definition segment.c:156
: Qu'est-ce qu'un fichier ouvert du point de vue du noyau ?
Definition fichier.h:46
: Un INoeud représente un fichier, d'un point de vue statique Il s'agit donc de la description d'un f...
Definition inoeud.h:27
uint32_t memoireDeBase
Definition bootloader.h:43
uint32_t memoireEtendue
Definition bootloader.h:44
Définition des éléments de base des consoles virtio.
int virtioConsoleInitialisation(INoeud *iNoeudVirtioConsole)
Initialisation des périphériques.