build: mise en place d'un menu de compilation et mise à jour de l'aide
This commit is contained in:
parent
7e0ffc5f91
commit
3097e1ace5
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
47
README.md
47
README.md
|
@ -1,13 +1,15 @@
|
||||||
![logo](https://github.com/dahut87/cos2000v2/raw/develop/Graphisme/logo.png)
|
![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.
|
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 ?
|
#### 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
|
### 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
|
##### Téléchargement de COS2000
|
||||||
|
|
||||||
Afin de faciliter la mise à jour et le suivi des version de COS2000, GIT est utilisé.
|
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`
|
`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`
|
`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.
|
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
|
* `./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
|
* `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.
|
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
|
Lancer une compilation du système COS2000
|
||||||
|
|
||||||
|
@ -113,7 +127,7 @@ Pour connaitre le numéro de votre périphérique (clé)
|
||||||
|
|
||||||
`lsblk`
|
`lsblk`
|
||||||
|
|
||||||
##### Usage de COS2000
|
#### Commandes de COS2000
|
||||||
|
|
||||||
Pour l'instant quelques commandes seulement sont disponibles:
|
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)
|
![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
|
* `debug` - fichiers configuration débogueur
|
||||||
* `docker` - fichiers pour la construction de containers
|
* `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
|
* `include/queues.h` sous licence Berkeley Software Distribution License
|
||||||
* `tools/*` sous licence GPL V2.0, fichiers issus du noyau Linux
|
* `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
|
#### Historique du projet
|
||||||
* Version 2.2fr - C en mode protégé Reprise du projet
|
* Version 2.2fr - C en mode protégé Reprise du projet
|
||||||
|
|
|
@ -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"
|
|
|
@ -1,7 +1,7 @@
|
||||||
FROM debian:10
|
FROM debian:10
|
||||||
|
|
||||||
RUN apt-get update -yq \
|
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
|
&& 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 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
|
RUN dpkg -i /tmp/cramfsprogs_1.1-6_amd64.deb
|
||||||
|
|
48
makefile
48
makefile
|
@ -3,14 +3,14 @@ GODEBUG=exec gnome-terminal --geometry=120x55+1+1 -x ./debug/debug.sh
|
||||||
REMOVE=rm -f
|
REMOVE=rm -f
|
||||||
INSTALL=sudo apt-get install
|
INSTALL=sudo apt-get install
|
||||||
COPY=cp
|
COPY=cp
|
||||||
OLDEMUX86=bochs -f
|
|
||||||
GIT=git status
|
GIT=git status
|
||||||
MAKECALL=python makesyscall.py
|
MAKECALL=python makesyscall.py
|
||||||
MAKE=make -C
|
MAKE=make -C
|
||||||
SYNC=sync
|
SYNC=sync
|
||||||
KILL=killall
|
KILL=killall
|
||||||
TAR=tar cf - . | gzip -f - > ./backup.tar.gz
|
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
|
TMUXKILL=tmux kill-session -t
|
||||||
TRUE=|| true
|
TRUE=|| true
|
||||||
SPICE=spicy --uri=spice://127.0.0.1?port=5900
|
SPICE=spicy --uri=spice://127.0.0.1?port=5900
|
||||||
|
@ -24,15 +24,10 @@ WAIT2S=sleep 2
|
||||||
|
|
||||||
##### Construction
|
##### Construction
|
||||||
|
|
||||||
all: tools programs system32 system64 harddisk harddiskuefi
|
all: tools programs system harddisk harddiskuefi
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
system32: ARCH=bits32
|
system: lib/libs.o system/system.sys
|
||||||
system32: lib/libs.o system/system.sys
|
|
||||||
$(SYNC)
|
|
||||||
|
|
||||||
system64: ARCH=bits64
|
|
||||||
system64: lib/libs.o system/system.sys
|
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
tools: tools/build
|
tools: tools/build
|
||||||
|
@ -63,12 +58,6 @@ harddiskuefi: final/harddiskuefi.img.final
|
||||||
system/system.sys:
|
system/system.sys:
|
||||||
$(MAKE) system
|
$(MAKE) system
|
||||||
|
|
||||||
final/harddisk.img.final:
|
|
||||||
$(MAKE) final harddisk.img.final
|
|
||||||
|
|
||||||
final/harddiskuefi.img.final:
|
|
||||||
$(MAKE) final harddiskuefi.img.final
|
|
||||||
|
|
||||||
lib/libs.o:
|
lib/libs.o:
|
||||||
$(MAKE) libsystem/system.sys:
|
$(MAKE) libsystem/system.sys:
|
||||||
$(MAKE) system
|
$(MAKE) system
|
||||||
|
@ -106,7 +95,7 @@ clean:
|
||||||
littleclean:
|
littleclean:
|
||||||
$(MAKE) system clean
|
$(MAKE) system clean
|
||||||
$(MAKE) lib clean
|
$(MAKE) lib clean
|
||||||
$(MAKE) final littleclean
|
$(MAKE) final littlecleaechn
|
||||||
$(MAKE) programs clean
|
$(MAKE) programs clean
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
|
@ -118,7 +107,6 @@ indent:
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
killer:
|
killer:
|
||||||
$(KILL) bochs-debug $(TRUE)
|
|
||||||
$(KILL) qemu-system-x86_64 $(TRUE)
|
$(KILL) qemu-system-x86_64 $(TRUE)
|
||||||
$(KILL) qemu-system-i386 $(TRUE)
|
$(KILL) qemu-system-i386 $(TRUE)
|
||||||
$(KILL) gnome-terminal-server $(TRUE)
|
$(KILL) gnome-terminal-server $(TRUE)
|
||||||
|
@ -127,8 +115,11 @@ killer:
|
||||||
backup: clean
|
backup: clean
|
||||||
$(TAR)
|
$(TAR)
|
||||||
|
|
||||||
view:
|
view-dsk:
|
||||||
$(HEXDUMP)
|
$(HEXDUMPDSK)
|
||||||
|
|
||||||
|
view-sys:
|
||||||
|
$(HEXDUMPSYS)
|
||||||
|
|
||||||
##### Alias
|
##### Alias
|
||||||
|
|
||||||
|
@ -136,16 +127,14 @@ test: test32
|
||||||
|
|
||||||
retest: retest32
|
retest: retest32
|
||||||
|
|
||||||
test32: tools programs system32 harddisk qemu32
|
test32: all qemu32
|
||||||
|
|
||||||
test64: tools programs system64 harddiskuefi qemu64
|
test64: all qemu64
|
||||||
|
|
||||||
retest32: littleclean test32
|
retest32: littleclean test32
|
||||||
|
|
||||||
retest64: littleclean test64
|
retest64: littleclean test64
|
||||||
|
|
||||||
testbochs: tools programs system32 harddisk bochs-debug
|
|
||||||
|
|
||||||
##### Debuguage
|
##### Debuguage
|
||||||
|
|
||||||
debug: debug-system32
|
debug: debug-system32
|
||||||
|
@ -158,21 +147,22 @@ redebug64: littleclean debug-system64
|
||||||
|
|
||||||
kernel: debug-kernel
|
kernel: debug-kernel
|
||||||
|
|
||||||
debug-boot: tools programs system32 harddisk qemu-debug32
|
debug-boot32: all qemu-debug32
|
||||||
$(WAIT2S)
|
$(WAIT2S)
|
||||||
$(GODEBUG) ./debug/boot.txt
|
$(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)
|
$(WAIT2S)
|
||||||
$(GODEBUG) ./debug/system.txt
|
$(GODEBUG) ./debug/system.txt
|
||||||
|
|
||||||
debug-system64: tools programs system32 harddiskuefi qemu-debug64
|
debug-system64: all qemu-debug64
|
||||||
$(WAIT2S)
|
$(WAIT2S)
|
||||||
$(GODEBUG) ./debug/system.txt
|
$(GODEBUG) ./debug/system.txt
|
||||||
|
|
||||||
bochs-debug: killer
|
|
||||||
$(OLDEMUX86) ./debug/config.bochs
|
|
||||||
|
|
||||||
##### Emulation
|
##### Emulation
|
||||||
|
|
||||||
qemu-debug32: killer
|
qemu-debug32: killer
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue