Small operating system made in C language
Go to file
Nicolas H 9fb0a7de6d docs: correction d'une erreur dans l'aide README.md 2020-09-18 21:51:42 +02:00
Graphisme build: mise en place d'un menu de compilation et mise à jour de l'aide 2020-09-18 21:47:25 +02:00
debug build: mise en place d'un menu de compilation et mise à jour de l'aide 2020-09-18 21:47:25 +02:00
docker build: mise en place d'un menu de compilation et mise à jour de l'aide 2020-09-18 21:47:25 +02:00
final build: changement des makefiles pour utilisation de Docker pour la compilation 2020-09-17 16:37:10 +02:00
include feat: premier boot opérationnel avec la commande linux16 de GRUB, reste la gestion VESA 2019-01-19 00:17:35 +01:00
lib build: Correction des makefiles et ajout du disque dur UEFI 2020-09-16 22:32:13 +02:00
programs build: changement des makefiles pour utilisation de Docker pour la compilation 2020-09-17 16:37:10 +02:00
system build: Correction des makefiles et ajout du disque dur UEFI 2020-09-16 22:32:13 +02:00
templates feat: bascule vers le format de noyau linux afin de bénéficier des outils de chargement qui vont bien 2018-12-27 14:24:47 +01:00
tools build: changement des makefiles pour utilisation de Docker pour la compilation 2020-09-17 16:37:10 +02:00
API.md feat: bascule vers le format de noyau linux afin de bénéficier des outils de chargement qui vont bien 2018-12-27 14:24:47 +01:00
BUGS.md feat: génération semi-automatique des SYSCALL pour le RING3 à partir d'un script python, encore instable 2018-12-14 01:06:37 +01:00
INFORMATIONS.md docs: ajout d'informations... 2019-01-12 01:39:05 +01:00
LICENSE.md feat: première version C/C++ de COS2000 2007-04-02 12:52:01 +00:00
README.md docs: correction d'une erreur dans l'aide README.md 2020-09-18 21:51:42 +02:00
SCREENSHOTS.md fix: suppression de la gestion de la disquette, ajout du déboguage avec Bochs, correction initialisation du FPU au démarrage, changement de modèle 3D 2018-11-29 16:45:40 +01:00
make.sh build: changement des makefiles pour utilisation de Docker pour la compilation 2020-09-17 16:37:10 +02:00
makefile build: mise en place d'un menu de compilation et mise à jour de l'aide 2020-09-18 21:47:25 +02:00
makesyscall.py feat: bascule vers le format de noyau linux afin de bénéficier des outils de chargement qui vont bien 2018-12-27 14:24:47 +01:00
menu.sh build: mise en place d'un menu de compilation et mise à jour de l'aide 2020-09-18 21:47:25 +02:00

README.md

logo

COS2000

Présentation du projet

Qu'est ce que COS2000 ?

COS2000 est un système d'exploitation minimaliste dont l'objectif est essentiellement pédagogique. Il s'agit avant tout du travail d'un passionné de programmation système.

Le système est développé essentiellement en langage C mais il comporte aussi quelques lignes d'assembleur X86.

Qu'est ce qu'un système d'exploitation ?

Il s'agit du logiciel principal qui anime votre ordinateur. Il a pour fonctions principales :

  • Piloter des périphériques tels que souris, clavier, écran, imprimante...etc;
  • Gérer des fichiers qui sont produit et exploités par des applications;
  • Coordonner l'accès aux ressources par plusieurs utilisateurs;
  • Détection et récupération des dysfonctionnements;
  • Surveiller les performances et assurer une gestion optimale des ressources systèmes.

Sans système d'exploitation votre ordinateur est inopérant: c'est une boite vide !

Comment utiliser COS2000 ?

COS2000 n'a pas pour but d'être utilisé en production. Il s'agit d'un système en cours de développement que vous pouvez néanmoins tester sur un ordinateur physique ou de préférence sur une machine virtuelle. Il est nécessaire de compiler le système avant de démarrer celui-ci à partir d'un périphérique amovible (clé usb).

Sur quel ordinateur fonctionne t'il ?

COS2000 est compatible avec tout ordinateur compatible PC comprenant un processeur avec FPU intégré, gestion de la mémoire paginée et mode protégé : Intel Pentium et supérieur.

