Gloworm es un sistema operativo simple de unix escrito en C para hardware retro, específicamente la serie de computadoras CompuTIE68K. Se basa en gran medida en la lectura del diseño e implementación de sistemas operativos 2ed por Andrew S. Tanenbaum, aunque he ido con un diseño monolítico, al menos por el momento, por la simplicidad de ello. Puede hacer multitarea preventiva utilizando el temporizador 68681. También tiene una implementación del sistema de archivos Minix Versión 1, que utiliza RAM (a través de un controlador de dispositivo) para almacenar los datos, o una tarjeta flash compacta conectada como un dispositivo IDE. El segundo puerto serie se puede configurar como un dispositivo de deslizamiento, con una implementación básica de UDP y TCP a través de una API de estilo BSD estilo Sockets, y se proporciona un comando NTP para actualizar el tiempo del sistema en el arranque (al arrancar desde el disco).

El video anterior muestra que se conectan a través de Serial desde una PC moderna y restablece el hardware para ejecutar el monitor en ROM que muestra el mensaje de bienvenida. El núcleo ya está cargado en RAM, por lo que ejecutar el comando de arranque iniciará el núcleo que luego inicia el shell. Desde el shell, se muestran algunas operaciones básicas de archivo y el comando PS.

El video anterior muestra que se conectan a través de Serial desde una computadora moderna después de encender la placa. El monitor se ejecuta primero, dando el mensaje ">". El gestor de arranque se ha quemado en flash en la dirección 0x20000. Desde el monitor, se ejecuta el cargador de arranque, que luego carga el núcleo de la tarjeta de flash compacta adjunta. Cada período (.) Carácter impreso representa 1 kilobyte de datos cargados desde el disco). El cargador de arranque luego salta al núcleo cargado, que muestra mensajes de arranque antes de ejecutar el proceso init desde el disco. El proceso init primero ejecuta sh /etc/rc ", que ejecuta el comando ntpdate para actualizar el tiempo del sistema. Luego ejecuta un shell interactivo.
Algunos comandos se muestran después del arranque, y luego se ejecuta el programa HTTPD (que tiene la bifurcación deshabilitada por el momento). Desde otra computadora, el comando CURL se ejecuta para emitir una solicitud al tablero. El programa HTTPD responde con los datos "Este es un mensaje secreto"
Para compilar el núcleo para la transferencia sobre serie, ejecute:
make kernel.load Se puede enviar a través de la serie como el monitor. Es posible que desee modificar la configuración del kernel en src/kernel/main.c si está utilizando una placa sin la tarjeta CompactFlash, o si no desea usar redes.
La imagen se puede construir usando un dispositivo de bucle y siguientes comandos:
make create-image
make mount-image
make build-system
make umount-image Que producirá una imagen de disco de 20 MB en minix-build.img utilizando la build/ directorio como punto de montaje, y el sistema de archivos Minix1. No incluye una tabla de partición, por lo que debe crearse en la unidad flash por otros medios. Se puede escribir en el archivo de dispositivo de bloque específico de la partición utilizando dd en un escritorio tipo UNIX.
Para arrancar directamente el CompactFlash, el script boot.load se puede cargar en serie y escribir en una ubicación alternativa como 0x020000 . Debe ser una ubicación que esté fuera del sector del chip de flash en el que se escribe el monitor, o el sistema no se puede inclinar. La imagen Boot.bin no contiene una tabla vectorial como el monitor. La imagen de Bin.
Después de enviar el archivo boot.load sobre Serial, sin ejecutarlo, en el monitor, ejecute lo siguiente:
eraserom 20000
writerom 20000
verifyrom 20000Luego puede arrancar desde el monitor en cualquier momento ejecutando:
boot 20000El gestor de arranque imprimirá un personaje de época por cada 1k de la imagen del núcleo cargada desde el disco en RAM, y luego ejecutará el núcleo después. Si funciona, debería ver que el LED del latido intermitente para indicar que el núcleo se está ejecutando y el multiprocesamiento está habilitado y el cambio.
Si el segundo puerto serie está conectado a un escritorio, actuará como una conexión de deslizamiento, que se puede unir a la red del escritorio, donde /dev/ttyUSB1 es el dispositivo serial conectado a la segunda puerto serie del tablero, y 192.168.1.x es la red local, y ENP3S0 es la interfaz de red conectada a Internet en el escritorio Linux:
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 " El dispositivo tendrá IP 192.168.1.200 que también debe configurarse en la función src/kernel/main.c del kernel en la parte inferior.