π
<-
Chat plein-écran
[^]

FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*nix

Nouveautés, projets, mises à jour.

FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*nix

Message non lude Lionel Debroux » 22 Jan 2014, 08:09

Kristaba, membre de Planète-Casio, a depuis longtemps (il y a un topic de fin 2011) dans l'idée de faire un kernel inspiré de *nix pour la fx-9860 (et d'autres modèles basés sur des SH3/SH4, mais il ne possède qu'une fx-9860), comme Punix sur TI-68k, ou bien sûr un vrai Linux sur Nspire.
Ses travaux deviennent maintenant utilisables, et il en parle un peu plus largement :)

Il est reparti de zéro pour créer ce FiXos, ciblant seulement la fx-9860 pour l'instant, comme je l'ai écrit. FiXos est inspiré des *nix, ce qui veut dire qu'il gèrera les aspects les plus importants des *nix (mémoire virtuelle, gestion des périphériques, Virtual File System, les principaux syscalls, etc.) pour assurer une bonne compatibilité, mais sans chercher à être 100% compatible avec les standards POSIX.

Une fois que le kernel a été chargé en RAM, il est totalement indépendant de l'OS de Casio. Pur l'instant, il n'est pas exécuté directement depuis l'EEPROM, et le code de reset de la calculatrice n'est pas modifié pour permettre de choisir dès le démarrage entre l'OS de Casio et FiXos, mais bien sûr, ce serait intéressant à faire pour réduire la consommation de RAM. Un simple reset revient à l'OS de Casio.

Le kernel (dans un binaire ELF, comme la quasi-totalité des *nix) est bien entendu chargé par un bootloader sous forme de fichier G1A; le bootloader est configurable avec un fichier de configuration, et utilise quelques syscalls de l'OS de Casio, par exemple pour afficher un menu.
Le bootloader, le kernel et les outils userspace sont compilables avec des GCC modernes ciblant l'ISA SH.