Ai-je le droit de le copier, de le modifier, de le réutiliser, de le vendre ?

COS2000 est sous licence LGPL v3.0, en simplifiant un peu :

  • COPIER - OUI
  • MODIFIER - OUI
  • REUTILISER - OUI en citant l'auteur
  • VENDRE - NON

Les détails se trouvent dans le fichier LICENSE.md

logo

Compilation de COS2000

Logiciels utilisés

L'OS a été développé sous Linux afin de disposer d'un maximum d'outils dont GCC/GAS/Docker et l'ensemble des BINUTILS. Je vous conseille donc d'utiliser Linux afin de procéder à la compilation même si celle-ci peut fonctionner depuis Windows grace à Cygwin. Des distributions "Live" existent si vous ne souhaitez pas installer sur votre ordinateur (http://www.linuxmint.com/edition.php?id=259).

Le système de conteneurisation Docker est exploité afin de d'assurer une reproductibilité totale de l'environnement de compilation quelque soit le système d'exploitation utilisé.

Installation/compilation automatique

Téléchargez et exécutez le script d'installation automatique et de compilation "menu.sh"

wget https://raw.githubusercontent.com/dahut87/cos2000v2/develop/menu.sh

Executez le script et les sources seront ainsi automatiquement téléchargées sur votre ordinateur par le biais de Git.

chmod 755 ./menu.sh && ./menu.sh

Un menu s'affiche ensuite qui vous propose de réaliser différentes tâches dont la compilation et/ou le test de COS2000.

Menu de compilation

Installation/compilation manuelle

Téléchargement de COS2000

Afin de faciliter la mise à jour et le suivi des version de COS2000, GIT est utilisé.

Si vous n'avez pas GIT, installez le avec la commande suivante (sous paquet debian .deb):

sudo apt-get install git

Puis cloner le source chez vous avec la commande :

git clone https://github.com/dahut87/cos2000.git

Compilation en ligne de commande

Docker est utilisé afin de permettre le fonctionnement correcte de la compilation. Au premier lancement de make.sh, si vous utilisez une distribution basée sur le système de paquet Debian, l'installation sera réalisée automatiquement. Dans le cas contraire, installez Docker et relancez le script. Une image docker est produite afin de procéder ensuite à la compilation du système.

Commande de compilation de base

  • ./make.sh all compile tout le projet dans sa version disque dur et disque dur en UEFI

Autres commandes de compilation de COS2000

  • ./make.sh harddisk compile la version disque dur
  • ./make.sh uefi compile la version disque dur UEFI
  • ./make.sh bochstest lance l'émulation BOCHS en 32 bits sur disque dur
  • ./make.sh test lance l'émulation QEMU en 32 bits sur disque dur
  • ./make.sh test64 lance l'émulation QEMU en 64 bits sur disque dur en UEFI
  • ./make.sh clean supprime les fichers compilés
  • ./make.sh syscall réactualise les librairies du domaine utilisateur
  • ./make.sh programs compile les programmes du domaine utilisateur
  • VESA=no ./make.sh test préfixe à utiliser (VESA=no) pour faire appel au pilote VGA et non pas VESA

Utilisation

Sur un ordinateur émulé

Pour tester l'OS en émulation taper donc la commande ./make.sh test qui compilera avant de lancer Qemu.

Sur un ordinateur physique

Lancer une compilation du système COS2000

./make.sh all

Puis, il faut copier l'image sur une clé (Attention l'opération effacera le contenu de la clé) :

sudo dd if=./final/harddisk.img.final of=/dev/sdx bs=1M (ou sdx est votre périphérique)

Bootez sur votre clé en mode bios (legacy).

Pour un boot en mode UEFI

sudo dd if=./final/harddiskuefi.img.final of=/dev/sdx bs=1M (ou sdx est votre périphérique)

Pour connaitre le numéro de votre périphérique (clé)

lsblk

Commandes de COS2000

