{"id":4770,"date":"2017-03-13T05:00:08","date_gmt":"2017-03-13T04:00:08","guid":{"rendered":"https:\/\/www.blaess.fr\/christophe\/?p=4770"},"modified":"2017-03-12T17:02:00","modified_gmt":"2017-03-12T16:02:00","slug":"un-noyau-4-10-sur-un-raspberry-pi-3-64-bits","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2017\/03\/13\/un-noyau-4-10-sur-un-raspberry-pi-3-64-bits\/","title":{"rendered":"Un noyau 4.10 sur un Raspberry Pi 3 64 bits"},"content":{"rendered":"<p><a href=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/03\/IMG_20170312_111655.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2017\/03\/IMG_20170312_111655.png\" alt=\"Vanilla kernel 4.10 on 64 bits Raspberry Pi 3 \" width=\"250\" height=\"183\" class=\"alignright size-full wp-image-4815\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Lorsque nous recompilons un noyau Linux pour le Raspberry Pi, nous avons g\u00e9n\u00e9ralement l&rsquo;habitude d&rsquo;utiliser un kernel sp\u00e9cifique, disponible sur <a href=\"https:\/\/github.com\/raspberrypi\/linux\" target=\"_blank\">https:\/\/github.com\/raspberrypi\/linux<\/a> contenant des drivers absents du noyau standard. Il est n\u00e9anmoins possible de faire fonctionner\u00a0sur la plupart des mod\u00e8les de Raspberry Pi <a href=\"https:\/\/www.kernel.org\/\" target=\"_blank\">un noyau Linux<\/a> parfaitement standard (aussi dit <em>Vanilla Kernel<\/em>). Ceci au prix de quelques efforts de configuration que nous allons voir.<\/p>\n<p style=\"text-align: justify;\">\u00c0 titre d&rsquo;exemple, nous allons installer un <strong>noyau Linux 4.10.1<\/strong> (diffus\u00e9 depuis deux semaines) sur un <strong>Raspberry Pi&nbsp;3<\/strong>.<\/p>\n<p style=\"text-align: justify;\">En outre, nous allons faire fonctionner le Raspberry Pi&nbsp;3 en mode <strong>64&nbsp;bits<\/strong> et utiliser le <em>bootloader<\/em> industriel <strong>U-boot<\/strong>\u00a0!<\/p>\n<p>\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Un avertissement pour commencer. Les \u00e9tapes que nous allons suivre sont tr\u00e8s simples, un peu longues mais tr\u00e8s simples. Le r\u00e9sultat n\u00e9anmoins ne sera pas spectaculaire, loin s&rsquo;en faut.<\/p>\n<p style=\"text-align: justify;\">Je n&rsquo;ai pour l&rsquo;instant pas r\u00e9ussi \u00e0 faire fonctionner le support pour la console (ni HDMI, ni LVDS), aussi est-on limit\u00e9 \u00e0 une connexion par le port s\u00e9rie. L&rsquo;int\u00e9r\u00eat est donc purement technique de voir son Raspberry Pi&nbsp;3 fonctionner en mode 64&nbsp;bits avec un kernel standard. Dans quelques temps peut-\u00eatre, l&rsquo;ensemble du syst\u00e8me pourra s&rsquo;ex\u00e9cuter de la sorte.<\/p>\n<p><H1>Int\u00e9r\u00eat de cette exp\u00e9rimentation<\/H1> <H2>32 bits vs 64 bits&nbsp;?<\/H2><\/p>\n<p style=\"text-align: justify;\">Le <em>system-on-chip<\/em> autour duquel est construit le Raspberry Pi&nbsp;3 est un <em>Broadcom BCM2837<\/em> comportant un processeur quad-c\u0153urs Cortex A53. Ce dernier peut fonctionner en utilisant un jeu d&rsquo;instructions ARMv8 64&nbsp;bits. N\u00e9anmoins les distributions actuelles pour Raspberry Pi, afin d&rsquo;assurer la compatibilit\u00e9 avec le Raspberry Pi 2, continuent de le faire fonctionner avec le jeu d&rsquo;instructions ARMv7 32&nbsp;bits (pour les Raspberry Pi 2 et 3, le <em>bootloader<\/em> charge le noyau <code>kernel<strong>7<\/strong>.img<\/code> alors qu&rsquo;il charge le noyau <code>kernel.img<\/code> au format ARMv6 pour les mod\u00e8les 1 et 0).<\/p>\n<p style=\"text-align: justify;\">Que signifie qu&rsquo;un processeur fonctionne en 32 ou 64 bits&nbsp;? Il s&rsquo;agit de la taille des registres du CPU, c&rsquo;est-\u00e0-dire la taille maximale des donn\u00e9es qu&rsquo;il peut manipuler en une seule op\u00e9ration. L&rsquo;effet le plus imm\u00e9diatement visible du passage de 32 en 64 bits, est la taille de l&rsquo;espace d&rsquo;adressage qui passe de 2<sup>32<\/sup>&nbsp;octets (4&nbsp;Gio) \u00e0 2<sup>64<\/sup>&nbsp;octets. Ceci ne pr\u00e9sente pas particuli\u00e8rement d&rsquo;int\u00e9r\u00eat pour le Raspberry Pi 3 dont la quantit\u00e9 de RAM reste fix\u00e9e \u00e0 1&nbsp;Gio non extensible.<\/p>\n<p style=\"text-align: justify;\">En ce qui concerne le passage en 64&nbsp;bits, aucun int\u00e9r\u00eat r\u00e9el donc hormis le challenge technique.<\/p>\n<p><H2>Vanilla kernel&nbsp;?<\/H2><\/p>\n<p style=\"text-align: justify;\">Le fait d&rsquo;utiliser un noyau standard en revanche est beaucoup plus int\u00e9ressant pour tous les int\u00e9grateurs qui sont amen\u00e9s \u00e0 appliquer des <em>patches<\/em> provenant de diverses sources (par exemple <a href=\"https:\/\/rt.wiki.kernel.org\/index.php\/RT_PREEMPT_HOWTO\" target=\"_blank\">PREEMPT_RT<\/a>) ou \u00e0 incorporer des <em>drivers<\/em> sp\u00e9cifiques d\u00e9velopp\u00e9s ind\u00e9pendamment du Raspberry Pi.<\/p>\n<p style=\"text-align: justify;\">Ces <em>patches<\/em>, ces <em>drivers<\/em> sont quasiment toujours fournis en r\u00e9f\u00e9rence au noyau Linux standard et leur int\u00e9gration dans un noyau sp\u00e9cifiquement modifi\u00e9 peut \u00eatre complexe.<\/p>\n<p style=\"text-align: justify;\">M\u00eame si mes r\u00e9sultats avec le Raspberry Pi 3 et le noyau standard sont encore limit\u00e9s (pas de console), le principe d\u00e9crit ici est valable pour les autres mod\u00e8les qui fonctionnent beaucoup mieux. Pour cet aspect, l&rsquo;int\u00e9r\u00eat est plus \u00e9vident.<\/p>\n<p><H2><em>Bootloader<\/em> U-boot<\/H2><\/p>\n<p style=\"text-align: justify;\">Le fait d&#8217;employer un <em>bootloader<\/em> libre de qualit\u00e9 industrielle comme <a href=\"http:\/\/www.denx.de\/wiki\/U-Boot\/WebHome\" target=\"_blank\">U-Boot<\/a> est tr\u00e8s int\u00e9ressant pour pouvoir \u00ab\u00a0scripter\u00a0\u00bb des proc\u00e9dures sp\u00e9cifiques de d\u00e9marrage.<\/p>\n<p style=\"text-align: justify;\">On pourra l&#8217;employer, en modifiant le script de d\u00e9marrage, par exemple pour &nbsp;:<\/p>\n<ul>\n<li>d\u00e9marrer sur une carte micro-SD minimale puis aller chercher le noyau et le syst\u00e8me de fichiers dans un r\u00e9pertoire sur le r\u00e9seau,<\/li>\n<li>d\u00e9marrer un noyau sp\u00e9cifique s\u00e9lectionn\u00e9 en pressant un bouton reli\u00e9 aux bornes GPIO,<\/li>\n<li>construire un syst\u00e8me de mise \u00e0 jour solide avec retour en arri\u00e8re en cas d&rsquo;erreur,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">L&rsquo;int\u00e9r\u00eat de l&rsquo;exp\u00e9rimentation ci-dessous est donc nettement plus important en ce qui concerne cet aspect, pour disposer d&rsquo;une base d&rsquo;essai des scripts pour U-boot.<\/p>\n<h1>Environnement de construction<\/h1>\n<p style=\"text-align: justify;\">Apr\u00e8s des essais assez longs de diverses m\u00e9thodes (<em>Crosstool-NG<\/em>, compilations manuelles du kernel et de Busybox, etc.), j&rsquo;ai d\u00e9cid\u00e9 de m&rsquo;appuyer sur l&rsquo;outil <strong><a href=\"https:\/\/buildroot.org\/\" target=\"_blank\">Buildroot<\/a><\/strong> pour nous fournir un environnement de construction du syst\u00e8me assez complet.<\/p>\n<p style=\"text-align: justify;\">J&rsquo;ai regroup\u00e9 toute la configuration sp\u00e9cifique dans une recette <code>defconfig<\/code> pour Buildroot, qu&rsquo;il nous suffit d&rsquo;int\u00e9grer dans le projet standard. Il faudra \u00e9galement r\u00e9aliser quelques op\u00e9rations pour l&rsquo;installation apr\u00e8s la compilation.<\/p>\n<p style=\"text-align: justify;\">La premi\u00e8re \u00e9tape consiste \u00e0 t\u00e9l\u00e9charger la derni\u00e8re version de Buildroot\u00a0sur un PC de travail sous Linux (on peut r\u00e9aliser cette op\u00e9ration sur un Raspberry Pi 3, mais elle durera plus longtemps)&nbsp;:<\/p>\n<pre>[~]$ <strong>mkdir Vanilla-Pi-3<\/strong>\n[~]$ <strong>cd Vanilla-Pi-3\/<\/strong>\n[Vanilla-Pi-3]$ <strong>wget <a href=\"https:\/\/buildroot.org\/downloads\/buildroot-2017.02.tar.bz2\">https:\/\/buildroot.org\/downloads\/buildroot-2017.02.tar.bz2<\/a><\/strong>\n[Vanilla-Pi-3]$ <strong>tar xjf buildroot-2017.02.tar.bz2<\/strong><\/pre>\n<p style=\"text-align: justify;\">Nous allons ajouter un fichier de recette dans le r\u00e9pertoire <code>config\/<\/code> de Buildroot. Lorsque j&rsquo;aurai trouv\u00e9 le temps de l&rsquo;affiner et de la compl\u00e9ter, je la ferai parvenir aux d\u00e9veloppeurs de ce projet.<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>cd buildroot-2017.02\/configs\/<\/strong>\n[configs]$ <strong>wget <a href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/raspberrypi3_64_defconfig\">http:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/raspberrypi3_64_defconfig<\/a><\/strong> \n[configs]$ <strong>cd ..<\/strong><\/pre>\n<p style=\"text-align: justify;\">Nous demandons \u00e0 Buildroot d&rsquo;utiliser cette configuration&nbsp;:<\/p>\n<pre>[buildroot-2017.02]$ <strong>make raspberrypi3_64_defconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">Si vous le souhaitez, vous pouvez explorer la configuration avec\u00a0:<\/p>\n<pre>[buildroot-2017.02]$ <strong>make menuconfig<\/strong><\/pre>\n<p style=\"text-align: justify;\">On y voit que j&rsquo;ai choisi&nbsp;:<\/p>\n<ul>\n<li>une <em>toolchain<\/em> de compilation pour <strong>Arm 64 bits<\/strong>, je me suis inspir\u00e9 de la configuration Raspberry Pi 64 bits de <em>Crosstool-NG<\/em>.<\/li>\n<li>un noyau standard <strong>4.10.1<\/strong> avec la configuration par d\u00e9faut pour l&rsquo;architecture Arm64.<\/li>\n<li>un <em>bootloader<\/em> U-boot avec une configuration Raspberry Pi 3 (par d\u00e9faut&nbsp;: 64 bits).<\/li>\n<li><strong>Busybox<\/strong> et les scripts de d\u00e9marrage pour un syst\u00e8me minimal<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Nous pouvons ensuite lancer la compilation avec<\/p>\n<pre>[buildroot-2017.02]$ <strong>make<\/strong><\/pre>\n<p style=\"text-align: justify;\">Cette \u00e9tape a une dur\u00e9e variable suivant la puissance de votre processeur et votre lien Internet. Elle s&rsquo;ex\u00e9cute en g\u00e9n\u00e9ral pendant quelques dizaines de minutes.<\/p>\n<p style=\"text-align: justify;\">Si un message d&rsquo;erreur indique l&rsquo;impossibilit\u00e9 de produire la cible <code>bcm2837-rpi-3-b.dtb<\/code>, c&rsquo;est qu&rsquo;il vous manque le <em>Device Tree Compiler<\/em> <code>dtc<\/code> et que vous devez l&rsquo;ajouter sur votre machine. Par exemple sur un PC Ubuntu, il s&rsquo;installe ainsi&nbsp;: <code>sudo apt install device-tree-compiler<\/code>.<\/p>\n<p><H1>Installation<\/H1><\/p>\n<p style=\"text-align: justify;\">Une fois le syst\u00e8me compil\u00e9, nous allons l&rsquo;installer sur une carte micro-SD. J&rsquo;ins\u00e8re cette carte dans un adaptateur USB que je branche sur mon PC. Elle est alors automatiquement mont\u00e9e et le gestionnaire de fichiers m&rsquo;affiche son contenu. Je commence par d\u00e9monter manuellement la carte (ne pas le faire en cliquant sur l&rsquo;ic\u00f4ne d&rsquo;\u00e9jection du gestionnaire de fichiers, sinon elle sera inaccessible).<\/p>\n<pre>[buildroot-2017.02]$ <strong>umount \/media\/$USER\/*<\/strong><\/pre>\n<p style=\"text-align: justify;\">Il va falloir partitionner (par exemple avec <code>gparted<\/code> ou <code>fdisk<\/code>) cette carte en deux partitions&nbsp;: la premi\u00e8re d&rsquo;une centaine de m\u00e9gaoctets environ, la seconde couvrant le reste de la carte SD. Voici le r\u00e9sultat attendu&nbsp;:<\/p>\n<pre>[buildroot-2017.02]$ <strong>lsblk<\/strong>\nNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT\n[...]\nsdc      8:32   1  1,9G  0 disk \n\u251c\u2500sdc1   8:33   1  128M  0 part \n\u2514\u2500sdc2   8:34   1  1,8G  0 part \n[...]<\/pre>\n<p style=\"text-align: justify;\">Nous formatons ces deux partitions, et en profitons pour les nommer <code>boot<\/code> et <code>root<\/code> par convention. Attention, les noms <code>sdc1<\/code> et <code>sdc2<\/code> sont sp\u00e9cifiques \u00e0 ce que je vois sur ma machine, issus de la commande <code>lsblk<\/code> ci-dessus. Adaptez les bien \u00e0 votre situation.<\/p>\n<pre>[buildroot-2017.02]$ <strong>sudo mkfs.vfat -n boot \/dev\/sdc1<\/strong>\n[buildroot-2017.02]$ <strong>sudo mkfs.ext4 -L root \/dev\/sdc2<\/strong><\/pre>\n<p style=\"text-align: justify;\">Extrayez la carte micro-SD et r\u00e9inserez-la pour qu&rsquo;elle soit automatiquement mont\u00e9e sur votre syst\u00e8me, et v\u00e9rifiez ainsi&nbsp;:<\/p>\n<pre>[buildroot-2017.02]$ <strong>ls \/media\/$USER\/<\/strong>\nboot  root<\/pre>\n<p style=\"text-align: justify;\">Il ne nous reste plus qu&rsquo;\u00e0 y copier les fichiers produits par Buildroot&nbsp;:<\/p>\n<ul>\n<li><code><strong>Image<\/strong><\/code> est le noyau Linux au format de l&rsquo;architecture Arm64 (celui qu&rsquo;on a l&rsquo;habitude de voir sous le nom <code>zImage<\/code> ou <code>vmlinuz<\/code> sur d&rsquo;autres architectures).<\/li>\n<li><code><strong>u-boot.bin<\/strong><\/code> est le <em>bootloader<\/em> U-Boot&nbsp;: il s&rsquo;agit d&rsquo;un outil tr\u00e8s puissant permettant de charger et d\u00e9marrer le noyau Linux en \u00e9tant tr\u00e8s largement configurable par des scripts. Nous en \u00e9crirons un petit exemple ult\u00e9rieurement.<\/li>\n<li><code><strong>bcm2837-rpi-3-b.dtb<\/strong><\/code> est le <em>blob binaire<\/em> repr\u00e9sentant la plate-forme mat\u00e9rielle Raspberry Pi 3 sous forme d&rsquo;un <em>Device Tree<\/em>. Le noyau <code>Image<\/code> est g\u00e9n\u00e9rique pour toute plateforme Arm64 et c&rsquo;est ce fichier qui lui indique sur quel syst\u00e8me il s&rsquo;ex\u00e9cute.<\/li>\n<li><code><strong>rootfs.tar<\/strong><\/code> est une archive tar contenant toute l&rsquo;arborescence du syst\u00e8me de fichiers (les r\u00e9pertoires <code>\/bin\/<\/code>, <code>\/dev\/<\/code>, <code>\/etc\/<\/code>, <code>\/usr\/<\/code>&#8230;).<\/li>\n<\/ul>\n<pre>[buildroot-2017.02]$ <strong>cp output\/images\/Image \/media\/$USER\/boot\/<\/strong>\n[buildroot-2017.02]$ <strong>cp output\/images\/u-boot.bin  \/media\/$USER\/boot\/<\/strong>\n[buildroot-2017.02]$ <strong>cp output\/images\/bcm2837-rpi-3-b.dtb \/media\/$USER\/boot\/<\/strong>\n[buildroot-2017.02]$ <strong>sudo tar xf output\/images\/rootfs.tar -C \/media\/$USER\/root<\/strong>\n[buildroot-2017.02]$ <strong>cd ..<\/strong><\/pre>\n<p style=\"text-align: justify;\">Nous avons install\u00e9 un <em>bootloader<\/em> g\u00e9n\u00e9rique U-boot (que l&rsquo;on retrouve sur la plupart des syst\u00e8mes embarqu\u00e9s industriels). N\u00e9anmoins cela n&rsquo;est pas suffisant, car au d\u00e9marrage le Raspberry Pi est con\u00e7u pour charger un premier <em>bootloader<\/em> sp\u00e9cifique (et propri\u00e9taire). Nous devons l&rsquo;y installer \u00e9galement et c&rsquo;est lui qui viendra ex\u00e9cuter <code>u-boot.bin<\/code>.<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>git clone https:\/\/github.com\/raspberrypi\/firmware<\/strong><\/pre>\n<p style=\"text-align: justify;\">Le t\u00e9l\u00e9chargement est un peu long, car il y a eu de nombreuses versions successives, et comme elles sont fournies sous formes binaires, le stockage n&rsquo;est pas limit\u00e9 aux diff\u00e9rences entre versions. L&rsquo;installation est tr\u00e8s simple&nbsp;:<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>cp -R firmware\/boot\/* \/media\/$USER\/boot<\/strong><\/pre>\n<p style=\"text-align: justify;\">Il nous reste trois petits fichiers \u00e0 cr\u00e9er manuellement (attention aux fautes de frappe, cette \u00e9tape est tr\u00e8s sensible).<\/p>\n<ul>\n<li><code><strong>config.txt<\/strong><\/code> est lu par le <em>bootloader<\/em> primaire du Raspberry Pi (le fichier <code>bootcode.bin<\/code>). Nous allons lui indiquer de charger le <em>Device Tree<\/em> produit par Buildroot et de d\u00e9marrer le second <em>bootloader<\/em> U-boot.<\/li>\n<li><code><strong>cmdline.txt<\/strong><\/code> est \u00e9galement lu par <code>bootcode.bin<\/code>. Il contient une seule ligne de texte, c&rsquo;est la ligne de param\u00e8tres qui sera pass\u00e9e au noyau Linux (ins\u00e9r\u00e9e dans le <em>Device Tree<\/em>).<\/li>\n<li><code><strong>boot.scr<\/strong><\/code> est un petit script pour U-boot lui indiquant de d\u00e9marrer le noyau <code>Image<\/code>. Ce script est lui-m\u00eame obtenu par compilation d&rsquo;un petit fichier source.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Voici les contenus des deux premiers fichiers qui doivent \u00eatre copi\u00e9s dans <code>\/media\/$USER\/boot<\/code>&nbsp;:<\/p>\n<pre><strong><a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/config.txt\">config.txt:<\/a><\/strong>\n kernel=u-boot.bin\n arm_control=0x200\n enable_uart=1\n device_tree_address=0x100\n device_tree=bcm2837-rpi-3-b.dtb<\/pre>\n<p>&nbsp;<\/p>\n<pre><strong><a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/cmdline.txt\">cmdline.txt:<\/a><\/strong>\n dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=\/dev\/mmcblk0p2 rootfstype=ext4 rootwait<\/pre>\n<p style=\"text-align: justify;\">Attention, le contenu de ce deuxi\u00e8me fichier doit tenir sur une seule ligne.<\/p>\n<p style=\"text-align: justify;\">Le contenu du fichier source \u00e0 compiler pour U-boot est le suivant&nbsp;:<\/p>\n<pre><strong><a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/boot.source\">boot.source:<\/a><\/strong>\n fatload mmc 0:1 ${kernel_addr_r} Image\n booti ${kernel_addr_r} - ${fdt_addr_r}<\/pre>\n<p style=\"text-align: justify;\">Son r\u00f4le est de charger le noyau <code>Image<\/code> en m\u00e9moire depuis la premi\u00e8re partition de la carte micro-SD, puis de le d\u00e9marrer en lui passant l&rsquo;adresse du <em>Device Tree<\/em>. Pour le compiler on ex\u00e9cute&nbsp;:<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>mkimage -A arm -O linux -T script -C none -n boot.scr -d boot.source  boot.scr<\/strong><\/pre>\n<p style=\"text-align: justify;\">Si un message d&rsquo;erreur vous indique l&rsquo;absence de l&rsquo;outil <code>mkimage<\/code>, installez-le sur votre syst\u00e8me, par exemple sur Ubuntu on fera <code>sudo apt install u-boot-tools<\/code>.<\/p>\n<p style=\"text-align: justify;\">Finalement, nous pouvons terminer en copiant ce fichier et en d\u00e9montant la carte micro-SD.<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>cp boot.scr \/media\/$USER\/boot\/<\/strong>\n[Vanilla-Pi-3]$ <strong>umount \/media\/$USER\/*<\/strong><\/pre>\n<p><H1>Test du noyau Vanilla 4.10.1 en mode 64 bits<\/H1><\/p>\n<p style=\"text-align: justify;\">Comme je l&rsquo;indiquais au d\u00e9but de cet article, je n&rsquo;ai pas r\u00e9ussi \u00e0 faire fonctionne la sortie HDMI ni LVDS de Linux avec cette configuration. Il faut donc utiliser une connexion sur le port s\u00e9rie du Raspberry Pi 3. Voici les lignes que je vois appara\u00eetre dans la console s\u00e9rie de mon PC lors du boot. Cela commence par des messages provenant de U-boot&nbsp;:<\/p>\n<pre>U-Boot 2017.01 (Mar 10 2017 - 20:13:02 +0100)\n\nDRAM:  944 MiB\nRPI 3 Model B (0xa02082)\nMMC:   bcm2835_sdhci: 0\nreading uboot.env\n\n** Unable to read \"uboot.env\" from mmc0:1 **\nUsing default environment<\/pre>\n<p style=\"text-align: justify;\">Cet avertissement est normal, nous n&rsquo;avons pas fourni de fichier contenant des variables d&rsquo;environnement personnalis\u00e9es pour U-boot.<\/p>\n<pre>In:    serial\nOut:   lcd\nErr:   lcd\nNet:   Net Initialization Skipped\nNo ethernet found.\nstarting USB...\nUSB0:   Core Release: 2.80a\nscanning bus 0 for devices... 3 USB Device(s) found\n       scanning usb for storage devices... 0 Storage Device(s) found\n       scanning usb for ethernet devices... 1 Ethernet Device(s) found\nHit any key to stop autoboot:  0 \nswitch to partitions #0, OK\nmmc0 is current device\nScanning mmc 0:1...\nFound U-Boot script \/boot.scr\nreading \/boot.scr\n151 bytes read in 24 ms (5.9 KiB\/s)\n## Executing script at 02000000\n<\/pre>\n<p style=\"text-align: justify;\">U-boot a trouv\u00e9 notre script et l&rsquo;a charg\u00e9. Il l&rsquo;ex\u00e9cute.<\/p>\n<pre>reading Image\n14862848 bytes read in 956 ms (14.8 MiB\/s)\n## Flattened Device Tree blob at 00000100\n   Booting using the fdt blob at 0x000100\n   Loading Device Tree to 000000003ab28000, end 000000003ab2dcaf ... OK\n\nStarting kernel ...<\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s lecture du fichier <code>Image<\/code> et d\u00e9tection de la pr\u00e9sence d&rsquo;un <em>Device Tree<\/em> charg\u00e9 en m\u00e9moire par le <em>bootloader<\/em> primaire du Raspberry Pi, U-boot d\u00e9marre le noyau. Sur une console texte (HDMI, LVDS, A\/V) c&rsquo;est l\u00e0 que les messages s&rsquo;arr\u00eatent&#8230;<\/p>\n<pre>[    0.000000] Booting Linux on physical CPU 0x0\n[    0.000000] Linux version 4.10.1 (logilin@TR-B-02) (gcc version 5.4.0 (Buildroot 2017.02) ) #1 SMP PREEMPT Fri Mar 10 20:28:37 CET 2017\n[    0.000000] Boot CPU: AArch64 Processor [410fd034]<\/pre>\n<p style=\"text-align: justify;\">Nous pouvons d&rsquo;ores et d\u00e9j\u00e0 observer l&rsquo;architecture Arm 64 bits (<code>AArch64<\/code>) et le num\u00e9ro du dernier noyau vanilla (<code>4.10.1<\/code>).<\/p>\n<pre>[    0.000000] efi: Getting EFI parameters from FDT:\n[    0.000000] efi: UEFI not found.\n[    0.000000] cma: Reserved 16 MiB at 0x0000000039800000\n[    0.000000] WARNING: x1-x3 nonzero in violation of boot protocol:\n[    0.000000]  x1: 0000000000000000\n[    0.000000]  x2: 0000000000000000\n[    0.000000]  x3: 0000000000080000\n[    0.000000] This indicates a broken bootloader or old kernel\n[    0.000000] percpu: Embedded 21 pages\/cpu @ffff80003af8c000 s48024 r8192 d29800 u86016\n[    0.000000] Detected VIPT I-cache on CPU0\n[    0.000000] CPU features: enabling workaround for ARM erratum 845719\n[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 237888\n[    0.000000] Kernel command line: earlyprintk console=ttyAMA0 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708_fb.fbswap=1 dma.dmachans=0x7f35 bcm2709.boardrev=0xa02082 bcm2709.serial=0xf7bb84e8 bcm2709.uart_clock=48000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000  dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=\/dev\/mmcblk0p2 rootfstype=ext4 rootwait<\/pre>\n<p style=\"text-align: justify;\">Le <em>bootloader<\/em> primaire du Raspberry Pi enrichit la ligne de param\u00e8tres du noyau de mani\u00e8re substantielle comme nous pouvons l&rsquo;observer ici (par rapport \u00e0 notre fichier <code>cmdline.txt<\/code>).<\/p>\n<pre>[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)\n[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)\n[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)\n[    0.000000] Memory: 916920K\/966656K available (8636K kernel code, 946K rwdata, 3848K rodata, 1024K init, 392K bss, 33352K reserved, 16384K cma-reserved)\n[    0.000000] Virtual kernel memory layout:\n[    0.000000]     modules : 0xffff000000000000 - 0xffff000008000000   (   128 MB)\n[    0.000000]     vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000   (129022 GB)\n[    0.000000]       .text : 0xffff000008080000 - 0xffff0000088f0000   (  8640 KB)\n[    0.000000]     .rodata : 0xffff0000088f0000 - 0xffff000008cc0000   (  3904 KB)\n[    0.000000]       .init : 0xffff000008cc0000 - 0xffff000008dc0000   (  1024 KB)\n[    0.000000]       .data : 0xffff000008dc0000 - 0xffff000008eaca00   (   947 KB)\n[    0.000000]        .bss : 0xffff000008eaca00 - 0xffff000008f0ea4c   (   393 KB)\n[    0.000000]     fixed   : 0xffff7dfffe7fd000 - 0xffff7dfffec00000   (  4108 KB)\n[    0.000000]     PCI I\/O : 0xffff7dfffee00000 - 0xffff7dffffe00000   (    16 MB)\n[    0.000000]     vmemmap : 0xffff7e0000000000 - 0xffff800000000000   (  2048 GB maximum)\n[    0.000000]               0xffff7e0000000000 - 0xffff7e0000ec0000   (    14 MB actual)\n[    0.000000]     memory  : 0xffff800000000000 - 0xffff80003b000000   (   944 MB)\n[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1\n[    0.000000] Preemptible hierarchical RCU implementation.\n[    0.000000]  Build-time adjustment of leaf fanout to 64.\n[    0.000000]  RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4.\n[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=4\n[    0.000000] NR_IRQS:64 nr_irqs:64 0\n[    0.000000] arm_arch_timer: WARNING: Invalid trigger for IRQ1, assuming level low\n[    0.000000] arm_arch_timer: WARNING: Please fix your firmware\n[    0.000000] arm_arch_timer: WARNING: Invalid trigger for IRQ2, assuming level low\n[    0.000000] arm_arch_timer: WARNING: Please fix your firmware<\/pre>\n<p style=\"text-align: justify;\">Tiens&nbsp;? Apparemment il y a une petite incompatibilit\u00e9 de gestion des timers. Ce message va se r\u00e9p\u00e8ter \u00e0 quelques reprises.<\/p>\n<pre>[    0.000000] arm_arch_timer: Architected cp15 timer(s) running at 19.20MHz (phys).\n[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x46d987e47, max_idle_ns: 440795202767 ns\n[    0.000006] sched_clock: 56 bits at 19MHz, resolution 52ns, wraps every 4398046511078ns\n[    0.000175] Console: colour dummy device 80x25\n[    0.001340] console [tty1] enabled\n[    0.001385] Calibrating delay loop (skipped), value calculated using timer frequency.. 38.40 BogoMIPS (lpj=76800)\n[    0.001437] pid_max: default: 32768 minimum: 301\n[    0.001551] Security Framework initialized\n[    0.001623] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)\n[    0.001656] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)\n[    0.011920] ASID allocator initialised with 65536 entries\n[    0.032584] EFI services will not be available.\n[    0.048013] smp: Bringing up secondary CPUs ...\n[    0.080151] Detected VIPT I-cache on CPU1\n[    0.080198] arm_arch_timer: WARNING: Invalid trigger for IRQ1, assuming level low\n[    0.080200] arm_arch_timer: WARNING: Please fix your firmware\n[    0.080206] arm_arch_timer: WARNING: Invalid trigger for IRQ2, assuming level low\n[    0.080208] arm_arch_timer: WARNING: Please fix your firmware\n[    0.080218] CPU1: Booted secondary processor [410fd034]\n[    0.112234] Detected VIPT I-cache on CPU2\n[    0.112261] arm_arch_timer: WARNING: Invalid trigger for IRQ1, assuming level low\n[    0.112263] arm_arch_timer: WARNING: Please fix your firmware\n[    0.112268] arm_arch_timer: WARNING: Invalid trigger for IRQ2, assuming level low\n[    0.112270] arm_arch_timer: WARNING: Please fix your firmware\n[    0.112279] CPU2: Booted secondary processor [410fd034]\n[    0.144325] Detected VIPT I-cache on CPU3\n[    0.144352] arm_arch_timer: WARNING: Invalid trigger for IRQ1, assuming level low\n[    0.144354] arm_arch_timer: WARNING: Please fix your firmware\n[    0.144358] arm_arch_timer: WARNING: Invalid trigger for IRQ2, assuming level low\n[    0.144360] arm_arch_timer: WARNING: Please fix your firmware\n[    0.144369] CPU3: Booted secondary processor [410fd034]\n[    0.144437] smp: Brought up 1 node, 4 CPUs\n[    0.144935] SMP: Total of 4 processors activated.\n[    0.144965] CPU features: detected feature: 32-bit EL0 Support\n[    0.145041] CPU: All CPU(s) started at EL2\n[    0.145084] alternatives: patching kernel code\n[    0.146078] devtmpfs: initialized\n[    0.152034] DMI not present or invalid.\n[    0.152357] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\n[    0.152417] futex hash table entries: 1024 (order: 5, 131072 bytes)\n[    0.153256] pinctrl core: initialized pinctrl subsystem\n[    0.155078] NET: Registered protocol family 16\n[    0.180398] cpuidle: using governor menu\n[    0.181271] vdso: 2 pages (1 code @ ffff0000088f7000, 1 data @ ffff000008dc5000)\n[    0.181328] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.\n[    0.182539] DMA: preallocated 256 KiB pool for atomic allocations\n[    0.183046] Serial: AMBA PL011 UART driver\n[    0.217241] HugeTLB registered 2 MB page size, pre-allocated 0 pages\n[    0.218481] ACPI: Interpreter disabled.\n[    0.219567] vgaarb: loaded\n[    0.219937] SCSI subsystem initialized\n[    0.220594] usbcore: registered new interface driver usbfs\n[    0.220695] usbcore: registered new interface driver hub\n[    0.220823] usbcore: registered new device driver usb\n[    0.221437] pps_core: LinuxPPS API ver. 1 registered\n[    0.221467] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti &lt;giometti@linux.it&gt;\n[    0.221535] PTP clock support registered\n[    0.221764] dmi: Firmware registration failed.\n[    0.222009] Advanced Linux Sound Architecture Driver Initialized.\n[    0.223377] clocksource: Switched to clocksource arch_sys_counter\n[    0.223575] VFS: Disk quotas dquot_6.6.0\n[    0.223659] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\n[    0.223977] pnp: PnP ACPI: disabled\n[    0.233713] NET: Registered protocol family 2\n[    0.234435] TCP established hash table entries: 8192 (order: 4, 65536 bytes)\n[    0.234601] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)\n[    0.234867] TCP: Hash tables configured (established 8192 bind 8192)\n[    0.235052] UDP hash table entries: 512 (order: 2, 16384 bytes)\n[    0.235118] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)\n[    0.235337] NET: Registered protocol family 1\n[    0.236017] RPC: Registered named UNIX socket transport module.\n[    0.236047] RPC: Registered udp transport module.\n[    0.236072] RPC: Registered tcp transport module.\n[    0.236097] RPC: Registered tcp NFSv4.1 backchannel transport module.\n[    0.237356] kvm [1]: 8-bit VMID\n[    0.237383] kvm [1]: IDMAP page: 8d8000\n[    0.237408] kvm [1]: HYP VA range: 800000000000:ffffffffffff\n[    0.238363] kvm [1]: Hyp mode initialized successfully\n[    0.238413] kvm [1]: Invalid trigger for IRQ4, assuming level low\n[    0.238455] kvm [1]: virtual timer IRQ4\n[    0.240265] audit: initializing netlink subsys (disabled)\n[    0.240419] audit: type=2000 audit(0.235:1): initialized\n[    0.240884] workingset: timestamp_bits=46 max_order=18 bucket_order=0\n[    0.254104] squashfs: version 4.0 (2009\/01\/31) Phillip Lougher\n[    0.255158] NFS: Registering the id_resolver key type\n[    0.255224] Key type id_resolver registered\n[    0.255250] Key type id_legacy registered\n[    0.255284] nfs4filelayout_init: NFSv4 File Layout Driver Registering...\n[    0.255570] 9p: Installing v9fs 9p2000 file system support\n[    0.258907] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)\n[    0.258957] io scheduler noop registered\n[    0.259300] io scheduler cfq registered (default)\n[    0.274984] xenfs: not registering filesystem on non-xen platform\n[    0.282150] Serial: 8250\/16550 driver, 4 ports, IRQ sharing enabled\n[    0.284613] console [ttyS0] disabled\n[    0.284769] 3f215040.serial: ttyS0 at MMIO 0x0 (irq = 61, base_baud = 31224999) is a 16550\n[    1.133165] console [ttyS0] enabled\n[    1.138195] SuperH (H)SCI(F) driver initialized\n[    1.143417] msm_serial: driver initialized\n[    1.148357] cacheinfo: Unable to detect cache hierarchy for CPU 0\n[    1.162381] loop: module loaded\n[    1.166975] hisi_sas: driver version v1.6\n[    1.175268] libphy: Fixed MDIO Bus: probed\n[    1.180610] tun: Universal TUN\/TAP device driver, 1.6\n[    1.185774] tun: (C) 1999-2004 Max Krasnyansky &lt;maxk@qualcomm.com&gt;\n[    1.193842] e1000e: Intel(R) PRO\/1000 Network Driver - 3.2.6-k\n[    1.199809] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.\n[    1.205966] igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k\n[    1.213070] igb: Copyright (c) 2007-2014 Intel Corporation.\n[    1.218865] igbvf: Intel(R) Gigabit Virtual Function Network Driver - version 2.4.0-k\n[    1.226860] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.\n[    1.233001] sky2: driver version 1.30\n[    1.237646] VFIO - User Level meta-driver version: 0.3\n[    1.245111] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver\n[    1.251778] ehci-pci: EHCI PCI platform driver\n[    1.256424] ehci-platform: EHCI generic platform driver\n[    1.261939] ehci-exynos: EHCI EXYNOS driver\n[    1.266372] ehci-msm: Qualcomm On-Chip EHCI Host Controller\n[    1.272209] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver\n[    1.278539] ohci-pci: OHCI PCI platform driver\n[    1.283179] ohci-platform: OHCI generic platform driver\n[    1.288671] ohci-exynos: OHCI EXYNOS driver\n[    1.293724] usbcore: registered new interface driver usb-storage\n[    1.301603] mousedev: PS\/2 mouse device common for all mice\n[    1.309231] i2c \/dev entries driver\n[    1.316613] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer\n[    1.324703] sdhci: Secure Digital Host Controller Interface driver\n[    1.331017] sdhci: Copyright(c) Pierre Ossman\n[    1.335983] Synopsys Designware Multimedia Card Interface Driver\n[    1.343142] sdhci-pltfm: SDHCI platform and OF driver helper\n[    1.395407] mmc0: SDHCI controller on 3f300000.sdhci [3f300000.sdhci] using PIO\n[    1.407332] ledtrig-cpu: registered to indicate activity on CPUs\n[    1.415117] usbcore: registered new interface driver usbhid\n[    1.421991] usbhid: USB HID core driver\n[    1.428538] bcm2835-mbox 3f00b880.mailbox: mailbox enabled\n[    1.436268] NET: Registered protocol family 17\n[    1.440935] 9pnet: Installing 9P2000 support\n[    1.445379] Key type dns_resolver registered\n[    1.450920] registered taskstats version 1\n[    1.458971] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 72, base_baud = 0) is a PL011 rev2\n[    4.700990] console [ttyAMA0] enabled\n[    4.718338] raspberrypi-firmware soc:firmware: Attached to firmware from 2017-03-02 15:32\n[    4.752120] 3f980000.usb supply vusb_d not found, using dummy regulator\n[    4.778759] 3f980000.usb supply vusb_a not found, using dummy regulator\n[    4.855887] dwc2 3f980000.usb: DWC OTG Controller\n[    4.874781] dwc2 3f980000.usb: new USB bus registered, assigned bus number 1\n[    4.903082] dwc2 3f980000.usb: irq 41, io mem 0x00000000\n[    4.925228] hub 1-0:1.0: USB hub found\n[    4.940287] hub 1-0:1.0: 1 port detected\n[    4.956698] hctosys: unable to open rtc device (rtc0)\n[    4.977145] ALSA device list:\n[    4.989034]   No soundcards found.\n[    5.023382] random: fast init done\n[    5.043524] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)\n[    5.076028] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.\n[    5.107081] devtmpfs: mounted\n[    5.120098] Freeing unused kernel memory: 1024K\n[    5.351442] usb 1-1: new high-speed USB device number 2 using dwc2\n[    5.408029] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered\n[    5.588311] hub 1-1:1.0: USB hub found\n[    5.603442] hub 1-1:1.0: 5 ports detected\nWelcome to Buildroot\nbuildroot login: [    5.907403] usb 1-1.1: new high-speed USB device number 3 using dwc2\n[    6.917298] random: crng init done<\/pre>\n<p style=\"text-align: justify;\">Le boot est \u00e0 pr\u00e9sent termin\u00e9 et <code>login<\/code> a affich\u00e9 son <em>prompt<\/em> de connexion. N\u00e9anmoins le contr\u00f4leur USB s&rsquo;initialise plus lentement et un message vient \u00ab\u00a0recouvrir\u00a0\u00bb le <em>prompt<\/em>. J&rsquo;appuie alors sur la touche <code>Entr\u00e9e<\/code>.<\/p>\n<pre>Welcome to Buildroot\nbuildroot login: <strong>root<\/strong>\nPassword: <strong>root<\/strong><\/pre>\n<p style=\"text-align: justify;\">Le mot de passe de <em>root<\/em> (<code>root<\/code>) est cod\u00e9 en dur dans la configuration de Buildroot. Vous pouvez le modifier lors de l&rsquo;\u00e9tape <code>make menuconfig<\/code> dans le menu <code>System configuration<\/code>.<\/p>\n<pre># <strong>uname -a<\/strong>\nLinux buildroot 4.10.1 #1 SMP PREEMPT Fri Mar 10 20:28:37 CET 2017 aarch64 GNU\/Linux<\/pre>\n<p style=\"text-align: justify;\">Nous avons donc bien confirmation de la r\u00e9ussite de notre installation d&rsquo;un noyau standard 4.10.1. Comment v\u00e9rifier que notre syst\u00e8me fonctionne bien en mode 64 bits&nbsp;? Simplement en regardant la taille d&rsquo;un pointeur. Pour cela je prends le petit programme C suivant&nbsp;:<\/p>\n<pre><strong><a href=\"https:\/\/www.blaess.fr\/christophe\/files\/article-2017-03-13\/sizeof.c\">sizeof.c:<\/a><\/strong>\n#include &lt;stdio.h&gt;\n\nint main(void)\n{\n        fprintf(stdout, \"sizeof(int) = %lu\\n\", sizeof(int));\n        fprintf(stdout, \"sizeof(long) = %lu\\n\", sizeof(long));\n        fprintf(stdout, \"sizeof(void*) = %lu\\n\", sizeof(void *));\n        return 0;\n}<\/pre>\n<p style=\"text-align: justify;\">Je l&rsquo;ai \u00e9crit sur mon PC, dans le r\u00e9pertoire <code>Vanilla-Pi-3<\/code> et je le compile en utilisant la <em>toolchain<\/em> Arm64 que Buildroot a produit au d\u00e9but de sa compilation&nbsp;:<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>.\/buildroot-2017.02\/output\/host\/usr\/bin\/aarch64-linux-gcc sizeof.c -o sizeof<\/strong><\/pre>\n<p style=\"text-align: justify;\">Je copie le fichier <code>sizeof<\/code> sur la carte micro-SD du Raspberry Pi pr\u00e9alablement arr\u00eat\u00e9&nbsp;:<\/p>\n<pre>[Vanilla-Pi-3]$ <strong>sudo cp sizeof \/media\/$USER\/root\/root\/<\/strong>\n[Vanilla-Pi-3]$ <strong>umount \/media\/$USER\/*<\/strong><\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s reboot du Raspberry Pi 3, ex\u00e9cutons le script&nbsp;:<\/p>\n<pre>Welcome to Buildroot\nbuildroot login: <strong>root<\/strong>\nPassword: <strong>root<\/strong>\n# <strong>ls<\/strong>\nsizeof\n# <strong>.\/sizeof<\/strong> \nsizeof(int) = 4\nsizeof(long) = 8\nsizeof(void*) = 8\n# <\/pre>\n<p style=\"text-align: justify;\">La taille d&rsquo;un pointeur est bien de 8&nbsp;octets, 64&nbsp;bits. Ceci permet en th\u00e9orie d&rsquo;adresser 2<sup>64<\/sup>&nbsp;octets, soient 16&nbsp;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Octet\" target=\"_blank\">Eio<\/a> de m\u00e9moire. En pratique les processeurs 64&nbsp;bits actuels ne d\u00e9passent pas 48&nbsp;bits d&rsquo;adresse utilisables, soient 256&nbsp;Tio (ce qui est d\u00e9j\u00e0 gigantesque). Du moins pour l&rsquo;architecture x86, je ne sais pas ce qu&rsquo;il en est pour le <em>system-on-chip<\/em> du Raspberry Pi 3. Quoiqu&rsquo;il en soit, ce dernier ne poss\u00e8de que 1&nbsp;Gio de RAM non extensible ce qui limite l&rsquo;int\u00e9r\u00eat de ce type d&rsquo;adressage&#8230;<\/p>\n<p style=\"text-align: justify;\">L&rsquo;ex\u00e9cution du programme ci-dessus donne exactement le m\u00eame r\u00e9sultat que sur un PC x86 64 bits. En revanche sur un Raspberry Pi 3 avec une distribution Raspbian standard (donc 32 bits), on obtient&nbsp;:<\/p>\n<pre>pi@raspberrypi:~$ <strong>.\/sizeof<\/strong>\nsizeof(int) = 4\nsizeof(long) = 4\nsizeof(void*) = 4<\/pre>\n<p><H1>Conclusion<\/H1><\/p>\n<p style=\"text-align: justify;\">Nous l&rsquo;avons d\u00e9j\u00e0 dit, l&rsquo;int\u00e9r\u00eat de cette op\u00e9ration est assez limit\u00e9 en ce qui concerne le passage au mode 64&nbsp;bits. Le fait de pouvoir d\u00e9marrer sur un noyau standard est plus int\u00e9ressant. Enfin la mise en place de U-boot nous ouvre des possibilit\u00e9s en ce qui concerne les tout premiers scripts de d\u00e9marrage, je reviendrai sur ce sujet ult\u00e9rieurement.<\/p>\n<p style=\"text-align: justify;\">Pour acc\u00e9l\u00e9rer la compilation de Buildroot, je n&rsquo;ai incorpor\u00e9 aucun packages suppl\u00e9mentaire par rapport au Busybox minimal&nbsp;; naturellement vous pouvez ajouter toutes les applications qui vous semblent bonnes en \u00e9ditant le contenu du menu <em>Target Packages<\/em> lors du <code>make menuconfig<\/code>.<\/p>\n<p style=\"text-align: justify;\">Si vous trouvez ce qui cloche dans ma configuration et qui emp\u00eache d&rsquo;utiliser la console graphique du Raspberry Pi 3, j&rsquo;en serai ravi. Il faut savoir que sur les autres mod\u00e8les 1 ou 2, on peut d\u00e9marrer un syst\u00e8me complet (y compris l&rsquo;environnement graphique Pixel) sur un noyau Linux standard.<\/p>","protected":false},"excerpt":{"rendered":"<p>Lorsque nous recompilons un noyau Linux pour le Raspberry Pi, nous avons g&eacute;n&eacute;ralement l&rsquo;habitude d&rsquo;utiliser un kernel sp&eacute;cifique, disponible sur https:\/\/github.com\/raspberrypi\/linux contenant des drivers absents du noyau standard. Il est n&eacute;anmoins possible de faire fonctionner&nbsp;sur la plupart des mod&egrave;les de Raspberry Pi un noyau Linux parfaitement standard (aussi dit Vanilla Kernel). Ceci au prix de [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,11],"tags":[],"class_list":["post-4770","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=4770"}],"version-history":[{"count":49,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4770\/revisions"}],"predecessor-version":[{"id":4821,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/4770\/revisions\/4821"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=4770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=4770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=4770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}