aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2015-03-13 12:29:40 +0100
committerAlex Auvolat <alex@adnab.me>2015-03-13 12:29:40 +0100
commitfb5efb630ab93893f8bb3036acbb591591a03032 (patch)
tree17178ec1a98dabed1886032bb8c5460c3d072a07
parent039efeecbe3651512fee282fe08aa7400296d0c7 (diff)
downloadkogata-fb5efb630ab93893f8bb3036acbb591591a03032.tar.gz
kogata-fb5efb630ab93893f8bb3036acbb591591a03032.zip
Update doc.
-rw-r--r--README.md2
-rw-r--r--doc/filesystem.md72
2 files changed, 50 insertions, 24 deletions
diff --git a/README.md b/README.md
index 3f2fa62..6fbcf90 100644
--- a/README.md
+++ b/README.md
@@ -98,7 +98,7 @@ running the tests):
### Files in the repository
- doc/ documentation (none yet, sorry!)
+ doc/ documentation
src/
src/kernel/ code for the kogata kernel
src/common/ code shared between kernel and userspace libs
diff --git a/doc/filesystem.md b/doc/filesystem.md
index 99f58a9..fa2a5d4 100644
--- a/doc/filesystem.md
+++ b/doc/filesystem.md
@@ -6,7 +6,8 @@ Le layout tel que peut le constater l'utilisateur :
- `io:/` : périphériques système et accès aux ressources contrôlées
par le processus parent, peut changer quand on entre dans une "boîte".
- Lecture seule, contôlé par l'init et le desktop manager (ou n'importe quel processus qui crée une "boîte")
+ Lecture seule, contôlé par l'init et le desktop manager (ou n'importe
+ quel processus qui crée une "boîte")
- `io:/keyboard`, `io:/mouse`, `io:/display`, `io:/sound` : interfaces spécialisées
sur chacun, accessibles via une API fournie dans `libkogata`
@@ -15,28 +16,39 @@ Le layout tel que peut le constater l'utilisateur :
- `root:/boot/init-4.bin` : l'init et gestionnaire de paquets système (V4)
- `root:/pkg/` : les paquets du système, montés en overlay sur `sys:` et sur `cmd:`
- `root:/pkg/kogata` : paquets essentiels du système
- - `root:/pkg/kogata/kogata-r2.pkg` : release 2 du système kogata de base (contenu à choisir précisément)
- - `root:/pkg/kogata/kogata-compat-r2.pkg` : librairies compatibles avec les anciennes API mais fonctionnant avec le système R2 actuel
- - `root:/pkg/kogata/kogata-dev-r2.pkg` : binaires ligne de commande et en-têtes de dév pour la release 2
- - `root:/pkg/kogata/kogata-extras-r2.pkg` : ressources, bibliothèques et utilitaires supplémentaires
- - `root:/pkg/kogata/kogata-langpack-ja-r2.pkg` : fichiers nécessaires pour utiliser le système en japonais (au pif !)
- - `root:/pkg/themes/` : fichiers de personnalisation de l'interface : polices, icônes, fonds d'écran
- - `root:/pkg/filetypes/` : extensions à libfiles pour la gestion de types de fichiers nouveaux
+ - `root:/pkg/kogata/kogata-r2.pkg` : release 2 du système kogata de
+ base (contenu à choisir précisément)
+ - `root:/pkg/kogata/kogata-compat-r2.pkg` : librairies compatibles avec
+ les anciennes API mais fonctionnant avec le système R2 actuel
+ - `root:/pkg/kogata/kogata-dev-r2.pkg` : binaires ligne de commande
+ et en-têtes de dév pour la release 2
+ - `root:/pkg/kogata/kogata-extras-r2.pkg` : ressources, bibliothèques
+ et utilitaires supplémentaires
+ - `root:/pkg/kogata/kogata-langpack-ja-r2.pkg` : fichiers nécessaires
+ pour utiliser le système en japonais (au pif !)
+ - `root:/pkg/themes/` : fichiers de personnalisation de l'interface :
+ polices, icônes, fonds d'écran
+ - `root:/pkg/filetypes/` : extensions à libfiles pour la gestion
+ de types de fichiers nouveaux (images, vidéo, ...)
- `root:/apps/` : applications et utilitaires supplémentaires, ne peuvent pas dépendre de
bibliothèques non inclues dans `kogata-rx.pkg` ou `kogata-extras-rx.pkg`
- et doivent inclure elle-même les fichiers `.so` correspondant
+ et doivent inclure elle-même les fichiers `.so` correspondant
- `root:/services/` : applications du serveur
- `root:/config/` : configurations du système (plusieurs sous-dossiers pour plusieurs configurations)
- `root:/users/` : à défaut d'utiliser une partition séparée, dossiers des utilisateurs
- `root:/services/` : données des serveurs
-- `config:/` : bind-mount de `root:/config/config-en-cours`, contient les fichiers de configuration du système
+- `config:/` : bind-mount de `root:/config/config-en-cours`, contient les
+ fichiers de configuration du système
-- `sys:/` : librairies, binaires et ressources du système, c'est un overlayfs constitué à partir d'images pré-préparées contenues dans `root:/pkg/`. Tout ce qui est dans `sys:` est considéré de source sûre.
+- `sys:/` : librairies, binaires et ressources du système, c'est un overlayfs
+ constitué à partir d'images pré-préparées contenues dans `root:/pkg/`.
+ Tout ce qui est dans `sys:` est considéré de source sûre.
- `sys:/lib` : librairies
- `sys:/lib/libkogata/libkogata-1.so` : `libkogata` avec compatibilité API V1
- `sys:/lib/libkogata/libkogata-dev.so` : `libkogata` sans compatibilité (version de développement)
- - `sys:/lib/libkogata/libkogata-sys.so` : `libkogata` avec compatibilité API avec les binaires du système
+ - `sys:/lib/libkogata/libkogata-sys.so` : `libkogata` avec compatibilité
+ API avec les binaires du système
- `sys:/lib/libc/libc-1.so`
- `sys:/lib/libalgo/libalgo-1.so`
- `sys:/lib/libgui` : bibliothèque de dessin à l'écran, rendu des polices, toolkit graphique
@@ -52,18 +64,24 @@ Le layout tel que peut le constater l'utilisateur :
- `sys:/wallpapers` : fonds d'écran
- `sys:/bin` : binaires du système
- `sys:/bin/login.bin` : login manager
- - `sys:/bin/desktop.bin` : le gestionnaire de bureau (wm-compositor, multiplexage des périphériques, boxing, IPC-master & gestionnaire d'autorisations)
+ - `sys:/bin/desktop.bin` : le gestionnaire de bureau
+ (wm-compositor, multiplexage des périphériques, boxing,
+ IPC-master & gestionnaire d'autorisations)
- `sys:/bin/config.bin` : éditeur de configuration utilisateur
- `sys:/bin/admin.bin` : éditeur de configuration système et autres outils d'admin
- - `sys:/cmd` : binaires utilisables en ligne de commande, essentiellement pour le dév ; hiérarchie type unix
+ - `sys:/cmd` : binaires utilisables en ligne de commande, essentiellement pour le dév ;
+ hiérarchie type unix
- `sys:/cmd/bin/`
- `sys:/cmd/lib/`
- `sys:/cmd/include/`
- `sys:/cmd/share/`
-- `apps:/` : dossier contenant les paquets d'application pour les applications utilisateurs, c'est un bind-mount de `root:/apps` essentiellement
-- `services:/` : dossier contenant les paquets d'application pour les services du système, bind-mount de `root:/services`
-- `user:/` : bind-mount de `root:/users/utilisateur-actuel`, lecture-écriture, géré à la discrétion de l'utilisateur
+- `apps:/` : dossier contenant les paquets d'application pour les applications utilisateurs,
+ c'est un bind-mount de `root:/apps` essentiellement
+- `services:/` : dossier contenant les paquets d'application pour les services du système,
+ bind-mount de `root:/services`
+- `user:/` : bind-mount de `root:/users/utilisateur-actuel`, lecture-écriture,
+ géré à la discrétion de l'utilisateur
- `user:/apps` : paquets d'application
- `user:/data` : configuration et données des applications
@@ -71,17 +89,20 @@ Ligne d'init typique :
kernel /boot/kernel-12.bin root=io:/disk/ata0p0 init=root:/boot/init-12.bin config=test-config
-Hiérarchie telle que la voit une application qui tourne dans une boîte (c'est-à-dire n'importe quelle application de `apps:/` ou `home:/apps`) :
+Hiérarchie telle que la voit une application qui tourne dans une boîte
+(c'est-à-dire n'importe quelle application de `apps:/` ou `home:/apps`) :
- `io:/` : accès contrôlé aux ressources du système et à l'extérieur
- `io:/display`, `io:/mouse`, ... accessible via une inter-couche dans `desktop.bin` qui gère les autorisations
- `io:/desktop` : communication contrôlée avec les autres processus (notifications, demandes d'accès, ...)
- `sys:/` : accès en lecture seule permettant d'utiliser les libs du système
- `app:/` : dossier application (lecture-seule, correspond à `apps:/nom-appli.pkg` ou `user:/apps/nom-appli.pkg`)
-- `data:/` : dossier de données de l'application pour l'utilisateur (lecture-écriture, correspond à `user:/data/nom-appli`)
+- `data:/` : dossier de données de l'application pour l'utilisateur
+ (lecture-écriture, correspond à `user:/data/nom-appli`)
- `user:/` : sous-portion séléctivement autorisée en lecture seule et en lecture-écriture du dossier `user:/`
-Hiérarchie telle que la voit un service du système qui tourne dans une boîte (c'est-à-dire n'importe quel serveur)
+Hiérarchie telle que la voit un service du système qui tourne dans une boîte
+(c'est-à-dire n'importe quel serveur)
- `sys:/` : accès en lecture seule permettant d'utiliser les libs du système
- `app:/` : dossier du service, correspond à `services:/nom-service.pkg`
@@ -90,15 +111,20 @@ Hiérarchie telle que la voit un service du système qui tourne dans une boîte
Du coup ce qu'il faut en termes de systèmes de fichiers :
- il faut que seul le processus qui a créé un FS puisse l'adminsitrer (ie faire des add-source)
-- `pkgfs` : capable de prendre un nombre arbitraire de fichiers `.pkg` et de faire apparaître leur contenu comme un dossier
+- `pkgfs` : capable de prendre un nombre arbitraire de fichiers `.pkg`
+ et de faire apparaître leur contenu comme un dossier
- il faut que les fichiers `.pkg` puissent facilement contenir des métadonnées
- - au moment du mount, soit copier en RAM (typiquement pour les paquets système ou pour les applis utilisateurs dans certains cas), soit lire à la demande à partir du support sous-jaccent
+ - au moment du mount, soit copier en RAM (typiquement pour les paquets système
+ ou pour les applis utilisateurs dans certains cas), soit lire à la demande à
+ partir du support sous-jaccent
- toujours read-only
- charger un `.pkg` correspond à un add-source
- Nativement dans la couche VFS inclure une fonctionnalité `fs_subfs` qui permet de :
- prendre un sous-dossier comme racine
- restreindre les droits (ie enlver tous droits d'écriture, typiquement)
- - dans un premier temps, cette seconde fonctionnalité peut suffire, on n'utilise simplement pas encore de fichiers `.pkg` mais par exemple un cdrom avec un dossier `sys` que l'on binde comme `sys:/` par exemple.
+ - dans un premier temps, cette seconde fonctionnalité peut suffire,
+ on n'utilise simplement pas encore de fichiers `.pkg` mais par exemple un cdrom
+ avec un dossier `sys` que l'on binde comme `sys:/` par exemple.
Rôle des différents binaires du système :