Cet article présente les recettes en complément de Beyond Linux From Scratch permettent d'étendre le système.
L'archive tar PiLFS Bootscripts est une petite collection de scripts et de correctifs provenant de diverses sources spécifiques au Raspberry Pi. Les scripts suivants peuvent être installés :
vm.min_free_kbytes=8192
à /etc/sysctl.conf
Pour créer un fichier d'échange où count est le nombre de mégaoctets que vous souhaitez :
dd if=/dev/zero of=/swapfile bs=1M count=512 mkswap /swapfile swapon -v /swapfile
Pour activer le fichier d'échange au démarrage, ajoutez une ligne à /etc/fstab
/swapfile swap swap pri=1 0 0
La puce BCM2835 sur le Pi contient une source d'entropie matérielle qui peut être exploitée par des applications crypto-lourdes pour améliorer la qualité du caractère aléatoire et pourrait même aider à accélérer certaines opérations.
Il faut construire rngd qui à son tour alimentera les applications avec une qualité aléatoire à partir du RNG matériel :
./autogen.sh ./configure --prefix=/usr make make install
make install-rngd
à partir des scripts d'amorçage PiLFS s'occupe de démarrer le démon.
Le 19 septembre 2012, la Fondation Raspberry Pi a introduit un “mode turbo” Pi, qui active dynamiquement l'overclock et l'overvolt sous le contrôle d'un pilote cpufreq, sans affecter votre garantie.
La première étape consiste à ajouter un ensemble de valeurs d'overclocking à votre /boot/config.txt. Voici les valeurs prédéfinies offertes par la configuration raspi de Raspbian :
Variable | Pas de OC | Modeste | Moyen | Élevé | Turbo |
---|---|---|---|---|---|
arm_freq | 700 | 800 | 900 | 950 | 1000 |
core_freq | 250 | 250 | 250 | 250 | 500 |
sdram__freq | 400 | 400 | 450 | 450 | 600 |
sur_tension | 0 | 0 | 2 | 6 | 6 |
La dernière étape consiste à faire passer le gouverneur cpufreq de la valeur par défaut « powersave » à « ondemand » avec cette commande :
echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
make install-switch-cpu-governor
à partir des scripts de démarrage PiLFS s'occupe de cette étape au démarrage.
On peut garder un œil sur la fréquence et la température actuelles avec ces commandes :On peut
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq /opt/vc/bin/vcgencmd measure_temp
Lorsqu'on écrit une image sur la carte SD, on souhaite généralement redimensionner la partition de données pour l'adapter à l'espace libre disponible sur la carte.
fdisk /dev/mmcblk0
et appuyer sur p pour afficher la table de partitionresize2fs /dev/mmcblk0p2
Ces versions accélérées par ARM des fonctions sélectionnées de string.h remplacent les routines par défaut de la bibliothèque glibc. Pour les utiliser, récupérer une copie de ce référentiel github :
wget https://github.com/bavison/arm-mem/archive/master.tar.gz -O arm-mem.tar.gz
Ensuite, les compiler dans une bibliothèque partagée, la mettre en place et veiller à ce qu'elle soit utilisée en remplacement des fonctions de la glibc.
Pour Raspberry Pi 1 & 2:
make cp -v libarmmem-v6l.so /usr/lib echo "/usr/lib/libarmmem-v6l.so" >> /etc/ld.so.preload
Pour Raspberry 3 & 4:
make cp -v libarmmem-v7l.so /usr/lib echo "/usr/lib/libarmmem-v7l.so" >> /etc/ld.so.preload
Commencer par récupérer les dernières sources du noyau:
wget https://github.com/raspberrypi/linux/archive/rpi-5.10.y.tar.gz
Après le déballage, vérifier que les sources sont en parfait état :
make mrproper
Exécuter la commande sed suivante pour que le noyau apparaisse exactement comme le noyau officiel (avec une chaîne de version 5.10.X+) :
sed -i 's/EXTRAVERSION =.*/EXTRAVERSION = +/'Makefile
Créer un fichier .config de noyau par défaut pour votre modèle Raspberry Pi:
make bcmrpi_defconfig
make bcm2709_defconfig
make bcm2711_defconfig
On peut également personnaliser la configuration du noyau :
make menuconfig
On peut maintenant construire le noyau, puis installer les modules du noyau :
make make zImage dtbs modules_install cp arch/arm/boot/dts/*.dtb /boot/ cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
Enfin, copier le noyau compressé du modèle Pi sur la partition de démarrage:
cp -v arch/arm/boot/zImage /boot/kernel.img
cp -v arch/arm/boot/zImage /boot/kernel7.img
cp -v arch/arm/boot/zImage /boot/kernel7l.img
On peut simplement compiler un module de noyau tiers compatible avec le dernier noyau officiel de Raspberry Pi. Par exemple pour compiler le module DirectFB Fusion sans avoir à construire un noyau complet.
Il faut récupérer les sources complètes du noyau:
wget https://github.com/raspberrypi/linux/archive/rpi-5.10.y.tar.gz
Après le déballage, s'assurer que les sources sont en parfait état :
make mrproper
Exécuter la commande sed suivante pour que le module se retrouve au bon endroit (/lib/modules/5.10.X+) :
sed -i 's/EXTRAVERSION =.*/EXTRAVERSION = +/' Makefile
Créer un fichier .config
de noyau par défaut pour le modèle Raspberry Pi:
make bcmrpi_defconfig
make bcm2709_defconfig
make bcm2711_defconfig
Il faut maintenant récupérer un fichier important pour le modèle Pi à partir du dépôt du micrologiciel et le placer à la racine de l'arborescence source:
wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
wget https://github.com/raspberrypi/firmware/raw/master/extra/Module7.symvers
wget https://github.com/raspberrypi/firmware/raw/master/extra/Module7l.symvers
Ensuite, utiliser la commande qui compilera tous les petits morceaux de noyau supplémentaires nécessaires à la construction de modules :
make modules_prepare
Et la dernière étape nécessaire est un lien symbolique de construction pointant vers les sources du noyau :
ln -sv $PWD /lib/modules/5.10.X+/build
On doit maintenant pouvoir compiler le module de noyau tiers. Il faut actualiser lee fichier modules.dep
avant de modifier le nouveau module, comme ceci :
depmod
Les bibliothèques côté ARM utilisées sur Raspberry Pi sont généralement installés dans /opt/vc/lib
et incluent la source du code côté ARM à interfacer avec : EGL, mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, OpenVG.
Broadcom a ouvert les bibliothèques de l'espace utilisateur ARM, on peut remplacer le contenu de /opt/vc
du référentiel de firmware par une autre version. Donc bien que l'espace utilisateur 64 bits ne soit pas officiellement pris en charge, certaines bibliothèques peuvent être compilées avec cmake pour effectuer la construction.
Récpérer les sources de l'espace utilisateur :
wget https://github.com/raspberrypi/userland/archive/master.tar.gz -O userland.tar.gz
Et maintenant, construire et installer (renommer/sauvegarder /opt/vc actuel avant l'installation) :
mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make make install
Créer les exemples hello_pi
inclus pour vérifier que les nouvelles bibliothèques fonctionnent correctement :
cd /opt/vc/src/hello_pi chmod +x rebuild.sh ./rebuild.sh
hello_font nécessite FreeType pour être construit.
Le lecteur vidéo OMXplayer permet d’exploiter les performance vidéo du Pi et peut être utilisé depuis la console.
Installer d'abord les prérequis suivants (dans l'ordre) :
Télécharger la dernière source OMXPlayer à partir du référentiel github :
wget https://github.com/popcornmix/omxplayer/archive/master.tar.gz -O omxplayer.tar.gz
Il faut adapter Makefile:
sed -i '/include Makefile.include/d' Makefile sed -i 's:INCLUDES+=*:&-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I/usr/include/freetype2 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include :' Makefile sed -i 's:LDFLAGS+=*:&-L/opt/vc/lib :' Makefile sed -i 's/$(STRIP)/strip/' Makefile sed -i '/cp -a ffmpeg_compiled/d' Makefile
Maintenant, on peut construire et copier le binaire:
make cp -v omxplayer.bin /usr/bin/omxplayer cp -v omxplayer.1 /usr/share/man/man1
OMXPlayer est livré avec une police gratuite à utiliser pour les sous-titres, il faut la placer où il s'attend à ce qu'elle soit :
mkdir -p /usr/share/fonts/truetype/freefont cp -v fonts/FreeSans* /usr/share/fonts/truetype/freefont
Parfois, la console d'arrière-plan brille pendant la lecture d'une vidéo, ou tout aussi ennuyeuse, reste noire après la lecture d'une vidéo. Cela peut être corrigé avec l'utilitaire fbset et une simple fonction wrapper dans le fichier ~/.profile
:
function omxplay() { omxplayer -r -t1 "$@" ; fbset -depth 8 && fbset -depth 16 ;}
SDL (Simple DirectMedia Layer) est une Bibliothèque logicielle permettant de développer des programmes gérant le son, la vidéo, le clavier, la souris et le lecteur CD.
Pour SDL, les seuls prérequis sont ALSA-lib et ALSA-utils (pour pouvoir régler le volume avec alsamixer). Construisons!
wget https://github.com/vanfanel/SDL12-kms-dispmanx/archive/master.tar.gz -O SDL12-dispmanx.tar.gz sed -i 's:DISPMANX_INCLUDES="*:&-I/opt/vc/include/interface/vmcs_host/linux :' configure ./configure --prefix=/usr --disable-static --enable-video-dispmanx --disable-video-kms --disable-video-fbcon --disable-video-x11 --disable-video-directfb make make install
C'est tout ce qu'il y a vraiment à faire, mais il faut sassurer que l'application SDL génère une petite résolution (320×240) sans effets de mise à l'échelle fantaisistes, etc., de sorte que lorsqu'on démarre l'application, on doit voir quelque chose comme ceci :
dispmanx: Opening display[0]... Using internal program mode: width=320 height=240 Using physical mode: 1920 x 1080 16 bpp
Commençons par les dépendances nécessaires à la construction de Kodi.
Tout d'abord, on a besoin d'un runtime Java pour créer les fichiers d'interface. Java n'est pas requis pour exécuter Kodi, il n'est utilisé que pendant la construction. Sr la page Java SE Embedded Downloads récupérer ejdk-8u65-linux-arm-sflt.gz.
Décompresser et placer le chemin de l'exécutable Java dans le PATH :
cp -rv ejdk1.8.0_65/linux_arm_sflt/jre /opt/java export PATH="$PATH:/opt/java/bin"
Il faut installer les dépendances suivantes :
On a également besoin de yajl, qui compile comme ceci :
mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .. make make install
Et enfin TinyXML qui a besoin d'un patch pour produire une librairie partagée :
patch -Np1 -i ../tinyxml_2_6_2-shared_lib.patch make make install
Ce sont les dépendances minimales pour la construction de Kodi. Il faudra peut-être ajouter des logiciels supplémentaires que Kodi peut utilisé, comme Samba et Avahi, etc. En particulier, installer également libgpg-error, libgcrypt et libmicrohttpd et supprimer --disable-webserver
de la ligne de configuration ci-dessous, afin de pouvoir contrôler à distance Kodi depuis un navigateur ou un téléphone, ce qui est une fonctionnalité très pratique à avoir sur le Pi.
Si le téléviseur prend en charge CEC, créer également libCEC afin de pouvoir utiliser la télécommande du téléviseur pour contrôler Kodi:
wget https://github.com/Pulse-Eight/platform/archive/1.0.10.tar.gz mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .. make make install
wget https://github.com/Pulse-Eight/libcec/archive/libcec-3.0.1.tar.gz mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DRPI_INCLUDE_DIR=/opt/vc/include -DRPI_LIB_DIR=/opt/vc/lib .. sed -i 's/#define LIB_INFO.*/#define LIB_INFO ("3.0.1")/' ../src/libcec/env.h sed -i '/\\n, compiled on/d' ../src/libcec/env.h make make install
On va certainement avoir besoin d'un fichier d'échange pour créer Kodi, alors il faut le configurer d'abord.
Maintenant, récupérer la dernière version stable de Kodi:
wget https://github.com/xbmc/xbmc/archive/15.2-Isengard.tar.gz
Si on construit pour Raspberry Pi 2, appliquer ce correctif pour remplacer les spécifications cibles de la plate-forme raspberry-pi :
patch -Np1 -i ../xbmc-15.2-Isengard-rpi2-target.patch
Mettre les sources en forme avec un bootstrap :
./bootstrap
Maintenant, on peut exécuter configure :
CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" CXXFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" LDFLAGS="-L/opt/vc/lib" ./configure --prefix=/usr --disable-debug --disable-gl --enable-gles --disable-joystick --disable-x11 --disable-ssh --disable-samba --disable-dvdcss --disable-avahi --disable-mysql --disable-webserver --disable-optical-drive --with-platform=raspberry-pi --enable-player=omxplayer
Le script de configuration s'arrêtera à mi-chemin et créera la propre version de Kodi de FFMPEG car il ne sera pas actuellement compilé par rapport à la version officielle.
Puis fabriquer
make make install
Les Raspberry Pi 3 et 4 sont équipés d'un contrôleur Bluetooth intégré.
Pour l'utiliser, il faut construire BlueZ - la pile de protocoles Bluetooth.
Commencer par installer ces dépendances (dans l'ordre) :
Avant de créer BlueZ, il faut appliquer ce correctif qui contient divers correctifs spécifiques à Pi :
patch -Np1 -i ../bluez-5.40-rpi-fixes.patch
Il faut également ajouter --enable-deprecated
à la ligne de configuration afin de créer quelques binaires encore nécessaires.
Une fois BlueZ installé, une dernière étape est nécessaire pour faire fonctionner Bluetooth.
Pour Raspberry Pi 3 :
cat > /etc/bluetooth/uart.conf << "EOF" # Start uart.conf # Attach serial devices via UART HCI to BlueZ stack # Use one line per device # See the hciattach man page for options ttyAMA0 bcm43xx 921600 noflow # End of uart.conf EOF
Pour Raspberry Pi 4 :
cat > /etc/bluetooth/uart.conf << "EOF" # Start uart.conf # Attach serial devices via UART HCI to BlueZ stack # Use one line per device # See the hciattach man page for options ttyAMA0 bcm43xx 3000000 flow # End of uart.conf EOF
Après un redémarrage, le contrôleur Bluetooth devrait être opérationnel et prêt à l'action. Essayer l'appairage avec un appareil BT comme ceci :
bluetoothctl power on agent on scan on pair XX:XX:XX:XX:XX:XX
Le bureau accéléré par GPU sur le Pi qu'on attend tous se rapproche de plus en plus chaque jour.
Ces instructions permettront d'obtenir un environnement Wayland/Weston “pur” sans dépendances X11, ce qui signifie évidemment que la couche de compatibilité XWayland ne sera pas construite. Si on a besoin de pouvoir exécuter des applications X dans Weston, il faut suivre le guide Xorg BLFS pour que le serveur Xorg soit opérationnel en premier.
La première chose à faire est d'activer le pilote VC4 d'Eric Anholt dans /boot/config.txt en ajoutant ou en décommentant cette ligne :
dtoverlay=vc4-kms-v3d
Le pilote VC4 d'Eric Anholt ne fonctionne pas sur Raspberry Pi 1 ou Zero en raison de contraintes de mémoire.
L'ancien pilote vc4-fkms-v3d (driver Broadcom VideoCore 4 présent dans Raspberry Pi) ne sera plus pris en charge à l'avenir. Il s'appuie fortement sur des éléments spécifiques aux ordinateurs Pi et non directement pris en charge par Linux. Le nouveau pilote vc4-kms-v3d introduit avec Bullseye est a privilégié, mais comme il est nouveau, il y aura des ajustements nécessaires (en particulier pour les personnes qui dépendaient des anciens pilotes et logiciels fkms).
Lorsque le nouveau pilote fonctionne mal, il faut utiliser: dtoverlay=vc4-fkms-v3d
Une fois redémarré, il est nécessaire d'installer cette liste de dépendances (dans l'ordre) :
meson --prefix=/usr --sysconfdir=/etc -Dbuildtype=release -Dplatforms="wayland" -Dvulkan-drivers="broadcom" -Ddri-drivers="" -Dgallium-drivers="vc4,v3d,kmsro" -Dglx=disabled build ninja -C build && ninja -C build install
Et quelques autres dépendances :
--enable-glesv2 --enable-egl
dans la ligne de config)./configure --prefix=/usr --disable-runtime-deps
)meson --prefix=/usr -Denable-docs=false -Denable-x11=false ..
)Ensuite, libinput qui utilise meson et se construit comme ceci :
meson --prefix=/usr -Dudev-dir=/lib/udev -Ddocumentation=false -Dlibwacom=false -Ddebug-gui=false -Dtests=false build ninja -C build && ninja -C build install udevadm hwdb --update
wget https://wayland.freedesktop.org/releases/weston-9.0.0.tar.xz meson --prefix=/usr -Dbuildtype=release -Dxwayland=false -Dbackend-x11=false -Dweston-launch=false -Dimage-webp=false -Dlauncher-logind=false -Dbackend-drm-screencast-vaapi=false -Dbackend-rdp=false -Dcolor-management-colord=false -Dcolor-management-lcms=false -Dsystemd=false -Dremoting=false -Ddemo-clients=false -Dpipewire=false build ninja -C build && ninja -C build install
Créer un répertoire pour les fichiers de socket et de verrouillage de Weston, comme ceci :
echo "/run/shm/wayland dir 1700 root root" >> /etc/sysconfig/createfiles
Et définir la variable d'environnement XDG_RUNTIME_DIR pour qu'elle pointe là, comme ceci :
echo "export XDG_RUNTIME_DIR=/run/shm/wayland" >> ~/.profile
Une dernière variable d'environnement pour le pilote Vulkan, comme ceci :
echo "export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/broadcom_icd.armv7l.json" >> ~/.profile
Redémarrer le Pi et exécuter weston pour donner un bureau minimal accéléré et un terminal.
QT est une boîte à outils GUI complète, facile à construire et qui fonctionne bien dans Wayland et directement depuis la console.
C'est également le moyen le plus rapide d'obtenir Falkon, un navigateur basé sur Chromium, fonctionnant sur le Pi.
Le dernier QT est la v5.13.0, mais il ne semble pas bien fonctionner avec Wayland, il faut donc s'en tenir à la v5.12.4 pour le moment.
QT est hautement modulaire - récupèrer le grand tarball à source unique contenant tous les modules afin de construire tout de dont on a besoin.
wget https://download.qt.io/archive/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
Tout d'abord, le module de base QT :
cd qtbase ./configure -prefix /opt/qt5 -opensource -confirm-license -opengl es2 -no-pch -nomake examples -no-use-gold-linker -DMESA_EGL_NO_X11_HEADERS make make install
QT sera installé dans /opt/qt5
, il faut s'assurer que les bibliothèques et les binaires peuvent être trouvés par d'autres packages :
cat > /etc/ld.so.conf.d/qt5.conf << "EOF" /opt/qt5/lib EOF ldconfig
export PATH="$PATH:/opt/qt5/bin" export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/opt/qt5/lib/pkgconfig"
Avec les bibliothèques de base en place, on peut passer à la construction de tous les modules QT nécessaires pour faire fonctionner Falkon sous Wayland:
cd qtdeclarative && qmake && make && make install && cd ..
cd qtwebchannel && qmake && make && make install && cd ..
cd qtwayland && qmake && make && make install && cd ..
cd qttools/src/designer && qmake && make && make install && cd ..
cd qttools/src/linguist && qmake && make && make install && cd ..
Le module du moteur Web QT a quelques dépendances :
La construction de qtwebengine est une affaire particulièrement gourmande en mémoire, un gros fichier d'échange est recommandé.
On peut également restreindre le nombre de tâches de compilation parallèles avec export NINJAJOBS=1
avant la compilation.
cd qtwebengine && qmake -- -system-ffmpeg && make && make install
Quelles que soient les applications QT que l'on construira à partir de maintenant, peuvent être démarrées en mode wayland ou eglfs (console directe).
On peut spécifier le mode explicitement avec un argument à l'application - par exemple -platform wayland
ou on peut le définir dans une variable d'environnement comme ceci :
echo "export QT_QPA_PLATFORM=wayland" >> ~/.profile
Suivre simplement la recette BLFS Falkon pour construire, à une exception près pour abandonner la dépendance X :
cmake -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DNO_X11=1 \ ..
Pour que le navigateur utilise une police décente, ajouter la famille de polices DejaVu:
wget http://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.tar.bz2 tar xvf dejavu-fonts-ttf-2.37.tar.bz2 && cd dejavu-fonts-ttf-2.37 install -v -d -m755 /usr/share/fonts/dejavu install -v -m644 ttf/*.ttf /usr/share/fonts/dejavu fc-cache -v /usr/share/fonts/dejavu