build: changement des makefiles pour utilisation de Docker pour la compilation
This commit is contained in:
parent
7cd20f6c0b
commit
a4e4e981ca
87
README.md
87
README.md
|
@ -23,9 +23,7 @@ Sans système d'exploitation votre ordinateur est inopérant: c'est une boite vi
|
||||||
|
|
||||||
#### Comment utiliser COS2000 ?
|
#### Comment utiliser COS2000 ?
|
||||||
|
|
||||||
COS2000 n'a pas pour but d'être utilisé en production. Il s'agit d'un système en cours de
|
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).
|
||||||
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 ?
|
#### Sur quel ordinateur fonctionne t'il ?
|
||||||
|
|
||||||
|
@ -51,45 +49,11 @@ Les détails se trouvent dans le fichier `LICENSE.md`
|
||||||
|
|
||||||
##### Logiciels utilisés
|
##### Logiciels utilisés
|
||||||
|
|
||||||
L'OS a été développé sous Linux afin de disposer d'un maximum d'outils. Je vous conseille donc
|
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).
|
||||||
d'utiliser ce système afin de procéder à la compilation même si celle-ci peut fonctionner
|
|
||||||
depuis Cygwin. Des distributions "Live" existent si vous ne souhaitez pas installer sur votre
|
|
||||||
ordinateur (http://www.linuxmint.com/edition.php?id=259).
|
|
||||||
|
|
||||||
Les numéros de version des logiciels sont données à titre indicatif car il est fort probable que
|
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.
|
||||||
cela fonctionne parfaitement avec d'autres versions antérieures.
|
|
||||||
|
|
||||||
Je conseille l'usage du debogueur GDB avec l'ajout de [GDB dashboard - Modular visual interface for
|
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.
|
||||||
GDB in Python](https://github.com/cyrus-and/gdb-dashboard) qui permet de visualiser le contenu des registres CPU en permanence.
|
|
||||||
Compilation.
|
|
||||||
|
|
||||||
Nom | Paquet | Version
|
|
||||||
--- | --- | ---
|
|
||||||
gcc | gcc | *>7.0*
|
|
||||||
GNU Make | make | 4.1
|
|
||||||
Outils divers | binutils | 2.26-8
|
|
||||||
|
|
||||||
Images disques, débogage & émulation:
|
|
||||||
|
|
||||||
Nom | Paquet | Version
|
|
||||||
--- | --- | ---
|
|
||||||
fuse-umfuse-ext2 | fuseext2 | 0.4 29
|
|
||||||
fusefat | fusefat | 0.1a-1.1
|
|
||||||
GDB | gdb | 8.1.0.20180409-git
|
|
||||||
QEMU emulator | qemu | 2.5.0
|
|
||||||
OVMF | ovmf | 0~20160408.ffea0a2c-2
|
|
||||||
hexdump | bsdmainutils | 9.0.6
|
|
||||||
dd | coreutils | 8.25-2
|
|
||||||
tar | tar | 1.28-2.1
|
|
||||||
Bochs | bochs | 2.6
|
|
||||||
|
|
||||||
Suivi et développement:
|
|
||||||
|
|
||||||
Nom | Paquet | Version
|
|
||||||
--- | --- | ---
|
|
||||||
GNU indent | indent | 2.2.11
|
|
||||||
GIT | git | 2.7.4
|
|
||||||
Dos2unix | dos2unix| 6.0.4
|
|
||||||
|
|
||||||
##### Téléchargement de COS2000
|
##### Téléchargement de COS2000
|
||||||
|
|
||||||
|
@ -103,45 +67,37 @@ 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`
|
||||||
|
|
||||||
##### Installation des paquets nécessaires
|
|
||||||
|
|
||||||
Sous linux - Debian & Ubuntu like
|
|
||||||
|
|
||||||
`sudo apt-get install gcc qemu fusefat fuseext2 cgdb ovmf bsdmainutils tar bsdmainutils indent binutils`
|
|
||||||
|
|
||||||
ou sinon, depuis un terminal disposé sur le répertoire cos2000
|
|
||||||
|
|
||||||
`make install`
|
|
||||||
|
|
||||||
#### Compilation
|
#### Compilation
|
||||||
|
|
||||||
|
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
|
Commande de compilation de base
|
||||||
|
|
||||||
* `make all` compile tout le projet dans sa version disque dur et disque dur en UEFI
|
* `./make.sh all` compile tout le projet dans sa version disque dur et disque dur en UEFI
|
||||||
|
|
||||||
Autres commandes de compilation de COS2000
|
Autres commandes de compilation de COS2000
|
||||||
|
|
||||||
* `make harddisk` compile la version disque dur
|
* `./make.sh harddisk` compile la version disque dur
|
||||||
* `make uefi` compile la version disque dur UEFI
|
* `./make.sh uefi` compile la version disque dur UEFI
|
||||||
* `make bochstest` lance l'émulation BOCHS en 32 bits sur disque dur
|
* `./make.sh bochstest` lance l'émulation BOCHS en 32 bits sur disque dur
|
||||||
* `make test` lance l'émulation QEMU en 32 bits sur disque dur
|
* `./make.sh test` lance l'émulation QEMU en 32 bits sur disque dur
|
||||||
* `make test64` lance l'émulation QEMU en 64 bits sur disque dur en UEFI
|
* `./make.sh test64` lance l'émulation QEMU en 64 bits sur disque dur en UEFI
|
||||||
* `make clean` supprime les fichers compilés
|
* `./make.sh clean` supprime les fichers compilés
|
||||||
* `make syscall` réactualise les librairies du domaine utilisateur
|
* `./make.sh syscall` réactualise les librairies du domaine utilisateur
|
||||||
* `make programs` compile les programmes du domaine utilisateur
|
* `./make.sh programs` compile les programmes du domaine utilisateur
|
||||||
* `VESA=no make 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 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
|
||||||
|
|
||||||
`make all`
|
`./make.sh all`
|
||||||
|
|
||||||
Puis, il faut copier l'image sur une clé (Attention l'opération effacera le contenu de la clé) :
|
Puis, il faut copier l'image sur une clé (Attention l'opération effacera le contenu de la clé) :
|
||||||
|
|
||||||
|
@ -187,15 +143,16 @@ Pour l'instant quelques commandes seulement sont disponibles:
|
||||||
#### 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
|
||||||
* `final` - img raw utilisables avec un émulateur des 3 versions
|
* `final` - img raw utilisables avec un émulateur des 3 versions
|
||||||
* * `harddisk.img.final`
|
* * `harddisk.img.xz`
|
||||||
* * `harddiskuefi.img.final`
|
* * `harddiskuefi.img.xz`
|
||||||
* * `floppy.img.final`
|
|
||||||
* `Graphisme` - fichiers images
|
* `Graphisme` - fichiers images
|
||||||
* * `screenshots` - screenshots de l'évolution du système
|
* * `screenshots` - screenshots de l'évolution du système
|
||||||
* `include` - fichier d'entête C
|
* `include` - fichier d'entête C
|
||||||
* `lib` - librairies pour le noyau
|
* `lib` - librairies pour le noyau
|
||||||
* `makefile` - Makefile du projet
|
* `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
|
* `templates` - Modèles utilisés pour générer des libraires du domaine utilisateur
|
||||||
* `programs` - programmes pour le domaine utilisateur
|
* `programs` - programmes pour le domaine utilisateur
|
||||||
* * `include` - fichier d'entête C
|
* * `include` - fichier d'entête C
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
docker build . -t cos2000-compiler-alpine
|
|
@ -0,0 +1,10 @@
|
||||||
|
FROM alpine:3.12.0
|
||||||
|
RUN echo "http://alpine.42.fr/v3.12/main" > /etc/apk/repositories
|
||||||
|
RUN echo "http://alpine.42.fr/v3.12/community" >> /etc/apk/repositories
|
||||||
|
RUN apk --no-cache update
|
||||||
|
RUN apk --no-cache upgrade
|
||||||
|
RUN apk --no-cache add font-noto git gcc make qemu qemu-system-i386 qemu-system-x86_64 sed gdb ovmf tar wget gzip indent binutils hexdump dos2unix xxd xz tmux git musl-dev gnome-terminal spice-gtk spice-gtk-tools python2 cramfs
|
||||||
|
RUN mkdir -p /usr/share/qemu/
|
||||||
|
RUN ln -s /usr/share/OVMF/OVMF.fd /usr/share/qemu/OVMF.fd
|
||||||
|
RUN mkdir /data
|
||||||
|
WORKDIR /data
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
docker build . -t cos2000-compiler
|
|
@ -0,0 +1,9 @@
|
||||||
|
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 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
|
||||||
|
RUN mkdir /data
|
||||||
|
WORKDIR /data
|
|
@ -6,7 +6,6 @@ COMPRESS=xz
|
||||||
SYNC=sync
|
SYNC=sync
|
||||||
CREATEDIR=mkdir
|
CREATEDIR=mkdir
|
||||||
CAT=cat
|
CAT=cat
|
||||||
MAKE=make -C
|
|
||||||
|
|
||||||
all: harddisk.img.final harddiskuefi.img.final
|
all: harddisk.img.final harddiskuefi.img.final
|
||||||
|
|
||||||
|
@ -18,10 +17,10 @@ harddiskuefi.img.before:
|
||||||
$(CREATEDIR) ./mnt -p
|
$(CREATEDIR) ./mnt -p
|
||||||
|
|
||||||
harddiskuefi.img.final: harddiskuefi.img.before
|
harddiskuefi.img.final: harddiskuefi.img.before
|
||||||
mount.fuse-ext2 -o rw+ harddiskuefi.img.part1 ./mnt
|
mount -t ext2 -o rw harddiskuefi.img.part1 ./mnt
|
||||||
$(COPY) ../system/system.sys ./mnt/boot/
|
$(COPY) ../system/system.sys ./mnt/boot/
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
fusermount ./mnt -u
|
umount ./mnt
|
||||||
cat harddiskuefi.img.before > harddiskuefi.img.final
|
cat harddiskuefi.img.before > harddiskuefi.img.final
|
||||||
cat harddiskuefi.img.part1 >> harddiskuefi.img.final
|
cat harddiskuefi.img.part1 >> harddiskuefi.img.final
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
@ -34,10 +33,10 @@ harddisk.img.before:
|
||||||
$(CREATEDIR) ./mnt -p
|
$(CREATEDIR) ./mnt -p
|
||||||
|
|
||||||
harddisk.img.final: harddisk.img.before
|
harddisk.img.final: harddisk.img.before
|
||||||
mount.fuse-ext2 -o rw+ harddisk.img.part1 ./mnt
|
mount -t ext2 -o rw harddisk.img.part1 ./mnt
|
||||||
$(COPY) ../system/system.sys ./mnt/boot/
|
$(COPY) ../system/system.sys ./mnt/boot/
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
fusermount ./mnt -u
|
umount ./mnt
|
||||||
cat harddisk.img.before > harddisk.img.final
|
cat harddisk.img.before > harddisk.img.final
|
||||||
cat harddisk.img.part1 >> harddisk.img.final
|
cat harddisk.img.part1 >> harddisk.img.final
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
@ -55,3 +54,4 @@ clean:
|
||||||
$(REMOVE) *.part1
|
$(REMOVE) *.part1
|
||||||
$(REMOVE) *.img
|
$(REMOVE) *.img
|
||||||
$(REMOVE) *.final
|
$(REMOVE) *.final
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "Autorisation de docker à se connecter à l'écran :0"
|
||||||
|
xhost +local:docker
|
||||||
|
DOCKER=$(docker -v| grep build)
|
||||||
|
ALPINE=$(docker image ls| grep cos2000-compiler-alpine)
|
||||||
|
COMPILER=$(docker image ls| grep cos2000-compiler)
|
||||||
|
PWD=$(pwd)
|
||||||
|
if [ "${DOCKER}" == "" ]; then
|
||||||
|
echo "Docker n'est pas installé..."
|
||||||
|
echo "*** installation si sous gestionnaire de paquet debian (.deb)"
|
||||||
|
sudo apt-get install docker
|
||||||
|
exit
|
||||||
|
elif [ "${ALPINE}" != "" ]; then
|
||||||
|
echo "*** lancement de la version Alpine Linux"
|
||||||
|
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler-alpine make $1
|
||||||
|
elif [ "${COMPILER}" != "" ]; then
|
||||||
|
echo "*** lancement de la version Debian"
|
||||||
|
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler make $1
|
||||||
|
else
|
||||||
|
echo "Docker est installé mais aucune image docker n'est fonctionnelle..."
|
||||||
|
echo "*** compilation de l'image docker"
|
||||||
|
docker build ${PWD}/docker/alpine -t cos2000-compiler-alpine
|
||||||
|
fi
|
37
makefile
37
makefile
|
@ -52,10 +52,19 @@ harddisk: final/harddisk.img.final
|
||||||
|
|
||||||
harddiskuefi: final/harddiskuefi.img.final
|
harddiskuefi: final/harddiskuefi.img.final
|
||||||
|
|
||||||
install:
|
system/system.sys:
|
||||||
$(INSTALL) gcc qemu fusefat fuseext2 gdb ovmf bsdmainutils tar bsdmainutils indent binutils bochs bochs-x bochsbios dos2unix gnome-terminal spice-client-gtk python2
|
$(MAKE) system
|
||||||
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
|
|
||||||
dpkg -i /tmp/cramfsprogs_1.1-6_amd64.deb
|
final/harddisk.img.final:
|
||||||
|
$(MAKE) final harddisk.img.final
|
||||||
|
|
||||||
|
final/harddiskuefi.img.final:
|
||||||
|
$(MAKE) final harddiskuefi.img.final
|
||||||
|
|
||||||
|
lib/libs.o:
|
||||||
|
$(MAKE) lib
|
||||||
|
|
||||||
|
##### Divers
|
||||||
|
|
||||||
togit:
|
togit:
|
||||||
$(MAKE) system togit
|
$(MAKE) system togit
|
||||||
|
@ -67,6 +76,7 @@ togit:
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
$(REMOVE) ./syscalls.txt
|
||||||
$(REMOVE) .gdb_history
|
$(REMOVE) .gdb_history
|
||||||
$(MAKE) system clean
|
$(MAKE) system clean
|
||||||
$(MAKE) lib clean
|
$(MAKE) lib clean
|
||||||
|
@ -93,6 +103,11 @@ backup: clean
|
||||||
cd ..
|
cd ..
|
||||||
$(TAR)
|
$(TAR)
|
||||||
|
|
||||||
|
view:
|
||||||
|
$(HEXDUMP)
|
||||||
|
|
||||||
|
##### Alias
|
||||||
|
|
||||||
test: test32
|
test: test32
|
||||||
|
|
||||||
retest: retest32
|
retest: retest32
|
||||||
|
@ -107,9 +122,6 @@ retest64: littleclean test64
|
||||||
|
|
||||||
testbochs: tools programs system32 harddisk bochs-debug
|
testbochs: tools programs system32 harddisk bochs-debug
|
||||||
|
|
||||||
view:
|
|
||||||
$(HEXDUMP)
|
|
||||||
|
|
||||||
##### Debuguage
|
##### Debuguage
|
||||||
|
|
||||||
debug: debug-system32
|
debug: debug-system32
|
||||||
|
@ -164,14 +176,3 @@ qemu64: killer
|
||||||
$(WAIT2S)
|
$(WAIT2S)
|
||||||
$(SPICE)
|
$(SPICE)
|
||||||
|
|
||||||
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) lib
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bl
|
||||||
REMOVE=rm -f
|
REMOVE=rm -f
|
||||||
CHANGELF=elfedit --output-osabi FenixOS
|
CHANGELF=elfedit --output-osabi FenixOS
|
||||||
CHANGEPERM=chmod 644
|
CHANGEPERM=chmod 644
|
||||||
|
CHANGEEXE=chmod 755
|
||||||
MOVE=mv
|
MOVE=mv
|
||||||
SYNC=sync
|
SYNC=sync
|
||||||
MAKE=make -C
|
MAKE=make -C
|
||||||
|
@ -17,7 +18,7 @@ all: lib/libs.a ../final/initram.img
|
||||||
togit: clean indent
|
togit: clean indent
|
||||||
|
|
||||||
../final/initram.img: $(EXECS)
|
../final/initram.img: $(EXECS)
|
||||||
(find . -type f ! -perm /u=x -maxdepth 1 -regex '.+/\.?[^\.]+' -exec $(MOVE) {} ../final/cramfs/executables/ \;;true)
|
(find . -maxdepth 1 -type f ! -name makefile -perm /u=x -exec $(MOVE) {} ../final/cramfs/executables/ \;;true)
|
||||||
mkcramfs ../final/cramfs/ ../final/initram.img
|
mkcramfs ../final/cramfs/ ../final/initram.img
|
||||||
|
|
||||||
lib/libs.a:
|
lib/libs.a:
|
||||||
|
@ -26,15 +27,15 @@ lib/libs.a:
|
||||||
%: %.c
|
%: %.c
|
||||||
$(CC) $@.o $<
|
$(CC) $@.o $<
|
||||||
$(LINK) $@ $@.o lib/libs.a
|
$(LINK) $@ $@.o lib/libs.a
|
||||||
$(CHANGEPERM) $@
|
$(CHANGEEXE) $@
|
||||||
$(CHANGELF) $@
|
$(CHANGELF) $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
make -C lib clean
|
make -C lib clean
|
||||||
$(REMOVE) *.o
|
$(REMOVE) *.o
|
||||||
$(REMOVE) *.c~
|
$(REMOVE) *.c~
|
||||||
(find ../final/cramfs/executables -type f ! -perm /u=x -maxdepth 1 -regex '.+/\.?[^\.]+' -exec $(REMOVE) {} \;;true)
|
(find ../final/cramfs/executables -maxdepth 1 -type f ! -name makefile -perm /u=x -exec $(REMOVE) {} \;;true)
|
||||||
(find . -type f ! -perm /u=x -maxdepth 1 -regex '.+/\.?[^\.]+' -exec $(REMOVE) {} \;;true)
|
(find . -maxdepth 1-type f ! -name makefile -perm /u=x -exec $(REMOVE) {} \;;true)
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
indent:
|
indent:
|
||||||
|
|
65
syscalls.txt
65
syscalls.txt
|
@ -1,65 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"ID":5,
|
|
||||||
"LIBRARY":"libsys",
|
|
||||||
"NAME":"exit",
|
|
||||||
"INTERNALNAME":"processexit",
|
|
||||||
"DESCRIPTION":"End a task for user or kernel domain",
|
|
||||||
"ARGS": [
|
|
||||||
{"TYPE":"u32","NAME":"resultcode","DESCRIPTION":"Code result of the execution"}
|
|
||||||
],
|
|
||||||
"RETURN":"u32"
|
|
||||||
}
|
|
||||||
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"ID":4,
|
|
||||||
"NAME":"getticks",
|
|
||||||
"LIBRARY":"libsys",
|
|
||||||
"INTERNALNAME":"gettimer",
|
|
||||||
"DESCRIPTION":"Return the internal value of the timer",
|
|
||||||
"ARGS": [],
|
|
||||||
"RETURN":"u32"
|
|
||||||
}
|
|
||||||
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"ID":2,
|
|
||||||
"LIBRARY":"libvideo",
|
|
||||||
"NAME":"print",
|
|
||||||
"INTERNALNAME":"print",
|
|
||||||
"DESCRIPTION":"Show a string on the screen",
|
|
||||||
"ARGS": [
|
|
||||||
{"TYPE":"u8*","NAME":"string","DESCRIPTION":"string to show in ascii format"}
|
|
||||||
],
|
|
||||||
"RETURN":"u32"
|
|
||||||
}
|
|
||||||
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"ID":1,
|
|
||||||
"LIBRARY":"libsys",
|
|
||||||
"NAME":"waitkey",
|
|
||||||
"INTERNALNAME":"waitascii",
|
|
||||||
"DESCRIPTION":"Wait for user to press a key and return the ascii code pressed",
|
|
||||||
"ARGS": [],
|
|
||||||
"RETURN":"u8"
|
|
||||||
}
|
|
||||||
|
|
||||||
,
|
|
||||||
{
|
|
||||||
"ID":0,
|
|
||||||
"LIBRARY":"libsys",
|
|
||||||
"NAME":"testapi",
|
|
||||||
"INTERNALNAME":"testapi",
|
|
||||||
"DESCRIPTION":"Simple function to test if SYSCALL API is correctly running",
|
|
||||||
"ARGS": [
|
|
||||||
{"TYPE":"u32","NAME":"arg1","DESCRIPTION":"first argument of your choice"},
|
|
||||||
{"TYPE":"u32","NAME":"arg2","DESCRIPTION":"second argument of your choice"},
|
|
||||||
{"TYPE":"u32","NAME":"arg3","DESCRIPTION":"third argument of your choice"}
|
|
||||||
],
|
|
||||||
"RETURN":"u32",
|
|
||||||
"DUMP":"yes"
|
|
||||||
}
|
|
||||||
|
|
||||||
]
|
|
|
@ -83,89 +83,4 @@ indent:
|
||||||
$(INDENT) *.c
|
$(INDENT) *.c
|
||||||
$(REMOVE) *.c~
|
$(REMOVE) *.c~
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
GCC=gcc -O0 -g -nostdinc -ffreestanding -fno-builtin -Wall -w -I ../include -m32 -fno-pie -no-pie -c -o
|
|
||||||
ASM=gcc -nostdinc -ffreestanding -fno-builtin -m32 -c -fno-pie -no-pie -I ../include -D__ASSEMBLY__ -c -o
|
|
||||||
LINK=ld -m elf_i386 -n
|
|
||||||
CONVERT=dos2unix
|
|
||||||
INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bli0 -ncdw -nce -cli8 -cbi0 -npcs -cs -saf -sai -saw -nprs -lp -npsl
|
|
||||||
REMOVE=rm -f
|
|
||||||
CHANGEPERM=chmod 644
|
|
||||||
NM=nm
|
|
||||||
OBJCOPY=objcopy -O binary -R .note -R .comment -S
|
|
||||||
OBJDEBUG=objcopy --only-keep-debug
|
|
||||||
ZOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|_ehead\|_text\|z_.*\)$$/\#define ZO_\2 0x\1/p'
|
|
||||||
VOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(_text\|__bss_start\|_end\)$$/\#define VO_\2 _AC(0x\1,UL)/p'
|
|
||||||
COMP=gzip -9 -f
|
|
||||||
BUILD=../tools/build
|
|
||||||
MKPIGGY=../tools/mkpiggy
|
|
||||||
MAKE=make -C
|
|
||||||
SYNC=sync
|
|
||||||
|
|
||||||
all: system.sys
|
|
||||||
|
|
||||||
system.sys: piggy.o voffset.h zoffset.h realmode/setup.bin
|
|
||||||
$(BUILD) realmode/setup.bin system.bin zoffset.h system.sys
|
|
||||||
$(SYNC)
|
|
||||||
|
|
||||||
allpiggy.o: piggy.o decompress.o header.o
|
|
||||||
$(LINK) -T allpiggy piggy.o decompress.o header.o
|
|
||||||
|
|
||||||
voffset.h: system
|
|
||||||
$(NM) system|$(VOFFSET)>voffset.h
|
|
||||||
|
|
||||||
zoffset.h: piggy.o
|
|
||||||
$(NM) piggy.o|$(ZOFFSET)>zoffset.h
|
|
||||||
|
|
||||||
togit: clean indent
|
|
||||||
|
|
||||||
piggy.o: piggy.S
|
|
||||||
$(ASM) $@ $^
|
|
||||||
|
|
||||||
system: system.o system_asm.o ../lib/libs.o
|
|
||||||
$(LINK) -T system.ld system.o system_asm.o ../lib/libs.o
|
|
||||||
$(OBJDEBUG) system system.sym
|
|
||||||
$(NM) system > system.map
|
|
||||||
|
|
||||||
system.bin: system
|
|
||||||
$(OBJCOPY) $^ $@
|
|
||||||
|
|
||||||
system.bin.gz: system.bin
|
|
||||||
cat $^|$(COMP) > $@
|
|
||||||
|
|
||||||
piggy.S: system.bin.gz
|
|
||||||
$(MKPIGGY) $^ > $@
|
|
||||||
|
|
||||||
realmode/setup.bin:
|
|
||||||
$(MAKE) realmode
|
|
||||||
|
|
||||||
system.o: system.c
|
|
||||||
$(GCC) $@ $^
|
|
||||||
|
|
||||||
system_asm.o: system_asm.S
|
|
||||||
$(ASM) $@ $^
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) realmode clean
|
|
||||||
$(REMOVE) system
|
|
||||||
$(REMOVE) piggy.S
|
|
||||||
$(REMOVE) *.o
|
|
||||||
$(REMOVE) *.tmp
|
|
||||||
$(REMOVE) *.sym
|
|
||||||
$(REMOVE) *.map
|
|
||||||
$(REMOVE) *.gz
|
|
||||||
$(REMOVE) *.h
|
|
||||||
$(REMOVE) *.out
|
|
||||||
$(REMOVE) *.bin
|
|
||||||
$(REMOVE) *.sys
|
|
||||||
$(REMOVE) *.s
|
|
||||||
$(REMOVE) *.c~
|
|
||||||
$(SYNC)
|
|
||||||
|
|
||||||
indent:
|
|
||||||
$(MAKE) realmode indent
|
|
||||||
$(CHANGEPERM) *.c
|
|
||||||
$(CONVERT) *.c
|
|
||||||
$(INDENT) *.c
|
|
||||||
$(REMOVE) *.c~
|
|
||||||
$(SYNC)
|
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ togit: clean indent
|
||||||
clean:
|
clean:
|
||||||
$(REMOVE) *.o
|
$(REMOVE) *.o
|
||||||
$(REMOVE) *.c~
|
$(REMOVE) *.c~
|
||||||
find . -maxdepth 1 -type f ! -name makefile -perm /u=x -regex '.+/\.?[^\.]+' -exec $(REMOVE) {} \;
|
find . -maxdepth 1 -type f ! -name makefile -perm /u=x -exec $(REMOVE) {} \;
|
||||||
$(SYNC)
|
$(SYNC)
|
||||||
|
|
||||||
indent:
|
indent:
|
||||||
|
|
Loading…
Reference in New Issue