Gloworm ist ein einfaches UNIX-ähnliches Betriebssystem, das in C für Retro-Hardware geschrieben wurde, insbesondere für die Computie68K-Serie von Computern. Es basiert größtenteils auf dem Design und der Implementierung von Lesen von Betriebssystemen 2ed von Andrew S. Tanenbaum, obwohl ich zumindest zum Einfachheit halber ein monolithisches Design ausgetragen habe. Es kann präventive Multitasking mit dem 68681 -Timer ausführen. Es verfügt außerdem über eine Implementierung des Dateisystems von Minix Version 1, in dem RAM (über einen Gerätetreiber) zum Speichern der Daten verwendet wird, oder eine kompakte Flash -Karte, die als IDE -Gerät angeschlossen ist. Der zweite serielle Port kann als Slip-Gerät mit einer grundlegenden Implementierung von UDP und TCP über eine API im BSD-Sockeln im Stil konfiguriert werden. Es wird ein NTP-Befehl zur Aktualisierung der Systemzeit auf dem BOOT (beim Booten von der Festplatte) bereitgestellt.

Das obige Video zeigt die Verbindung über Serial von einem modernen PC und das Zurücksetzen der Hardware, um den Monitor in ROM auszuführen, wodurch die Begrüßungsnachricht angezeigt wird. Der Kernel ist bereits im RAM geladen. Durch das Ausführen des Startbefehls startet der Kernel, der dann die Shell startet. Aus der Shell werden einige grundlegende Dateioperationen und der PS -Befehl angezeigt.

Das obige Video zeigt die Verbindung über die Serie von einem modernen Computer nach dem ersten Einschalten des Boards. Der Monitor läuft zuerst und gibt die Eingabeaufforderung ">". Der Bootloader wurde unter der Adresse 0x20000 in Flash verbrannt. Aus dem Monitor wird der Bootloader ausgeführt, der den Kernel dann von der angeschlossenen kompakten Flash -Karte lädt. Jeder gedruckte Zeichen (.) Zeichen steht für 1 Kilobyte Daten, die von der Festplatte geladen wurden). Der Bootloader springt dann zum geladenen Kernel, der Startnachrichten anzeigt, bevor der Init -Prozess von der Festplatte ausgeführt wird. Im Init -Prozess wird zuerst sh /etc/rc ausgeführt, wodurch der Befehl ntpdate ausgeführt wird, um die Systemzeit zu aktualisieren. Anschließend wird eine interaktive Shell ausgeführt.
Einige Befehle werden nach dem Start angezeigt, und dann wird das HTTPD -Programm ausgeführt (das vorerst die Forking deaktiviert ist). Aus einem anderen Computer wird der Befehl curl ausgeführt, um eine Anfrage an das Board auszustellen. Das HTTPD -Programm antwortet mit den Daten "Dies ist eine geheime Nachricht".
Um den Kernel für die Übertragung über seriell zu kompilieren, rennen Sie:
make kernel.load Es kann wie der Monitor über seriell gesendet werden. Möglicherweise möchten Sie die Kernel -Konfiguration in src/kernel/main.c ändern, wenn Sie eine Platine ohne CompactFlash -Karte verwenden oder keine Netzwerke verwenden möchten.
Das Bild kann mit einem Loopback -Gerät erstellt werden und Befehle erstellen:
make create-image
make mount-image
make build-system
make umount-image Dies erzeugt ein 20-MB-Datenträgerbild in minix-build.img mit dem build/ Verzeichnis als Mountpoint und dem Minix1-Dateisystem. Es enthält keine Partitionstabelle, so dass auf anderen Mitteln auf dem Flash -Laufwerk erstellt werden muss. Es kann mit dd auf einem Unix-ähnlichen Desktop in die partitionsspezifische Block-Gerätedatei geschrieben werden.
Um das CompactFlash direkt auszubooten, kann das boot.load -Skript über seriell geladen und an einen alternativen Ort wie 0x020000 geschrieben werden. Es muss ein Ort sein, der sich außerhalb des Flash -Chip -Sektors befindet, an dem der Monitor geschrieben ist, oder das System ist nicht stabbar. Das Bild boot.bin enthält keine Vektertabelle wie das Monitor.bin -Bild.
Nach dem Versenden der Datei boot.load über seriell, ohne sie im Monitor auszuführen, führen Sie Folgendes aus:
eraserom 20000
writerom 20000
verifyrom 20000Sie können dann jederzeit aus dem Monitor starten, indem Sie ausgeführt werden:
boot 20000Der Bootloader druckt einen Periodencharakter für jeden 1k des Kernelbildes, der vom Scheiben in RAM geladen wurde, und dann wird der Kernel danach ausgeführt. Wenn es funktioniert, sollten Sie sehen, dass der Herzschlag -LED -Blinkt angibt, dass der Kernel ausgeführt wird und sich die Multiprozessierung aktivieren und wechseln.
Wenn der zweite serielle Port mit einem Desktop verbunden ist, wirkt er sich wie eine Schlupfverbindung, die mit dem Netzwerk des Desktops überbrückt werden kann, wobei /dev/ttyUSB1 das serielle Gerät ist, das mit dem zweiten seriellen Port des Boards verbunden ist, und 192.168.1.x ist das lokale Netzwerk, und ENP3S0 ist das Internet-Connected Network auf dem Linux-Desktop.
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 " Das Gerät verfügt über IP 192.168.1.200 , das auch in der src/kernel/main.c -Funktion des Kernels am Ende konfiguriert werden muss.