No results
1
01 setup and fixes
Sacha Laurent edited this page 2026-07-11 18:00:09 +02:00
Journal de bord - Perrytel OS
01. Mise en place initiale et corrections critiques
Date : 24 Mai 2026 Sujet : Correction du bootloader et réorganisation de l'architecture.
1. Analyse des problèmes initiaux
Au lancement du projet, le noyau ne produisait aucun affichage dans QEMU. Trois causes majeures ont été identifiées :
- Décalage de l'adresse de base : La directive
.org 0x80000dansboot.Scréait un décalage inutile de 512 Ko, car le linker script positionnait déjà le code à cette adresse. - Conflit multicœur : Sur Raspberry Pi 4, les 4 cœurs démarrent simultanément à
0x80000. Sans contrôle, ils entraient tous en collision sur la pile et l'initialisation de l'UART. - Boucle BSS corrompue : Le nettoyage de la section BSS écrivait 8 octets mais ne décrémentait le compteur que de 1, causant un écrasement massif de la mémoire vive.
2. Solutions apportées
Bootloader (arch/aarch64/boot.S)
- Ajout d'une vérification du
mpidr_el1pour ne laisser passer que le CPU 0. Les autres cœurs sont mis en attente (wfe). - Initialisation correcte de la pile (
sp) juste en dessous de l'adresse de chargement. - Correction de la boucle BSS pour utiliser des sauts de 8 octets (
subs w6, w6, #8).
UART & Echo (kernel/main.c)
- Modification du driver UART pour gérer les retours chariot (
\r). - Désormais, le noyau renvoie
\r\nquand il reçoit\r, permettant un affichage correct dans les terminaux série.
3. Réorganisation "Meaty Skeleton" (AArch64)
Le projet a été restructuré pour séparer les responsabilités :
/
├── arch/aarch64/ # Code spécifique au CPU (boot, linker)
├── drivers/ # Drivers matériels (UART)
├── include/ # Headers globaux
├── kernel/ # Logique OS indépendante du matériel
└── build.sh # Script de compilation modulaire
Bénéfice : Cette structure permet de porter l'OS sur d'autres modèles de Pi ou d'autres architectures sans réécrire la logique du noyau.
4. État actuel
- Bootloader fonctionnel.
- Affichage UART opérationnel sur QEMU.
- Code structuré et modulaire.
- Système d'interruptions (Prochaine étape).
Note générée pour la vault Obsidian - Perrytel OS Project.