Pour l'instant quelques commandes seulement sont disponibles:

  • REBOOT redémarre le PC,
  • CLEAR efface l'écran,
  • MODE change le mode video,
  • DETECTCPU detecte et affiche les informations CPU,
  • DETECTPCI detecte et affiche les périphériques PCI,
  • TEST2D teste l'affichage graphique 2D,
  • TEST3D teste l'affichage graphique 2D,
  • REGS affiche les registres CPU,
  • GDT affiche la table des descripteurs,
  • IDT affiche la table des interruptions,
  • MEM affiche les statistiques d'occupation memoire,
  • INFO affiche des informations issues de GRUB,
  • ERR génère une exception (ARGUMENTS),
  • VIEW visionne la mémoire vive (ARGUMENTS),
  • LOGO affiche le logo,
  • FONT change la police d'affichage (ARGUMENTS),
  • HELP affiche les commandes disponibles,
  • BPSET met un point d'arrêt pour le débogueur (ARGUMENTS),
  • BPCLR efface un point d'arrêt (ARGUMENTS),
  • DISASM désassemble une portion de mémoire (ARGUMENTS),

COS2000 le 28-09-2018

Organisation du dépôt

  • debug - fichiers configuration débogueur
  • docker - fichiers pour la construction de containers
  • final - img raw utilisables avec un émulateur des 3 versions
    • harddisk.img.xz
    • harddiskuefi.img.xz
  • Graphisme - fichiers images
    • screenshots - screenshots de l'évolution du système
  • include - fichier d'entête C
  • lib - librairies pour le noyau
  • makefile - Makefile du projet
  • make.sh - Script de compilation utilisant Docker
  • templates - Modèles utilisés pour générer des libraires du domaine utilisateur
  • programs - programmes pour le domaine utilisateur
    • include - fichier d'entête C
    • lib - librairies pour le domaine utilisateur
  • README.md - ce que vous lisez
  • LICENSE.md - la licence LGPLv3.0
  • INFORMATIONS.md - informations sur le développement de COS2000
  • BUGS.md - bugs rélevés dans le système
  • API.md - Liste des APIs fournies par le système COS2000
  • system - le noyau lui-même

En savoir plus...

Avancement du projet

  • démarrage tout support grâce à GRUB (disquette, disque dur/SSD, réseau...Etc),
  • pilotes souris et clavier,
  • pilotes VGA et VESA (framebuffer),
  • bibliothèque graphique 2D,
  • bibliothèque graphique 3D,
  • gestion des interruptions (IDT),
  • gestion de la segmentation (GDT),
  • gestion de la mémoire paginée,
  • débogueur et désassembleur intégré,
  • interpréteur de commande,
  • affichage de chaîne de caractères (prinfs,sprintf,vsprintf) avec type (bin,hexa,octal,float,double,string,char),
  • mode protégé limité à 4Go de mémoire vive (32 bits),
  • gestion avancée de la mémoire (vmalloc).
  • chargeur ELF32,
  • espace utilisateur et appels systèmes,
  • ordonnanceur de tâche (par TSS),

En cours

  • correction de bogues - libération des ressources après destruction processus,
  • liste d'API automatiquement mise à jour avec intégration de librairies & header,
  • gestion du système de fichier CRAMFS,
  • lancement du noyau par kernel et non par multiboot afin de bénéficier de initrd,

A faire

  • pilote IDE/ATA (PIO mode),
  • fonctions affichage image PNG,
  • double buffering,
  • gestion multiprocessing,
  • virtualisation par VMX,
  • Gestion du système de fichier EXT2FS.

COS2000 le 29-11-2018

Autres Licences (autres auteurs)

Des fichiers sources utilisés par COS2000 sont sous d'autres licences, parmis ceux-ci figurent :

  • include/queues.h sous licence Berkeley Software Distribution License
  • tools/* sous licence GPL V2.0, fichiers issus du noyau Linux
  • debug/gdbinit, GDB dashboard - Modular visual interface for GDB in Python Copyright (c) 2015-2017 Andrea Cardaci cyrus.and@gmail.com.

Historique du projet

  • Version 2.2fr - C en mode protégé Reprise du projet
  • Version 2.1fr - C en mode protégé Abandon du projet
  • Version 2.0 - C en mode protégé VGA text+pmode
  • Version 1.x - Assembleur en mode réel (v1.0 - 1.4.2fr)

“La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information..

― Albert Einstein ― Mathématicien, Physicien