Actuellement, les principales fonctionnalités sont déjà sympathiques :)
  • Virtual File System (VFS) pour utiliser une interface unifiée et monter les filesystems à n'importe quel endroit;
  • une réimplémentation du filesystem SMEM de Casio, en lecture seule, mais beaucoup plus rapide que ce que l'OS de Casio contient [NdT: comme souvent quand des tiers réimplémentent ce que le fabricant de calculatrices fait]
  • un filesystem minimal (création de directories et device nodes) en RAM pour le root file system, nommé ProtoFS;
  • la gestion de la mémoire virtuelle avec des espaces d'adressage séparés pour les processus, bien sûr;
  • gestion dynamique des périphériques, avec des concepts type *nix: enregistrement dynamique de major/minor numbers, et l'espace utilisateur peut utiliser une paire major/minor pour accéder à un filesystem donné;
  • petite fonction de debug à l'écran ciblant le contrôleur T6K11, pour afficher des infos au début du boot;
  • après initialisation, gestion du terminal plus avancée, à travers /dev/console;
  • gestion de l'USB avec driver pour le contrôleurs USB du 7705 et abstraction du protocole (pour les périphériques) suffisamment générique pour écrire une implémentation de drivers utilisable également sur d'autres plate-formes [NdT: si je comprends bien];
  • comportement de device standard USB CDC/ACM linké sur /dev/serial, ce qui permet donc d'utiliser la calculatrice sur un ordinateur comme un port série bi-directionnel (COM* sur Windows, ttyS sur Linux), en général sans installer de drivers supplémentaires. screen et gtkterm fonctionnent bien pour communiquer avec la machine :)
  • bien sûr, la capacité de tourner des processus utilisateurs isolés (chacun son espace d'adressage, pile kernel [NdT et probablement pile user]) à partir de fichiers ELF accessibles dans le VFS;
  • le fonctionnement correct des syscalls open(), read(), write(), fork(), exit(), getpid(), getppid() et wait(), en attendant d'autres syscalls;
  • qui dit syscall fork() dit une gestion de plusieurs processus, avec un tout jeune ordonnanceur [NdT: pour qu'on comprenne bien de quoi on parle: un scheduler] pour l'instant assez basique, mais qui va s'améliorer;
  • du travail sur l'interface hôte SD pour contrôler directement la carte SD, mais c'est une partie totalement non documentée du CPU... donc comme sur Nspire, ce genre de travaux nécessite beaucoup de reverse-engineering dans l'OS de Casio, prend beaucoup de temps, et crée des difficultés pour faire fonctionner quelque chose. Il en est déjà dans un état où il peut envoyer et recevoir des commandes SD, initialiser une carte SD, obtenir des informations sur la carte SD (taille, tensions, fabricant, etc.), mais la lecture et l'écriture ne fonctionnent pas encore. Bien sûr, une interface abstraite block SD est prévue, et au-dessus, la gestion des filesystems les plus courants, en particulier ext3 et FAT32.

Le projet est évidemment ouvert à la lecture et à la contribution (un vrai projet open source, quoi ;) ), il est hébergé sur Gitorious (racine du projet: https://www.gitorious.org/fixos , repository principal https://www.gitorious.org/fixos/fixos ).
Dans le repository, le fichier user/first_test_elf.c est un exemple de programme utilisateur, à des fins de test.


Source de l'info: http://www.planet-casio.com/Fr/forums/topic10104-1-Projet-FiXos-(OS-pour-casio-fx-9860-Prizm).html via Omnimaga.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude Lionel Debroux » 10 Fév 2014, 19:48

Il y a quelques jours, Kristaba a posté quelques nouvelles de ses derniers développements:
* une meilleure gestion du clavier, avec 3 couches d'abstraction: le bas niveau qui lit simplement la matrice clavier et interprète les changements comme des appuis ou des relâchements de touches; le niveau logique, qui gère les modificateurs (Shift, Alpha, etc.) et gèrera un jour la répétition des touches; le niveau supérieur, implémenté dans /dev/console, pour se comporter comme le flux standard d'entrée, DEL étant utilisé comme Backspace pour les corrections.
L'état du clavier est mis à jour avec une interruption à 64 Hz, il sera optimisé plus tard mais il ne sera apparemment pas possible de se passer d'un timer. Et il faut que Kristaba implémente encore quelques ioctl, pour ouvrir la porte à un usage semi-graphique de type ncurses.

* une implémentation partielle du syscall execve, c'est à dire la porte ouverte à des programmes utiles en espace utilisateur, à commencer par un init et un shell.

Source de l'info: http://www.omnimaga.org/index.php?topic ... #msg321487
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude Lionel Debroux » 22 Juin 2014, 08:05

Kristaba a fait un nouveau post détaillant les changements de ces quelques dernières semaines - en résumé, de nouvelles avancées majeures:

* une bien meilleure gestion du temps, avec comptage du temps depuis l'Epoch, séparation des temps utilisateur et kernel, implémentation des syscalls times() et gettimeofday();
* une implémentation en état de l'infrastructure de gestion des signaux Unix, le gros du travail de base est fait avec les syscalls kill(), sigaction(), sigprocmask() et les signaux spéciaux type SIGSTOP, SIGCONT, SIGKILL. Certains signaux ne sont pas implémentés, mais ce n'est pas le plus difficile;
* gestion des pipes, avec le syscall pipe2(), et l'utilisation des file descriptors pour écrire et lire des données depuis un pipe;
* les terminaux virtuels multiplexés, accessibles par F1-F6. Par défaut, seulement 2 terminaux sont créés, pour limiter la consommation de mémoire. Les groupes de processus et le fait qu'un process appartienne à un terminal ne sont pas implémentés;
* un PoC d'utilisation directe de l'écran pour les programmes en espace utilisateur, avec le device spécial "/dev/display" et quelques ioctls (NdT: qui changeront probablement quand mmap() sera implémenté);
* la gestion de la ligne de commande pour le bootloader et le kernel. Le premier paramètre utilisable est console={tty<virtual_terminal>|ttyUSB0}, pour définir la place de la console kernel: soit un des terminaux virtuels, soit l'émulation USB série pour pouvoir utiliser un émulateur externe (habituellement avec un écran beaucoup plus grand) pour debugger le kernel;
* une meilleure gestion des sections critiques dans le kernel, avec la désactivation de la préemption et/ou de toutes les interruptions.
* une implémentation basique de mutex, pas encore utilisée.
* plusieurs changements importants sur la structure du projet: séparation des définitions communes au kernel et à l'espace utilisateur du reste de l'arbre des sources, changement des Makefiles, possibilité de configurer des options du kernel avec un fichier config.h (que Kristaba pense transformer vers un système similaire à celui du kernel Linux et de buildroot);
* un allocateur de mémoire générique, pour allouer les pages de mémoire physique et les utiliser comme des pools.

Mais il n'y a pas encore vraiment de programmes en espace utilisateur, parce que:
* il n'y a pas de portage de la libc, donc pour l'instant, il faut utiliser directement les syscalls, et c'est moins pratique. Kristaba pense à porter newlib (NdT: bon choix, c'est celui qui a également été fait pour pouvoir porter giac vers la plate-forme Nspire);
* la gestion de la mémoire n'est pas assez puissante et nécessite de grosses améliorations (NdT: c'est comme ça qu'il l'a écrit): copy on write, zones partagées, mmap(), etc.;
* il n'y a pas de gestion des librairies partagées;

Pour finir, il est intéressé par les contributions d'autres programmeurs, et le portage de FIXos vers d'autres plate-formes, telles que la Prizm (parmi les machines Casio utilisant un SH4) ou les TI-68k (NdT: il y a déjà Punix, donc il pourra récupérer au moins des infos, voire du code), ce dernier point forçant une meilleure organisation du kernel et pouvant permettre la détection de bugs.

