URL: https://linuxfr.org/news/ecrire-son-systeme-d-exploitation-partie-1-preparer-le-terrain Title: Écrire son système d'exploitation - Partie 1 : préparer le terrain Authors: maxb Benoît Sibaud et bubar🦥 Date: 2015年02月19日T13:23:50+01:00 License: CC By-SA Tags: système_d'exploitation, arm, crosscompilation et openocd Score: 46 L'auteur du journal à l'origine de la dépêche vous propose de vous raconter un peu les différentes étapes de son projet du moment : écrire un petit système d'exploitation pour un microcontrôleur STM32. Cet premier épisode présente le matériel possédé, la documentation collectée, les outils rassemblés et le dépôt de code utilisé. ---- [Journal à l'origine de la dépêche](http://linuxfr.org/users/maxb/journaux/ecrire-son-os-partie-1-preparer-le-terrain) ---- # De quoi ça s'agit ? # J'ai récupéré une carte de développement construite autour d'un STM32F103RBT6. C'est un microcontrôleur basé sur un cœur ARM [Cortex-M3](http://fr.wikipedia.org/wiki/ARM_Cortex-M). Il est un peu daté mais bon, on fait avec ce qu'on a (surtout quand c'est gratuit :). Pour situer un peu le bousin, c'est un micro 32 bits qui embarque 20Ko de SRAM et 128Ko de Flash, plus un certain nombre de périphériques habituels (UART, SPI, I2C...). La carte de développement est une MCBSTM32 de chez Keil. Le but du jeu c'est donc d'écrire un petit noyau capable de faire tourner une application sur cette puce. Il ne s'agit pas de faire un truc de dingue (_nothing big and professional like GNU_), mais vraiment d'apprendre en faisant le plus simple et clair possible. # Récupérer de la doc # Bon allez c'est parti, la première des choses à faire c'est de récupérer toute la documentation susceptible de nous servir : * le [schéma de la carte](http://www.keil.com/mcbstm32/mcbstm32-schematics.pdf) * le [programming manual](http://www.st.com/web/en/resource/technical/document/programming_manual/CD00228163.pdf) du cœur Cortex-M3 * la [datasheet](http://www.st.com/web/en/resource/technical/document/reference_manual/CD00171190.pdf) de la "famille" de la puce (STM32F10xxx) * la [datasheet](http://www.st.com/web/en/resource/technical/document/datasheet/CD00161566.pdf) du chip en lui-même * le [Flash programming manual](http://www.st.com/web/en/resource/technical/document/programming_manual/CD00283419.pdf). Celui-là nous servira plus tard, une fois le développement un peu avancé, pour écrire du code capable de reprogrammer la Flash du micro (ceci afin de pouvoir mettre à jour le programme sans devoir sortir le JTAG). Ensuite ? Ben y'a plus qu'à lire tout ça... Ça devrait vous occuper un certain temps. On lit jusqu'à ce qu'on ait une idée claire du boulot qui nous attend pour écrire un code qui démarre sur cette carte. # Préparer la boîte à outils # Une fois qu'on a bien digéré la doc, reste une étape avant de se lancer comme un dingue dans le code : préparer ses outils de développement. Les ingrédients pour bien réussir cette recette sont : * une chaîne d'outils de compilation croisée pour notre cible (_arm-none-eabi_). Chez moi ça revient à `sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi`. * un _cross debugger_ (`sudo apt-get install gdb-arm-none-eabi`) * une sonde JTAG qui nous servira à programmer et déboguer le programme sur la puce. Sans vouloir faire de pub, j'ai opté pour [un Olimex ARM-USB-TINY-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/). Ça fonctionne bien sous Linux et c'est un poil moins cher qu'une sonde Lauterbach à 3000€ ;) * enfin, un OpenOCD, un programme sympa qui fait le traducteur entre votre sonde JTAG et GDB (`sudo apt-get install openocd`) Ah et il nous faudra aussi un peu de _make_, du _git_ et un éditeur de texte, mais je suppose que vous avez déjà tout ça... Voilà, c'est tout pour cette fois, on se retrouve bientôt pour parler de la configuration des outils et commencer à écrire du code ! ### PS: il est où le code ? ### Pour ceux que ça intéresse, le code est libre (licence BSD) et hébergé sur [Github](https://github.com/maxbernelas/MOS) (pour faire plaisir aux trolls). Évidemment c'est un travail en cours, qui progresse suivant mes envies et mon temps libre.