Lors de la mise à jour de mon Raspberry Pi avec la commande rpi-update
, toutes les interactions avec le GPIO utilisant WiringPi
on cessé de fonctionner.
Clairement, il ne m’était plus possible de contrôler ma chaudière ni mes prises électriques.
Lors de la mise à jours, je suis passé du kernel 4.4.50 au 4.9.22 .
À partir de là, toutes les commandes utilisant WiringPi retournaient une erreur comme ceci :
$ /usr/local/bin/gpio -g write 17 0 Unable to determine hardware version. I see: Hardware : BCM2835 , - expecting BCM2708 or BCM2709. If this is a genuine Raspberry Pi then please report this to projects@drogon.net. If this is not a Raspberry Pi then you are on your own as wiringPi is designed to support the Raspberry Pi ONLY.
Il y a tout un tas d’exemples sur les forums qui remontent les mêmes symptômes comme celui-ci : https://github.com/firsttris/mfrc522-rpi/issues/1
Ceci peut être du à 2 choses :
WiringPi
, distribué avec apt
, est resté calé en version 2.32Le site de l’éditeur propose actuellement la version 2.36 qui est spécifiquement compatible avec le kernel à partir de sa version 4.8.x .
On peut vérifier la version de WiringPi
avec cette commande :
$ gpio -v
gpio version: 2.32 Copyright (c) 2012-2015 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty Raspberry Pi Details: Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Sony * Device tree is enabled. * This Raspberry Pi supports user-level GPIO access. -> See the man-page for more details -> ie. export WIRINGPI_GPIOMEM=1
On peut vérifier la version du kernel avec la commande : uname -a
Ce qui devrait nous donner quelque chose comme ceci :
$ uname -a Linux raspberrypi 4.9.22-v7+ #987 SMP Fri Apr 14 23:23:05 BST 2017 armv7l GNU/Linux
Ici, c’est bien la version 4.9.x du kernel qui est incompatible avec WiringPi
2.32 .
Deux solutions s’offrent à nous :
Une première solution consiste à downgrader le kernel dans la dernière version avant 4.9.x, c-à-d la version 4.4.50 .
On se rend sur ce site, on sélectionne la version du kernel désirée (ici : 4.4.50) et on clique sur le bouton avec les chiffres au bout de la ligne.
Sur la page qui s’ouvre, on sélectionne le numéro du commit :
Puis, on utilise cette commande en y ajoutant le commit trouvé à l’étape précédente :
$ sudo rpi-update 52241088c1da59a359110d39c1875cda56496764
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom This update bumps to rpi-4.4.y linux tree Be aware there could be compatibility issues with some drivers Discussion here: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087 ############################################################## *** Downloading specific firmware revision (this will take a few minutes) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 168 0 168 0 0 366 0 --:--:-- --:--:-- --:--:-- 367 100 52.3M 0 52.3M 0 0 2192k 0 --:--:-- 0:00:24 --:--:-- 2346k *** Updating firmware *** Updating kernel modules *** depmod 4.4.50-v7+ *** depmod 4.4.50+ *** Updating VideoCore libraries *** Using HardFP libraries *** Updating SDK *** Running ldconfig *** Storing current firmware revision *** Deleting downloaded files *** Syncing changes to disk *** If no errors appeared, your firmware was successfully updated to 52241088c1da59a359110d39c1875cda56496764 *** A reboot is needed to activate the new firmware
Pour approfondir cette manœuvre je vous renvois vers l’excellente page de Framboise314 :
http://www.framboise314.fr/installer-une-version-anterieure-du-noyau-sur-raspberry-pi/
Une fois que c’est terminé, on redémarre le RPi et tout devrait rentrer dans l’ordre.
Si vous ne voulez pas attendre la mise à jour du dépôt apt
ou si votre version de WiringPi
a été installée à la main et pas encore mise-à-jour, la seule solution est d’effectuer les opérations ci-dessous.
On va suivre les instructions de cette page en anglais que je vais vous résumer ci-dessous :
On commence par vérifier la version de WiringPi
:
$ gpio -v
Si vous êtes sur cette page, c’est que vous rencontrez un bug et que WiringPi
est déjà installé. La prochaine étape consiste à déterminer si WiringPi
est installé via un paquetage standard ou depuis la source (apt
). Si vous l’avez installé à partir de la source, vous savez ce que vous faites – continuer – mais s’il est installé en tant que paquet, vous devez d’abord supprimer le paquet. Pour ce faire, on va utiliser ces commandes :
$ sudo apt-get purge wiringpi $ hash -r
Si vous n’avez pas installé GIT, vous pouvez l’installer avec :
$ sudo apt-get update $ sudo apt-get upgrade
$ sudo apt-get install git-core
Pour obtenir WiringPi en utilisant GIT :
$ cd $ git clone git://git.drogon.net/wiringPi
Si vous avez déjà utilisé l’opération de clone une première fois, alors :
$ cd ~/wiringPi $ git pull origin
Vous trouverez une version mise à jour puis vous pouvez relancer le script de construction ci-dessous.
Pour compiler / installer, il existe un nouveau script simplifié :
$ cd ~/wiringPi $ ./build
Le nouveau script de compilation compile et installe tout pour vous – il utilise la commande sudo à un point, afin que vous puissiez inspecter le script avant de l’exécuter.
Ce qui donne ceci :
$ ./build wiringPi Build script ===================== WiringPi Library [UnInstall] [Compile] wiringPi.c [Compile] wiringShift.c [Compile] wiringSerial.c [Compile] piHiPri.c [Compile] piThread.c [Compile] wiringPiSPI.c [Compile] wiringPiI2C.c [Compile] softPwm.c [Compile] softTone.c [Compile] mcp23008.c [Compile] mcp23016.c wiringPi.c:1247:21: warning: ‘digitalRead8Dummy’ defined but not used [-Wunused-function] static unsigned int digitalRead8Dummy (UNU struct wiringPiNodeStruct *node, UNU int UNU pin) { return 0 ; } ^ wiringPi.c:1248:21: warning: ‘digitalWrite8Dummy’ defined but not used [-Wunused-function] static void digitalWrite8Dummy (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; } ^ [Compile] mcp23017.c [Compile] mcp23s08.c [Compile] mcp23s17.c [Compile] sr595.c [Compile] pcf8574.c [Compile] pcf8591.c [Compile] mcp3002.c [Compile] mcp3004.c [Compile] mcp4802.c [Compile] mcp3422.c [Compile] max31855.c [Compile] max5322.c [Compile] ads1115.c [Compile] sn3218.c [Compile] bmp180.c [Compile] htu21d.c [Compile] ds18b20.c [Compile] rht03.c [Compile] drcSerial.c [Compile] drcNet.c [Compile] pseudoPins.c [Compile] wpiExtensions.c [Link (Dynamic)] [Install Headers] [Install Dynamic Lib] WiringPi Devices Library [UnInstall] [Compile] ds1302.c [Compile] maxdetect.c [Compile] gertboard.c [Compile] piNes.c [Compile] piFace.c [Compile] lcd128x64.c [Compile] lcd.c [Compile] scrollPhat.c [Compile] piGlow.c [Link (Dynamic)] [Install Headers] [Install Dynamic Lib] GPIO Utility [Compile] gpio.c [Compile] readall.c [Compile] pins.c [Link] [Install] All Done. NOTE: To compile programs with wiringPi, you need to add: -lwiringPi to your compile line(s) To use the Gertboard, MaxDetect, etc. code (the devLib), you need to also add: -lwiringPiDev to your compile line(s).
Si vous aviez décidé de downgrader le kernel en 4.4.50 comme expliqué plus haut, vous pouvez maintenant le mettre à jour dans sa dernière version (4.9.x) sans crainte :
$ sudo rpi-update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom ############################################################# WARNING: This update bumps to rpi-4.9.y linux tree Be aware there could be compatibility issues with some drivers Discussion here: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=167934 ############################################################## Would you like to proceed? (y/N) *** Downloading specific firmware revision (this will take a few minutes) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 168 0 168 0 0 376 0 --:--:-- --:--:-- --:--:-- 376 100 53.8M 100 53.8M 0 0 2304k 0 0:00:23 0:00:23 --:--:-- 3754k *** Updating firmware *** Updating kernel modules *** depmod 4.9.22+ *** depmod 4.9.22-v7+ *** Updating VideoCore libraries *** Using HardFP libraries *** Updating SDK *** Running ldconfig *** Storing current firmware revision *** Deleting downloaded files *** Syncing changes to disk *** If no errors appeared, your firmware was successfully updated to 0fc97389df97e239a6e09cb544f2789a3e1e9eb8 *** A reboot is needed to activate the new firmware