Source de l'info: même topic, mais le lien est maintenant http://www.omnimaga.org/other-casio-cal ... #msg387652 , puisqu'Omnimaga a cassé tous ses liens.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude Lionel Debroux » 04 Juil 2014, 21:22

Kristaba a fait pas mal de travail ces derniers jours sur deux axes:
* les libs dynamiques;
* un affichage d'informations après crash, pour aider au debug.

Je vais essayer de résumer rapidement son post très détaillé sur Omnimaga:
* le loader dynamique de librairies est dans le kernel plutôt qu'en user-space, pour (il l'espère) plus de facilité d'implémentation et de légèreté.
* pour ajouter un support de son OS par la toolchain, plutôt que de modifier binutils et GCC et devoir maintenir et distribuer les versions modifiées, il a choisi de faire du post-processing des fichiers générés (NdT: excellent choix !);
* les programmes utilisent le PLT pour résoudre les symboles importés la première fois que lesdits symboles sont utilisés, c'est classique sur d'autres plate-formes;
* on peut optionnellement inclure une table des symboles dans le kernel, pour aider au debug du kernel;

La mémoire partagée, l'allocation mémoire pour le userspace avec sbrk() et l'obtention d'infos sur les fichiers avec stat() restent à implémenter avant de pouvoir envisager le premier portage de newlib sur la plate-forme (NdT: et quand on a newlib, on peut monter libstdc++ par-dessus, comme cela a récemment été fait pour les Nspire); d'autres syscalls manquent pour un portage complet de newlib, mais ils sont moins importants.

Source de l'info: même topic.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude Lionel Debroux » 28 Juil 2014, 06:46

Kristaba a de nouveau ajouté plein de choses intéressantes à son kernel :)

* sbrk(), pour l'allocation dynamique de mémoire;
* ajout de /dev/keyboard, pour la gestion bas niveau du clavier grâce à des événements, et ainsi une implémentation efficace des fonctions habituelles IsKeyDown()/GetKey() en user-space, pour les applications graphiques. Le device peut être ouvert en mode non bloquant pour éviter l'attente si aucun événement n'a eu lieu sur le clavier.
* ajout de sysctl() inspiré des BSD, pour avoir des informations sur le kernel et l'architecture, mais aussi les processus, et ainsi se diriger vers l'implémentation d'un outil top en user-space;
* calcul de l'utilisation moyenne du CPU sur une période courte, en plus du calcul des ticks passés dans le kernel et en user-space, pour l'utilisation depuis l'espace utilisateur.
* l'exécution est maintenant envoyée sur le processus qui ne fait rien (idle process) quand il n'y a rien à faire. Ce processus utilise la mise en veille du processeur par l'instruction sleep;
* les files d'attente de processus (wait queues) sont maintenant implémentées, pour permettre à un syscall bloquant de faire dormir le processus correspondant, seulement avec des attentes non interruptibles pour l'instant. Ca permet par exemple à un processus qui lit le clavier de dormir jusqu'à ce que des caractères soient prêts à consommer, plutôt que de réaliser une attente active.
* ajout du system nanosleep(), pour faire dormir explicitement un processus. Pour l'instant, c'est une attente non interruptible, donc par exemple, les signaux ne seront pas transmis au processus avant la fin de l'endormissement.
* ajout des syscalls stat(), fstat() et getdents(), pour la gestion d'un filesystem :)

Comme indiqué dans le post précédent, avec ces nouveaux syscalls importants, le portage de newlib fonctionne maintenant pas mal. Apparemment, il y aurait besoin d'un peu de nettoyage.

Par ailleurs, Kristaba a porté le jeu gravity duck de PierrotLL vers FiXos, histoire de jauger la difficulté d'un portage et découvrir de possibles problèmes. Le portage s'est bien passé, prenant moins d'une journée et avec moins de problèmes que ce qu'il craignait. Le jeu est linké avec newlib pour malloc(), et fonctionne apparemment aussi bien que l'original sur l'OS standard.
Le portage FiXos n'est pas publié pour l'instant, il faudrait le nettoyer d'abord.

Eiyeron a demandé ce s'il y avait maintenant ce qu'il faut pour faire un shell. Kristaba a répondu qu'il manque encore le concept de répertoire actuel (de travail), et probablement des ioctls ou une émulation de certains codes VT100 pour les TTYs. Dans un second temps, il manque les groupes de processus, les sessions et le contrôle d'un terminal.

Source de l'info: toujours le même topic.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude critor » 02 Mar 2015, 13:46

Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: FiXos pour fx-9860 (Graph 85 SD), un kernel inspiré d'*n

Message non lude Adriweb » 02 Mar 2015, 18:57

shell à la Linux :P

J'avais vu la même chose (à peu près) pour z80, du moins côté interactivité/interface... mais c'était il y a fort longtemps, et plus un "amusement" que tout ceci, sans une véritable architecture derrière comme on a là.
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb


Retourner vers Actualités

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1035 utilisateurs:
>1005 invités
>25 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)