Gloworm est un système d'exploitation simple de type Unix écrit en C pour le matériel rétro, en particulier la série d'ordinateurs Computie68k. Il est largement basé sur la conception et la mise en œuvre des systèmes d'exploitation de lecture 2ed par Andrew S. Tanenbaum, bien que je sois allé avec une conception monolithique, du moins pour le moment, pour la simplicité de celle-ci. Il peut faire du multitâche préventif en utilisant la minuterie 68681. Il a également une implémentation du système de fichiers MINIX Version 1, qui utilise RAM (via un pilote de périphérique) pour stocker les données, ou une carte flash compacte connectée en tant que périphérique IDE. Le deuxième port série peut être configuré comme un dispositif de glissement, avec une implémentation de base de UDP et TCP via une API de style BSD Sockets, et une commande NTP est fournie pour mettre à jour le temps du système sur le démarrage (lors du démarrage à partir du disque).

La vidéo ci-dessus montre la connexion sur la série à partir d'un PC moderne et la réinitialisation du matériel pour exécuter le moniteur dans ROM qui affiche le message de bienvenue. Le noyau est déjà chargé en RAM, donc l'exécution de la commande de démarrage démarrera le noyau qui démarre ensuite le shell. Dans le shell, certaines opérations de fichiers de base et la commande PS sont affichées.

La vidéo ci-dessus montre la connexion sur la série à partir d'un ordinateur moderne après avoir d'abord alimenté la carte. Le moniteur fonctionne en premier, donnant l'invite ">". Le chargeur de démarrage a été brûlé en flash à l'adresse 0x20000. Dans le moniteur, le chargeur de démarrage est exécuté, qui charge ensuite le noyau de la carte flash compacte fixée. Chaque période (.) Le caractère imprimé représente 1 kilobyte de données chargées à partir du disque). Le chargeur de démarrage passe ensuite au noyau chargé, qui affiche les messages de démarrage avant d'exécuter le processus init à partir du disque. Le processus init exécute d'abord sh /etc/rc ", qui exécute la commande NTPDate pour mettre à jour le temps du système. Il exécute ensuite un shell interactif.
Certaines commandes sont affichées après le démarrage, puis le programme HTTPD est exécuté (ce qui a pour le moment de fournir des désactivés pour le moment). À partir d'un autre ordinateur, la commande curl est exécutée pour publier une demande à la carte. Le programme HTTPD répond avec les données "Ceci est un message secret"
Pour compiler le noyau pour le transfert sur la série, exécutez:
make kernel.load Il peut être envoyé sur une série comme le moniteur. Vous voudrez peut-être modifier la configuration du noyau dans src/kernel/main.c si vous utilisez une carte sans la carte CompactFlash, ou si vous ne souhaitez pas utiliser le réseau.
L'image peut être construite à l'aide d'un périphérique de bouclage et à la suite de commandes:
make create-image
make mount-image
make build-system
make umount-image Qui produira une image de disque de 20 Mo dans minix-build.img en utilisant le répertoire build/ comme MountPoint et le système de fichiers MINIX1. Il n'inclut pas de table de partition, il doit donc être créé sur le lecteur flash par d'autres moyens. Il peut être écrit dans le fichier de périphérique de bloc spécifique à la partition à l'aide dd sur un bureau de type Unix.
Afin de démarrer directement le compactflash, le script boot.load peut être chargé de série et écrit à un autre emplacement tel que 0x020000 . Ce doit être un emplacement qui est en dehors du secteur de la puce flash dans laquelle le moniteur est écrit, sinon le système sera inoverable. L'image boot.bin ne contient pas de table vectorielle comme l'image monitor.bin.
Après avoir envoyé le fichier boot.load via serial, sans l'exécuter, dans le moniteur, exécutez ce qui suit:
eraserom 20000
writerom 20000
verifyrom 20000Vous pouvez ensuite démarrer à partir du moniteur à tout moment en fonctionnant:
boot 20000Le chargeur de démarrage imprimera un caractère d'époque pour chaque 1k de l'image du noyau chargé du disque dans la RAM, puis il exécutera le noyau après. Si cela fonctionne, vous devriez voir la LED de battement de cœur clignoter pour indiquer que le noyau est en cours d'exécution et le multiprocessement est activé et la commutation.
Si le deuxième port série est connecté à un bureau, il agira comme une connexion à glissement, qui peut être pontée au réseau du bureau, où /dev/ttyUSB1 est le périphérique série connecté au deuxième port série de la carte, et 192.168.1.x est le réseau local, et Enp3S0 est l'interface réseau connectée à Internet sur l'interface Linux Bureau:
sudo slattach -s 38400 -p slip /dev/ttyUSB1
sudo ifconfig sl0 192.168.1.2 pointopoint 192.168.1.200 up
# (this is automatically added on my machine, but might be required) sudo route add -host 192.168.1.200 sl0
sudo arp -Ds 192.168.1.200 enp3s0 pub
sudo iptables -A FORWARD -i sl0 -j ACCEPT
sudo iptables -A FORWARD -o sl0 -j ACCEPT
sudo sh -c " echo 1 > /proc/sys/net/ipv4/ip_forward " L'appareil aura IP 192.168.1.200 qui doit également être configuré dans la fonction src/kernel/main.c du noyau en bas.