Si vous l’avez manquée, la version officielle de DiscoBSD 2.11 est sortie. Pour les plus téméraires, elle peut se construire « out-of-the-box » depuis FreeBSD, OpenBSD ou Ubuntu Linux.
Sinon la version binaire est téléchargeable à la même adresse.
Si vous l’avez manquée, la version officielle de DiscoBSD 2.11 est sortie. Pour les plus téméraires, elle peut se construire « out-of-the-box » depuis FreeBSD, OpenBSD ou Ubuntu Linux.
Sinon la version binaire est téléchargeable à la même adresse.
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 :
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.
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.
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...
unix.bin
+ image disque
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. ↑
En recompilant NuttX sur FreeBSD 13 pour une carte bluepill (STM32F103C8T6), j’ai eu une mauvaise surprise: même si le code se compile correctement, le binaire ne fonctionne pas une fois arrivé sur la cible.
La classique « laide qui clignote » fonctionne sans problème, mais des fonctions avancées (USB par exemple) ne fonctionnent pas du tout.
En fait, il faut utiliser le compilateur devel/gcc-arm-embedded au lieu de devel/arm-none-eabi-gcc.
Notez que ce compilateur s’installe dans le répertoire /usr/local/gcc-arm-embedded
. Pour l’utiliser, il faut exporter la variable PATH
comme suit (/bin/sh
):
export PATH=$PATH:/usr/local/gcc-arm-embedded/bin
Exemple de configuration NuttX avec authentification sur la console via le port USB :
Je n’ai pas encore compris l’intérêt d’avoir deux compilateurs différents, mais je ne désespère pas d’avoir une réponse.
La source.
La capture de terminal est réalisée avec asciinema
et convertie avec gifcast
Début décembre, le projet NuttX est passé dans le giron de la fondation Apache avec le programme « incubator » (cf. ce mail sur la liste de diffusion). Par la même occasion, il est passé sous licence Apache V2 qui est une licence permissive comme la licence BSD initiale.
La version 9.0 est donc la première à sortir depuis ce changement. En plus des nouveaux drivers/socs, la méthode de construction évolue: deux nouvelles dépendances apparaissent : flock
qui permet de verrouiller un fichier depuis un script shell à l’instar de flock(2)
et wget
qu’on ne présente pas. Vous trouverez donc ces logiciels pour macOS sur la page dédiée.
Petit récapitulatif des pré-requis minimums pour développer des applications pour STM32 sous macOS.
Si les « Xcode Command Line Tools
» sont installés, vous n’avez pas besoin de make
(gmake
).
Enfin les modèles (templates) de Iván Stepaniuk sont biens utiles pour débuter.
Coté matériel, une carte « blue pill » et un programmateur stlink chinois disponibles sur Ebay/banggood/aliexpress feront l’affaire.