From 3097e1ace5dedfa7abb5a9154fb0c7e5ba2999ad Mon Sep 17 00:00:00 2001 From: Nicolas H Date: Fri, 18 Sep 2020 21:47:25 +0200 Subject: [PATCH] =?UTF-8?q?build:=20mise=20en=20place=20d'un=20menu=20de?= =?UTF-8?q?=20compilation=20et=20mise=20=C3=A0=20jour=20de=20l'aide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Graphisme/screenshots/compilation.png | Bin 0 -> 68715 bytes README.md | 47 ++++++++++------ debug/config.bochs | 9 --- docker/debian/dockerfile | 2 +- makefile | 48 +++++++--------- menu.sh | 78 ++++++++++++++++++++++++++ 6 files changed, 129 insertions(+), 55 deletions(-) create mode 100644 Graphisme/screenshots/compilation.png delete mode 100644 debug/config.bochs create mode 100755 menu.sh diff --git a/Graphisme/screenshots/compilation.png b/Graphisme/screenshots/compilation.png new file mode 100644 index 0000000000000000000000000000000000000000..d600ef3c878fdc7109da61c79ffcf9ae4c75c580 GIT binary patch literal 68715 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 65c6218..509f844 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ ![logo](https://github.com/dahut87/cos2000v2/raw/develop/Graphisme/logo.png) -## Présentation du projet +## COS2000 -### Qu'est ce que COS2000 ? +### Présentation du projet -COS2000 est un système d'exploitation minimaliste qui vise essentiellement un objectif pédagogique. +#### 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 un peu d'assembleur X86. +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 ? @@ -45,21 +47,33 @@ Les détails se trouvent dans le fichier `LICENSE.md` ### Compilation de COS2000 -#### Avant la compilation +#### Logiciels utilisés -##### 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). -L'OS a été développé sous Linux afin de disposer d'un maximum d'outils dont GCC/GAS/Docker et l'ensemble de 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é. -Je conseille l'usage du debogueur GDB avec l'ajout de [GDB dashboard - Modular visual interface for GDB in Python](https://github.com/cyrus-and/gdb-dashboard) qui permet de visualiser le contenu des registres CPU en permanence. +#### Installation/compilation automatique -Le système de conteneurisation Docker est exploité afin de d'assurer une reproductibilité totale de l'environnement de compilation quelque soit la distribution linux utilisée. +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.s` + +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](https://github.com/dahut87/cos2000v2/raw/develop/Graphisme/screenshots/compilation.png) + +#### 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 : +Si vous n'avez pas GIT, installez le avec la commande suivante (sous paquet debian .deb): `sudo apt-get install git` @@ -67,7 +81,7 @@ Puis cloner le source chez vous avec la commande : `git clone https://github.com/dahut87/cos2000.git` -#### Compilation +##### 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. @@ -87,13 +101,13 @@ Autres commandes de compilation de COS2000 * `./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 +### Utilisation -##### Sur un ordinateur émulé +#### 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 +#### Sur un ordinateur physique Lancer une compilation du système COS2000 @@ -113,7 +127,7 @@ Pour connaitre le numéro de votre périphérique (clé) `lsblk` -##### Usage de COS2000 +#### Commandes de COS2000 Pour l'instant quelques commandes seulement sont disponibles: @@ -140,7 +154,7 @@ Pour l'instant quelques commandes seulement sont disponibles: ![COS2000 le 28-09-2018](https://github.com/dahut87/cos2000v2/raw/develop/Graphisme/screenshots/28-09-2018.png) -#### Organisation du dépôt +### Organisation du dépôt * `debug` - fichiers configuration débogueur * `docker` - fichiers pour la construction de containers @@ -209,6 +223,7 @@ Des fichiers sources utilisés par COS2000 sont sous d'autres licences, parmis c * `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 . #### Historique du projet * Version 2.2fr - C en mode protégé Reprise du projet diff --git a/debug/config.bochs b/debug/config.bochs deleted file mode 100644 index 1af61a4..0000000 --- a/debug/config.bochs +++ /dev/null @@ -1,9 +0,0 @@ -megs: 1024 -romimage: file="/usr/share/bochs/BIOS-bochs-latest", address=0x00000 -vgaromimage: file="/usr/share/bochs/VGABIOS-lgpl-latest" -boot: c -ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 -ata0-master: type=disk, mode=flat, translation=auto, path="./final/harddisk.img.final", cylinders=0, heads=0, spt=0, biosdetect=auto, model="Generic 1234" -cpu: count=1, ips=20000000 -mouse: enabled=1 -display_library: wx, options="gui_debug" diff --git a/docker/debian/dockerfile b/docker/debian/dockerfile index 50431ba..7a58192 100644 --- a/docker/debian/dockerfile +++ b/docker/debian/dockerfile @@ -1,7 +1,7 @@ FROM debian:10 RUN apt-get update -yq \ -&& apt-get install --no-install-recommends gcc make qemu fusefat fuseext2 gdb ovmf xz-utils psmisc tmux git libc6-dev bsdmainutils tar wget bsdmainutils indent binutils xxd bochs bochs-x bochsbios dos2unix gnome-terminal spice-client-gtk python2.7 qemu-system-x86 -yq \ +&& apt-get install --no-install-recommends gcc make qemu fusefat fuseext2 gdb ovmf xz-utils psmisc tmux git libc6-dev bsdmainutils tar wget bsdmainutils indent binutils xxd dos2unix gnome-terminal spice-client-gtk python2.7 qemu-system-x86 -yq \ && apt-get clean -y RUN wget http://ftp.fr.debian.org/debian/pool/main/c/cramfs/cramfsprogs_1.1-6_amd64.deb -O /tmp/cramfsprogs_1.1-6_amd64.deb RUN dpkg -i /tmp/cramfsprogs_1.1-6_amd64.deb diff --git a/makefile b/makefile index f6d8fe9..7c28fbe 100755 --- a/makefile +++ b/makefile @@ -3,14 +3,14 @@ GODEBUG=exec gnome-terminal --geometry=120x55+1+1 -x ./debug/debug.sh REMOVE=rm -f INSTALL=sudo apt-get install COPY=cp -OLDEMUX86=bochs -f GIT=git status MAKECALL=python makesyscall.py MAKE=make -C SYNC=sync KILL=killall TAR=tar cf - . | gzip -f - > ./backup.tar.gz -HEXDUMP=hexdump -C ./final/harddisk.img.final|head -c10000 +HEXDUMPDSK=hexdump -C ./final/harddisk.img.final|head -c10000 +HEXDUMPSYS=hexdump -C ./system/system.sys TMUXKILL=tmux kill-session -t TRUE=|| true SPICE=spicy --uri=spice://127.0.0.1?port=5900 @@ -24,15 +24,10 @@ WAIT2S=sleep 2 ##### Construction -all: tools programs system32 system64 harddisk harddiskuefi +all: tools programs system harddisk harddiskuefi $(SYNC) -system32: ARCH=bits32 -system32: lib/libs.o system/system.sys - $(SYNC) - -system64: ARCH=bits64 -system64: lib/libs.o system/system.sys +system: lib/libs.o system/system.sys $(SYNC) tools: tools/build @@ -63,12 +58,6 @@ harddiskuefi: final/harddiskuefi.img.final system/system.sys: $(MAKE) system -final/harddisk.img.final: - $(MAKE) final harddisk.img.final - -final/harddiskuefi.img.final: - $(MAKE) final harddiskuefi.img.final - lib/libs.o: $(MAKE) libsystem/system.sys: $(MAKE) system @@ -106,7 +95,7 @@ clean: littleclean: $(MAKE) system clean $(MAKE) lib clean - $(MAKE) final littleclean + $(MAKE) final littlecleaechn $(MAKE) programs clean $(SYNC) @@ -118,7 +107,6 @@ indent: $(SYNC) killer: - $(KILL) bochs-debug $(TRUE) $(KILL) qemu-system-x86_64 $(TRUE) $(KILL) qemu-system-i386 $(TRUE) $(KILL) gnome-terminal-server $(TRUE) @@ -127,8 +115,11 @@ killer: backup: clean $(TAR) -view: - $(HEXDUMP) +view-dsk: + $(HEXDUMPDSK) + +view-sys: + $(HEXDUMPSYS) ##### Alias @@ -136,16 +127,14 @@ test: test32 retest: retest32 -test32: tools programs system32 harddisk qemu32 +test32: all qemu32 -test64: tools programs system64 harddiskuefi qemu64 +test64: all qemu64 retest32: littleclean test32 retest64: littleclean test64 -testbochs: tools programs system32 harddisk bochs-debug - ##### Debuguage debug: debug-system32 @@ -158,21 +147,22 @@ redebug64: littleclean debug-system64 kernel: debug-kernel -debug-boot: tools programs system32 harddisk qemu-debug32 +debug-boot32: all qemu-debug32 $(WAIT2S) $(GODEBUG) ./debug/boot.txt -debug-system32: tools programs system32 harddisk qemu-debug32 +debug-boot64: all qemu-debug64 + $(WAIT2S) + $(GODEBUG) ./debug/boot.txt + +debug-system32: all qemu-debug32 $(WAIT2S) $(GODEBUG) ./debug/system.txt -debug-system64: tools programs system32 harddiskuefi qemu-debug64 +debug-system64: all qemu-debug64 $(WAIT2S) $(GODEBUG) ./debug/system.txt -bochs-debug: killer - $(OLDEMUX86) ./debug/config.bochs - ##### Emulation qemu-debug32: killer diff --git a/menu.sh b/menu.sh new file mode 100755 index 0000000..6de44ca --- /dev/null +++ b/menu.sh @@ -0,0 +1,78 @@ +#!/bin/bash +PWD=$(pwd) +FILE=${PWD}/README.md +if [ ! -f "$FILE" ]; then + echo "Les sources ne sont pas complets..." + echo "* Récupération des sources" + VERSION=$(git --version|grep version) + if [ "${VERSION}" == "" ]; then + echo "Git n'est pas installé, veuillez l'installer et relancer le script" + fi + git clone https://github.com/dahut87/cos2000v2.git + cd ${PWD}/cos2000v2 + git checkout develop + git clean -fd + git reset --hard + rm -rf ../menu.sh +fi +while true +do +clear +echo "**********************************************************" +echo "* COS2000 - menu de compilation *" +echo "**********************************************************" +echo +echo "1 Compilation des sources" +echo "2l Emulation de COS2000 (legacy)" +echo "2u Emulation de COS2000 (uefi)" +echo "3l Débuguage de COS2000 (legacy)" +echo "3u Débuguage de COS2000 (uefi)" +echo "4l Débuguage de COS2000 boot en mode réel (legacy)" +echo "4u Débuguage de COS2000 boot en mode réel (legacy)" +echo "5 Réalisez une sauvegarde" +echo "6 Tuer tout les processus" +echo "7 Nettoyer les sources" +echo "8 Voir le disque en hexadécimal" +echo "9 Voir le système en hexadécimal" +echo "c Changer la version de developpement" +echo "0 Quitter" +echo "------------------------------------------" +echo "Choisissez l'action à réaliser..." +read answer +clear +case "${answer}" in +0*) exit;; +1*) ./make.sh all;; +2l) ./make.sh test32;; +2*) ./make.sh test64;; +3l) ./make.sh debug32;; +3*) ./make.sh debug64;; +4l) ./make.sh debug-boot32;; +4*) ./make.sh debug-boot64;; +5*) ./make.sh backup;; +6*) ./make.sh killer;; +7*) ./make.sh clean;; +8*) ./make.sh view-dsk|more;; +9*) ./make.sh view-sys|more;; +c*) echo "Version disponibles:" +SELECT=$(git branch|grep "*"|tr -d "* ") +NUM=1 +while read LINE +do + echo "${NUM} ${LINE}" + (( NUM++ )) +done < <(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//) +read ANSWER +CHOOSE=$(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//|tr "\n" " "|cut -d " " -f${ANSWER}) +echo "vous avez selectionné $ALL..." +git checkout $CHOOSE +git clean -fd +git reset --hard +read +;; +esac + + +done + +