J’ai reçu récemment plusieurs demandes de lecteurs souhaitant appliquer les opérations proposées dans les articles Renforcer une distribution Raspbian Jessie et Création d’un système complet avec Buildroot pour la carte Raspberry Pi 3.
Voici donc un aperçu rapide des opérations à réaliser. Pour en comprendre le détail on se reportera aux articles concernés.
Booter une Raspbian avec une console série
Je prends la dernière version de cette distribution lors de la rédaction de cette note.
$ wget https://downloads.raspberrypi.org/raspbian/images/raspbian-2016-09-28/2016-09-23-raspbian-jessie.zip $ unzip 2016-09-23-raspbian-jessie.zip
J’insère une carte SD, reconnue sur ma machine comme périphérique bloc /dev/sdc
(visible dans le résultat des commandes « dmesg | tail
» ou « mount
» ). Ajustez ceci suivant votre système.
$ sudo umount /dev/sdc* $ sudo dd if=2016-09-23-raspbian-jessie.img of=/dev/sdc bs=4M
Par défaut, la distribution Raspbian ne propose pas de console série, uniquement un terminal graphique (avec la nouvelle interface Pixel). Comme j’ai une prédilection pour le terminal en console série, je vais activer ce port, au détriment du Bluetooth qui utilise le même contrôleur UART. Pour cela, il faut ajouter un overlay au device tree qui décrit le matériel présent. Cet overlay va désactiver le Bluetooth, le contrôleur série pouvant à nouveau être dédiée à notre console. Bien entendu, cette étape est inutile si vous souhaitez travailler sur une console graphique normale.
Après une première extraction, je réinsère ma carte SD sur mon PC, et je me rends dans le répertoire où la partition de boot du Raspberry Pi est montée. J’y édite alors le fichier config.txt
pour ajouter la ligne « dtoverlay=pi3-disable-bt
» . Après démarrage du Raspberry Pi, je peux me connecter sur le port série, comme sur une console graphique classique.
raspberrypi login: pi Password: (raspberry) [...] pi@raspberrypi:~$
Recompiler le noyau de la distribution Raspbian
Après les premières étapes de configuration de la distribution, j’entame une re-compilation du noyau directement sur le Raspberry Pi 3.
$ git clone --depth 1 https://github.com/raspberrypi/linux $ cd linux $ make bcm2709_defconfig $ sudo apt-get install -y bc libncurses-dev $ make menuconfig
Dans le menu « General setup » modifiez la troisième option (Local version) pour inscrire un tiret, suivi de vos initiales par exemple.
$ make -j 4 $ sudo make modules_install $ sudo cp arch/arm/boot/zImage /boot/kernel7.img $ sudo cp arch/arm/boot/dts/*dtb /boot/ $ sudo cp arch/arm/boot/dts/overlays/*dtbo /boot/overlays/ $ sudo reboot
Et voilà ! Un noyau tout frais, dont vous pouvez vérifier la version avec « uname -a
» et vous y retrouverez le numéro personnalisé avec vos initiales.
Buildroot et Raspberry Pi 3
Le support du Raspberry Pi 3 est présent dans Buildroot depuis plusieurs mois, néanmoins je vais en télécharger une version récente pour bénéficier des overlays du device tree et pouvoir continuer à utiliser ma console série. Les opérations suivantes ont lieu à nouveau sur un PC de développement.
$ git clone git://git.buildroot.net/buildroot $ cd buildroot $ git checkout 9cc1da8f $ ls configs/*raspberry* configs/raspberrypi0_defconfig configs/raspberrypi3_defconfig configs/raspberrypi2_defconfig configs/raspberrypi_defconfig $ make raspberrypi3_defconfig $ make menuconfig $ make
Une fois la compilation terminée, une image toute neuve nous attend, prête à être installée sur une carte SD (sans nécessiter de partitionnement ou formatage).
$ sudo dd if=output/images/sdcard.img of=/dev/sd
Au boot, un prompt nous permet une connexion :
Welcome to Buildroot buildroot login: root #
Conclusion
Le support du Raspberry Pi 3 est bien inclus dans le noyau Linux ainsi que dans le projet Buildroot depuis plusieurs mois, néanmoins quelques options de configuration ont changées et ces quelques lignes devraient permettre de compléter les articles indiqués plus haut.
Bonjour Christophe,
Enfin, ça fonctionne! Il ne me reste plus qu’à voir si le reste (GPIO, SPI, I2C, PWM ..) marche encore comme sur raspberry pi2.
Encore merci,
Bruno
@bruno
pour les accès bas niveau (appels système type open, write, ioctl, ..) il n’y pas de raison que ça ne marche pas, les fichiers d’entête et librairies sont en général présents et construits / livrés avec le noyau compilé, pas besoin de passer par « wiringPi » ou des choses de ce genre si c’est ce que vous entendez par « fonctionner comme sur la pi2 »
– soit utiliser les projections mémoires ou bien le FS /sys pour les GPIOS (avec open/write)
– soit ouvrir le device associé pour les liaisons séries spi/i2c avec open/write/ioctl pour SPI/I2C
des exemples existent sur le net,
stef
Bonjour Stef,
Bonne nouvelle! Je passe effectivement par le filesystem et/ou par la projection en mémoire pour les GPIO et par les dev pour SPI/I2C.
Bonjour à tous,
Pour le SPI et l’I2C, il faut activer les interfaces qui semblent être inactives par défaut dans le device tree. J’ai ajouté dans /Boot/config.txt:
dtparam=spi=on
dtparam=i2c_arm=on
ensuite, pour voir apparaître /dev/i2c-1:
modprobe i2c-bcm2708
modprobe i2c-dev
pour voir apparaître /dev/spidev0.0 et /dev/spidev0.1:
modprobe spi-bcm2835 (changement par rapport à rpi2)
je mets ces 3 modprobe dans /etc/init.d/S95_i2c_spi pour un chargement automatique au boot.
Cordialement,
Bonjour à vous
Monsieur, je prends connaissance de votre message et de vos explications. Si votre article est très engageant, je suis surpris que vous ne donniez aucune information sur le formatage de la carte SD microSD qui sera le support de RASPI 3.
Je note que cette absence d’information sur le formatage est récurrent. Doit-on comprendre que l’Os de raspberry n’a pas besoin de formatage ?
Si c’est le cas,
c’est une véritable révolution technologique et qui expliquerait que j’ai fumé plusieurs carteSD uniquement pour raspi. Mais j’avoue qu’étant un user de ubuntu et de debian, j’ai du mal à comprendre.
Pourriez-vous dans un prochain article préciser comment préparer la carte ?
D’avance merci
ARTHOTIS
J’apporte après mise en ligne de mon post, cette précision parce que sinon ma démarche serait ambigue :
Lorsque je dis que l’absence d’information concernant le formatage est récurrent,
j’entends par là que peu voir pas de sites parlant de raspi3 n’ont l’air de considérer le formatage comme important puisqu’ils n’en parlent pas..
Ai-je bien été compris ? j’aurai plaisir à vous relire
Bonjour,
Bien évidemment, la carte SD doit être formatée pour être utilisable par le Raspberry Pi.
L’article que vous commentez est un complément pour plusieurs autres articles en précisant les détails spécifiques au Raspberry Pi 3.
Donc : si vous cherchez à renforcer une distribution raspbian comme dans cet article, le formatage est déjà fait, inutile de vous en occuper et si vous souhaitez créer un système complet à partir de Buildroot comme dans cet article, le formatage est expliqué dans le chapitre « Installation et boot ».
Notez qu’il est inutile de formater une carte SD si ensuite vous copiez dessus une image avec
dd
. Il s’agit d’une copie brute octet-par-octet, et le formatage est déjà compris dans l’image.En substance, il vous faut – au moins – deux partitions : une première d’une centaine de Mo au format VFAT et une seconde au format EXT4. La première est obligatoirement dans ce format car c’est le seul que le bootloader intégré en ROM du Raspberry Pi sache lire. La seconde est dans un format Linux (EXT2, EXT3, EXT4, etc.) pour bénéficier des droits, des appartenances, des liens symboliques, des tubes nommés, etc.
Une précision : n’utilisez PAS la version NOOBS proposée sur le site officiel du Raspberry Pi, elle contient plusieurs images de distributions et son partitionnement n’est pas standard.