Cool Retro Terminal

« Cool-Retro-Terminal » est un terminal qui permet de simuler les vieux terminaux à tube cathodique. Ces appareils qui se connectaient sur des « mini-ordinateurs » ou des mainframes, ont fait la fortune de leurs fabricants du milieu des années 70 jusqu’au début des années 90.

Les nombreuses options permettent, entre autres, de dé-régler la stabilité horizontale ou verticale, la géométrie ou encore la netteté (focus) de l’image. Idéal pour s’abimer la vue à peu de frais. C’est disponible pour Unix/Linux et macOS.

Un soft bien sympathique qui vous permettra de ré-utiliser le filtre anti-reflet que vous n’avez jamais voulu jeter recycler sous prétexte que ça peut toujours servir.

NanoBSD sur SOC ARMv7

NanoBSD est un outil inclus dans les sources de FreeBSD qui permet de créer des images systèmes réduites 1 pour des applications embarquées. Il survit aux défunts picobsd (supprimé en 2019) et tinybsd (supprimé en 2021). Même si le système est « réduit », c’est un vrai FreeBSD: on peut donc y installer n’importe quel logiciel issu des ports. Pour simplifier, c’est l’équivalent de buildroot ou de Yocto pour Linux.
Continue reading

Kernel panic avec Rocky 9 sous Proxmox

Depuis la version 9, les distributions de type RedHat (RHEL, Rocky Linux, Alma Linux) ont fait évoluer leur plateforme matérielle : le processeur doit supporter le jeu d’instructions x86-64-v2 ou supérieur. Ce n’est pas vraiment un problème car cette micro-architecture est disponible sur tous les serveurs depuis 2009.

Cependant, sous Proxmox (v7.4 à ce jour), par défaut, les machines virtuelles sont créées avec un processeur virtuel nommé kvm64 qui ne supporte pas cette version : ça se traduit par un kernel panic au démarrage de la VM.

Continue reading

DiscoBSD: Ah, ah, ah, ah… Stayin’ Alive

DiscoBSD est un portage de 2.11BSD 1 vers des microcontrôleurs 32 bits modernes. Il s’agit en fait d’un fork de RetroBSD qui avait déjà porté 2.11BSD vers PIC32 (MIPS).

Cette distribution apporte le support de ARM Cortex M4, principalement pour les cartes Disco(very) et Nucleo de chez ST. Les modèles supportés sont:

Leur intérêt vient de leur prix nettement plus abordable que leurs équivalents MIPS. Elles intègrent, en plus, leur programmeur ST-Link: il suffit d’un câble USB pour les flasher. Comme j’ai déjà une STM32F4-discovery, c’était trop tentant d’essayer le dernier représentant de la branche 2 de BSD Unix. Pour info, la STM32F4-discovery est équipée de :

  • CPU STM32F407VGT6 – Cortex M4 @168MHz
  • 192 ko de RAM 2
  • 1 Mo de flash

Les mains dans le cambouis

Coté matos, à part un adaptateur UART vers usb pour accéder à la console série, vous aurez besoin d’un lecteur de carte SD compatible Arduino. La connexion du lecteur est décrite plus bas.
Bien sûr, on ne met pas un système d’exploitation complet de type UNIX dans les 1024ko de la mémoire d’un micro-contrôleur: seul, le noyau est « flashé » sur la carte.
Ici pas de bootloader, on exécute directement le noyau au démarrage. Notez que la taille du noyau fait moins de 100ko: avec 1Mo de flash, on a de la marge.
Toute la partie « userland » est contenue sur une carte mémoire au format UFS (L’image fait environ 200 Mo et inclus /, /home et la swap de 2Mo). Avec si peu de RAM (192 ko), l’OS utilise la swap pour tous les processus. Faudra pas s’attendre a des perfs de dingue. Mais avec seulement 100Mo d’espace disque, l’OS est livré complet avec le man, les jeux, et le compilateur C.

Construction depuis FreeBSD

Le projet ne prend en compte, pour la construction, que Linux ou OpenBSD (Pas sûr que ça compile « out of the box »). Pour le compiler sous FreeBSD, vous devrez installer les paquets suivants:

fusefs-libs
gcc-arm-embedded
gmake
st-link
git-lite

Récupérez le dépôt

git clone --branch lhondareyte-dev https://github.com/lhondareyte/discobsd.git

Construisez le « userland » et les tools:

export PATH=$PATH:/usr/local/gcc-arm-embedded/bin
cd discobsd
gmake

Flashez la carte SD:

dd if=discobsd/distrib/stm32/sdcard.img of=/dev/da0 bs=64k

Compilez le noyau (aka neuyo):

cd discobsd/sys/stm32/f4discovery
export PATH=$PATH:/usr/local/gcc-arm-embedded/bin
gmake
arm-none-eabi-objcopy -O binary -S unix.elf vmunix.bin

Connectez la carte à un port USB et flashez le noyau:

st-flash erase
st-flash write vmunix.bin 0x8000000

La console série est associée à l’UART2 (broches PA2 et PA3, respectivement TX et RX). Avec l’adaptateur USB/UART, connectez vous sur la console:

cu -l /dev/cuaU0 -s 115200

Et voilà un démarrage qui échoue lamentablement en panic (le lecteur de carte mémoire n’est pas connecté):

Pas de u-boot ou autre GRUB, pour nous aider. Le ‘disque dur’ doit être accessible.

Connexion du « stockage »

Le lecteur de carte SD est connecté au port SPI2 de la carte. Le protocole SPI utilise 3 signaux (MISO, MOSI et SCK). Connectez comme suit (voir sys/stm32/stm32f4xx_nucleo_sd.h):

Lecteur          STM4_Discovery
-------------------------------
    CS    <------------   PB12
   SCK    <------------   PB13
  MISO    ------------>   PB14
  MOSI    <------------   PB15
   GND    ------------>   GND
   VCC    <------------   3.3V ou 5V (voir article)

Attention à la tension d'alimentation, elle doit correspondre a votre module: s'il possède un régulateur 3.3V (Type AMS1117), connectez le au 5V sinon au 3V de la carte. Au besoin, vérifiez la tension d'alimentation en entrée de l'adaptateur (ou en sortie du régulateur si présent).

Après connexion du lecteur, ça donne ça:

Prenez soin d'effectuer un shutdown pour arrêter l'OS sous peine de devoir exécuter à nouveau fsck au boot suivant.

PS : Si vous n'avez pas de carte STM32F4 ou PIC32, vous pouvez toujours simuler 2.11BSD sur PDP11 avec SIMH.

Pour la route...

Liens

Notes

1 : 2.11BSD, dont les derniers patchs datent de 1991, est la dernière version d'UNIX BSD disponible pour PDP11.
2 : Bill avait raison: 640 ko, ça devrait être suffisant pour n'importe qui.