From fb5efb630ab93893f8bb3036acbb591591a03032 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 13 Mar 2015 12:29:40 +0100 Subject: Update doc. --- README.md | 2 +- doc/filesystem.md | 72 +++++++++++++++++++++++++++++++++++++------------------ 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 : -- cgit v1.2.3