{"id":3570,"date":"2013-05-13T13:20:54","date_gmt":"2013-05-13T12:20:54","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=3570"},"modified":"2013-05-17T16:14:10","modified_gmt":"2013-05-17T15:14:10","slug":"un-nouvel-os-a-ronger","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2013\/05\/13\/un-nouvel-os-a-ronger\/","title":{"rendered":"Un nouvel os \u00e0 ronger&nbsp;!"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-3573\" alt=\"Beaglebone Black\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-01.jpg\" width=\"200\" height=\"200\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-01.jpg 200w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-01-150x150.jpg 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a>Il y a un quart d&rsquo;heure de cela, un livreur a d\u00e9pos\u00e9 sur mon bureau deux exemplaires (pour limiter les frais de port) d&rsquo;un nouveau terrain de jeu pour hackers de Linux embarqu\u00e9&nbsp;: <strong>le BeagleBone Black.<\/strong> Je vous propose un petit tour de piste rapide&#8230;<\/p>\n<p>\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Les dimensions hors-tout (y compris les connecteurs) du BeagleBone Black sont de 90x55mm pour une \u00e9paisseur de 19mm. Si l&rsquo;on introduit une carte micro-SD dans le support pr\u00e9vu, la longueur hors-tout passe \u00e0 92 mm environ.\u00a0Les dimensions sont approximativement les m\u00eames que celles du champion 2012 de Linux embarqu\u00e9&nbsp;: le <strong>Raspberry Pi<\/strong>.<\/p>\n<h1>Comparaison in\u00e9vitable<\/h1>\n<p style=\"text-align: justify;\">Les deux cartes \u00e9voluent dans la m\u00eame gamme de prix&nbsp;: j&rsquo;ai command\u00e9 mes exemplaires chez Mouser Electronics pour <strong>37,13&nbsp;\u20acTTC<\/strong> chacun (le port est gratuit si le montant de la commande est sup\u00e9rieur \u00e0 65\u20ac d&rsquo;o\u00f9 l&rsquo;int\u00e9r\u00eat d&rsquo;en commander deux d&rsquo;un coup).<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3574 aligncenter\" alt=\"Beaglebone Black vs Raspberry Pi\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-02.jpg\" width=\"600\" height=\"444\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-02.jpg 600w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-02-300x222.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Le BeagleBone Black se distingue visuellement de son concurrent par deux aspects principaux&nbsp;: la couleur du circuit imprim\u00e9 bien entendu et sa forme de rectangle aux coins arrondis. Au fait, ce n&rsquo;est pas brevet\u00e9 \u00e7a&nbsp;?\u00a0\u00a0 \ud83d\ude09<\/p>\n<p style=\"text-align: justify;\">Les deux cartes proposent une sortie vid\u00e9o <strong>HDMI<\/strong> (connecteur micro-HDMI pour BeagleBone Black), une prise <strong>USB <em>Host<\/em><\/strong> (deux sur les Raspberry Pi mod\u00e8le B) et un connecteur <strong>Ethernet RJ45<\/strong>.Voyons \u00e0 pr\u00e9sent les diff\u00e9rences.<\/p>\n<p>Nous trouverons sur le Raspberry Pi uniquement&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">un connecteur <strong>vid\u00e9o<\/strong> composite (pratique pour connecter un petit \u00e9cran de radar de recul automobile comme nous l&rsquo;avons vu dans <a title=\"Un \u00e9cran de poche pour le Raspberry Pi\" href=\"http:\/\/www.blaess.fr\/christophe\/2013\/01\/01\/un-ecran-de-poche-pour-le-raspberry-pi\/\">cet article<\/a>)<\/li>\n<li style=\"text-align: justify;\">une sortie <strong>audio<\/strong> st\u00e9r\u00e9o.<\/li>\n<li style=\"text-align: justify;\">un connecteur HE10 26 broches regroupant&nbsp;: des alimentations +3.3V et +5V, un port <strong>SPI<\/strong>, un port <strong>I\u00b2C<\/strong>, un port <strong>s\u00e9rie<\/strong> et un <strong>PWM<\/strong>. Ces broches peuvent \u00eatre utilis\u00e9es directement sous forme de fonctions <strong>GPIO<\/strong> ind\u00e9pendantes (voir <a title=\"Les GPIO du Raspberry Pi\" href=\"http:\/\/www.blaess.fr\/christophe\/2012\/11\/26\/les-gpio-du-raspberry-pi\/\">cet article par exemple<\/a>).<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Sur le BeagleBone Black&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">une prise <strong>micro-USB OTG<\/strong> (dont nous reparlerons plus bas)&nbsp;; cette prise existe sur le Raspberry Pi mais ne sert qu&rsquo;\u00e0 l&rsquo;alimenter<\/li>\n<li style=\"text-align: justify;\">une prise d&rsquo;alimentation 5V continu.<\/li>\n<li style=\"text-align: justify;\">deux connecteurs HE10 2&#215;23 broches, comportant&nbsp;: 4 ports <strong>s\u00e9rie<\/strong>, 1 port <strong>SPI<\/strong>, 1 port <strong>I\u00b2C<\/strong>, 4 <strong>timers<\/strong>, 1 port <strong>CAN<\/strong>, 2 <strong>PWM<\/strong>, 7 entr\u00e9es <strong>analogiques<\/strong>, un connecteur <strong>LCD<\/strong>, et une soixantaine de <strong>GPIO<\/strong>&#8230;<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">L&rsquo;avantage serait donc plut\u00f4t au Raspberry Pi pour la cr\u00e9ation rapide d&rsquo;un <em>Media Player<\/em> (gr\u00e2ce aux sorties audio et vid\u00e9o accessibles directement) et plut\u00f4t au BeagleBone Black pour les interfaces avec d&rsquo;autres \u00e9quipements en raison de la richesse des ports d&rsquo;extension.<\/p>\n<h1>Premier branchement<\/h1>\n<p style=\"text-align: justify;\">\u00c0 peine la carte sortie de sa bo\u00eete, on remarque qu&rsquo;elle \u00e9tait accompagn\u00e9e d&rsquo;un petit c\u00e2ble USB (connecteur A &#8211; connecteur OTG) classique. \u00c9videmment, la tentation est grande de brancher le c\u00e2ble sur un PC pour alimenter le BeagleBone et voir s&rsquo;il s&rsquo;allume. Allons-y&nbsp;!<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft  wp-image-3575\" alt=\"C\u00e2ble alimentation USB du Beaglebone Black\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-03-300x300.jpg\" width=\"192\" height=\"192\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-03-300x300.jpg 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-03-150x150.jpg 150w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-03.jpg 400w\" sizes=\"auto, (max-width: 192px) 100vw, 192px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Imm\u00e9diatement la led <strong>Power<\/strong> s&rsquo;allume, comme on s&rsquo;y attendait. Plus surprenant, les trois autres leds clignotent, indiquant une activit\u00e9 du syst\u00e8me. En effet, contrairement \u00e0 son concurrent le Raspberry Pi et \u00e0 son pr\u00e9d\u00e9cesseur le BeagleBone blanc, le Black dispose d&rsquo;une <strong>m\u00e9moire flash eMMC<\/strong> de 2Go int\u00e9gr\u00e9e et pr\u00e9charg\u00e9e avec la distribution <strong>\u00c5ngstr\u00f6m<\/strong>. Inutile donc de pr\u00e9parer une carte micro-SD pour booter.<\/p>\n<p style=\"text-align: justify;\">Sur le PC auquel le BeagleBone Black est connect\u00e9, une fen\u00eatre s&rsquo;ouvre apr\u00e8s la d\u00e9tection par l&rsquo;automonteur du nouveau p\u00e9riph\u00e9rique. Voyons son contenu.<\/p>\n<pre>[~]$ <strong>cd \/media\/BEAGLEBONE\/<\/strong>\n[BEAGLEBONE]$ <strong>ls<\/strong>\nApp          Docs     LICENSE.txt  README.md  u-boot.img\nautorun.inf  Drivers  MLO          START.htm  uEnv.txt\n[BEAGLEBONE]$ <strong>cat README.md<\/strong> \nbeaglebone-getting-started\n==========================\n\nBeagleBone Getting Started Guide\n\nPlease open START.htm in your web browser to view the guide.\n\nPlease submit any improvements to https:\/\/github.com\/jadonk\/beaglebone-getting-started.\n\nFor bone101, see https:\/\/github.com\/jadonk\/bone101.\n[BEAGLEBONE]$<\/pre>\n<p style=\"text-align: justify;\">Ouvrons donc le fichier <code>\/media\/BEAGLEBONE\/START.htm<\/code> dans un navigateur. Une jolie page de pr\u00e9sentation explique comment installer si besoin sur son PC les drivers pour dialoguer avec le BeagleBone Black. Ces drivers (<code>usbnet<\/code>, etc.) sont d\u00e9j\u00e0 inclus dans les noyaux Linux des distributions classiques pour lesquelles il n&rsquo;y a donc rien \u00e0 faire.<\/p>\n<p style=\"text-align: justify;\">La page commence par conseiller de ne lire la documentation qu&rsquo;en dernier ressort. \u00c7a me convient parfaitement, je vais essayer l&rsquo;exploration directe. V\u00e9rifions les interfaces r\u00e9seau disponibles.<\/p>\n<pre>[BEAGLEBONE]$ <strong>ifconfig<\/strong> \neth0      Link encap:Ethernet  HWaddr b0:48:7a:83:3f:86  \n          inet adr:192.168.5.1  Bcast:192.168.5.255  Masque:255.255.255.0\n          [...]\n\neth1      Link encap:Ethernet  HWaddr 00:1d:09:23:b5:8e  \n          [...]\n\neth2      Link encap:Ethernet  HWaddr c8:a0:30:ab:96:79  \n          inet adr:192.168.7.1  Bcast:192.168.7.3  Masque:255.255.255.252\n          adr inet6: fe80::caa0:30ff:feab:9679\/64 Scope:Lien\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          Packets re\u00e7us:4860 erreurs:0 :0 overruns:0 frame:0\n          TX packets:2876 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 lg file transmission:1000 \n          Octets re\u00e7us:6747591 (6.7 MB) Octets transmis:390120 (390.1 KB)\n\nlo        Link encap:Boucle locale  \n          inet adr:127.0.0.1  Masque:255.0.0.0\n          [...]\n\ntun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  \n          inet adr:192.168.4.1  P-t-P:192.168.4.2  Masque:255.255.255.255\n          [...]\n[BEAGLEBONE]$<\/pre>\n<p style=\"text-align: justify;\">La nouvelle interface apparue sur mon poste de travail est <code>eth2<\/code> sur le sous-r\u00e9seau <code>192.168.7<\/code>. L&rsquo;adresse <code>192.167.7.1<\/code> \u00e9tant visiblement affect\u00e9e \u00e0 mon PC, j&rsquo;essaye de \u00ab\u00a0ping-er\u00a0\u00bb la <code>192.168.7.2<\/code> (je l&rsquo;ai \u00e9galement vue sur un lien de la page <code>START.htm<\/code>).<\/p>\n<pre>[BEAGLEBONE]$ <strong>ping 192.168.7.2<\/strong>\nPING 192.168.7.2 (192.168.7.2) 56(84) bytes of data.\n64 bytes from 192.168.7.2: icmp_req=1 ttl=64 time=0.781 ms\n64 bytes from 192.168.7.2: icmp_req=2 ttl=64 time=0.382 ms\n^C\n--- 192.168.7.2 ping statistics ---\n2 packets transmitted, 2 received, 0% packet loss, time 1000ms\nrtt min\/avg\/max\/mdev = 0.382\/0.581\/0.781\/0.200 ms\n[BEAGLEBONE]$<\/pre>\n<p style=\"text-align: justify;\">Le <code>ping<\/code> fonctionne, nous pouvons donc probablement nous connecter sur la BeagleBone Black par le r\u00e9seau. Essayons <strong><code>telnet<\/code><\/strong>.<\/p>\n<pre>[BEAGLEBONE]$ telnet 192.168.7.2\nTrying 192.168.7.2...\ntelnet: Unable to connect to remote host: Connection refused\n[BEAGLEBONE]$<\/pre>\n<p style=\"text-align: justify;\">Pas de serveur <code>telnetd<\/code> ; \u00e7a vaut mieux, ce n&rsquo;est pas tr\u00e8s s\u00fbr. Essayons <strong><code>ssh<\/code><\/strong> en nous connectant sous <code>root<\/code> avec le mot de passe <code>root<\/code> (\u00e0 tout hasard).<\/p>\n<pre>[BEAGLEBONE]$ <strong>ssh root@192.168.7.2<\/strong>\nThe authenticity of host '192.168.7.2 (192.168.7.2)' can't be established.\nRSA key fingerprint is 1e:24:70:97:2d:56:e5:58:9a:95:3b:b3:07:e3:85:8a.\nAre you sure you want to continue connecting (yes\/no)? yes\nWarning: Permanently added '192.168.7.2' (RSA) to the list of known hosts.\nroot@192.168.7.2's password: \nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\">\u00c7a fonctionne, testons quelques commandes.<\/p>\n<h1>Exploration rapide<\/h1>\n<pre>root@beaglebone:~# <strong>ls \/<\/strong>\nbin   dev  home  lost+found  mnt   run\t sys  usr\nboot  etc  lib\t media\t     proc  sbin  tmp  var\nroot@beaglebone:~# <strong>cat \/proc\/cpuinfo<\/strong> \nprocessor\t: 0\nmodel name\t: ARMv7 Processor rev 2 (v7l)\nBogoMIPS\t: 990.68\nFeatures\t: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls \nCPU implementer\t: 0x41\nCPU architecture: 7\nCPU variant\t: 0x3\nCPU part\t: 0xc08\nCPU revision\t: 2\n\nHardware\t: Generic AM33XX (Flattened Device Tree)\nRevision\t: 0000\nSerial\t\t: 0000000000000000\nroot@beaglebone:~# <strong>free<\/strong>\n             total       used       free     shared    buffers     cached\nMem:        510644     145912     364732          0      10784      71988\n-\/+ buffers\/cache:      63140     447504\nSwap:            0          0          0\nroot@beaglebone:~# <strong>df<\/strong>\nFilesystem     1K-blocks    Used Available Use% Mounted on\nrootfs           1738184 1288896    359324  79% \/\n\/dev\/root        1738184 1288896    359324  79% \/\ndevtmpfs          255216       0    255216   0% \/dev\ntmpfs             255320       0    255320   0% \/dev\/shm\ntmpfs             255320     196    255124   1% \/run\ntmpfs             255320       0    255320   0% \/sys\/fs\/cgroup\ntmpfs             255320       4    255316   1% \/tmp\nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\">Nous voyons donc la pr\u00e9sence d&rsquo;un processeur Arm <strong>Cortex-A8 AM33XX<\/strong> (AM3359 d&rsquo;apr\u00e8s la documentation du BeagleBone Black), avec <strong>512Mo<\/strong> de m\u00e9moire.<\/p>\n<pre>root@beaglebone:~# <strong>uname -a<\/strong>\nLinux beaglebone 3.8.6 #1 SMP Sat Apr 13 09:10:52 CEST 2013 armv7l GNU\/Linux\nroot@beaglebone:~# <strong>ls -l \/proc\/config*<\/strong>\n-r--r--r-- 1 root root 24770 Jan  1 00:04 \/proc\/config.gz\nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\">Le noyau fourni par la distribution \u00c5ngstr\u00f6m est apparemment un kernel standard (<em>vanilla<\/em>) r\u00e9cent. L&rsquo;option de configuration SMP (<em>Symetrical Multi Processing<\/em>) est un peu surprenante pour un syst\u00e8me dont le CPU est uni-c\u0153ur, d&rsquo;autant qu&rsquo;il n&rsquo;y a pas l&rsquo;option <code>PREEMPT<\/code>. Le fichier de configuration du kernel \u00e9tant pr\u00e9sent, on pourra facilement le recompiler en modifiant les options qui nous int\u00e9ressent (par exemple pour le rendre plus r\u00e9actif dans une optique temps r\u00e9el).<\/p>\n<pre>root@beaglebone:~# gcc --version\ngcc (Linaro GCC 4.7-2013.02-01) 4.7.3 20130205 (prerelease)\nCopyright (C) 2012 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\">Le compilateur <code>gcc<\/code> est pr\u00e9sent, ce qui permettra de compiler rapidement de petites applications, m\u00eame si on pr\u00e9f\u00e9rera probablement utiliser un h\u00f4te de d\u00e9veloppement plus puissant (avec une cha\u00eene de compilation crois\u00e9e) pour les projets importants.<\/p>\n<h1>Raspberry Pi vs BeagleBone Black&nbsp;: CPU<\/h1>\n<p style=\"text-align: justify;\">On peut r\u00e9aliser quelques petits tests rapides depuis le shell pour comparer des puissances de calcul de deux CPU. L&rsquo;un des plus simples consiste \u00e0 demander \u00e0 l&rsquo;utilitaire <code>bc<\/code> de calculer <strong>\u03c0<\/strong> avec un nombre de d\u00e9cimales relativement \u00e9lev\u00e9 (ici j&rsquo;ai choisi 5000 d\u00e9cimales) et de comparer le temps d&rsquo;ex\u00e9cution.<\/p>\n<pre>root@beaglebone:~# <strong>time   echo \"scale=5000; a(1)*4\" | bc -l<\/strong>\n3.141592653589793238462643383279502884197169399375105820974944592307\\\n81640628620899862803482534211706798214808651328230664709384460955058\\\n[...]\n74351362222477158915049530984448933309634087807693259939780541934144\\\n73774418426312986080998886874132604720\n\nreal\t2m2.431s\nuser\t2m2.189s\nsys\t0m0.035s\nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;expression que l&rsquo;on passe sur l&rsquo;entr\u00e9e standard de bc signifie&nbsp;: \u00ab\u00a0<em>utiliser des r\u00e9els avec 5000 d\u00e9cimales<\/em>\u00a0\u00bb (<code>bc<\/code> travaille en virgule fixe, pas en virgule flottante) et \u00ab\u00a0<em>calculer arctangente de 1 (donc \u03c0\/4) multipli\u00e9 par 4<\/em>\u00ab\u00a0.<br \/>\nEssayons sur Raspberry Pi (distribution Raspbian).<\/p>\n<pre>pi@raspberrypi:~$ <strong>time   echo \"scale=5000; a(1)*4\" | bc -l<\/strong>\n3.141592653589793238462643383279502884197169399375105820974944592307\\\n81640628620899862803482534211706798214808651328230664709384460955058\\\n[..]\n74351362222477158915049530984448933309634087807693259939780541934144\\\n73774418426312986080998886874132604720\n\nreal    2m59.809s\nuser    2m58.970s\nsys     0m0.040s\npi@raspberrypi:~$<\/pre>\n<p style=\"text-align: justify;\">Malgr\u00e9 son nom, le <strong>Raspberry Pi<\/strong> n&rsquo;est pas avantag\u00e9 pour ce calcul, il met <strong>2&rsquo;58<\/strong> pour le calcul alors que le <strong>BeagleBone Black<\/strong> ne met que <strong>2&rsquo;02<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Un autre test simple est d&rsquo;\u00e9crire un petit programme qui r\u00e9alise des boucles actives (en n&rsquo;utilisant que des compteurs entiers, pas de nombres r\u00e9els). Par exemple celui-ci.<\/p>\n<pre><strong>boucles.c:<\/strong>\n#include \n#include \n\nint main(int argc, char * argv[])\n{\n\tint n1, n2;\n\tint i, j;\n\tif (argc &lt; 3) {\n\t\tfprintf(stderr, \"usage: %s n1 n2\\n\", argv[0]);\n\t\texit(EXIT_FAILURE);\n\t}\n\tif (sscanf(argv[1], \"%d\", &amp; n1) != 1) {\n\t\tfprintf(stderr, \"Wrong value: %s\\n\", argv[1]);\n\t\texit(EXIT_FAILURE);\n\t}\n\tif (sscanf(argv[2], \"%d\", &amp; n2) != 1) {\n\t\tfprintf(stderr, \"Wrong value: %s\\n\", argv[2]);\n\t\texit(EXIT_FAILURE);\n\t}\n\tfor (i = 0; i &lt; n1; i ++)\n\t\tfor (j = 0; j &lt; n2; j ++)\n\t\t\t;\n\treturn EXIT_SUCCESS;\n}<\/pre>\n<p style=\"text-align: justify;\">Ce code effectue deux boucles enti\u00e8res imbriqu\u00e9es (pour pouvoir compter plusieurs milliards sans \u00eatre g\u00ean\u00e9 par la taille des <code>int<\/code> sur 32 bits). Compilons-le et ex\u00e9cutons-le sur Raspberry Pi<\/p>\n<pre>pi@raspberrypi:~$ <strong>gcc boucles.c -o boucles -O0<\/strong>\npi@raspberrypi:~$ <strong>time  .\/boucles 100000 100000<\/strong>\n\nreal    1m46.511s\nuser    1m46.350s\nsys     0m0.010s\npi@raspberrypi:~$<\/pre>\n<p style=\"text-align: justify;\">Ce programme a r\u00e9alis\u00e9 dix milliards d&rsquo;it\u00e9rations en <strong>1&rsquo;46 sur le Raspberry Pi<\/strong>. Notez l&rsquo;option <code>-O0<\/code> (la lettre <code>O<\/code> majuscule suivie d&rsquo;un z\u00e9ro) de <code>gcc<\/code> afin de s&rsquo;assurer qu&rsquo;aucune optimisation n&rsquo;a lieu qui pourrait amputer nos boucles.<\/p>\n<p style=\"text-align: justify;\">Essayons maintenant sur le BeagleBone Black.<\/p>\n<pre>root@beaglebone:~# <strong>gcc boucles.c -o boucles -O0<\/strong>\nroot@beaglebone:~# <strong>time  .\/boucles 100000 100000<\/strong>\n\nreal\t1m10.834s\nuser\t1m10.758s\nsys\t0m0.014s\nroot@beaglebone:~#<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-3601\" alt=\"BeagleBone Black\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-04-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-04-300x225.jpg 300w, https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2013\/05\/bbb-04.jpg 400w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Le <strong>BeagleBone Black a mis 1&rsquo;10<\/strong> ce qui confirme notre premi\u00e8re impression sur sa rapidit\u00e9 de calcul par rapport \u00e0 son concurrent. Notons que sur un PC d&rsquo;entr\u00e9e de gamme actuelle, la m\u00eame boucle active s&rsquo;ex\u00e9cute en une trentaine de secondes, ce qui nous permet de situer les performances que l&rsquo;on peut attendre de ces processeurs embarqu\u00e9s.<\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Le BeagleBone Black s&rsquo;affirme comme un tr\u00e8s s\u00e9rieux concurrent pour le Raspberry Pi. Dans la m\u00eame gamme de prix, il offre une puissance CPU un peu sup\u00e9rieure, et une connectivit\u00e9 plus riche. Il b\u00e9n\u00e9ficie \u00e9galement d&rsquo;une compatibilit\u00e9 avec les \u00ab\u00a0capes\u00a0\u00bb (cartes d&rsquo;extension qui s&#8217;empilent en se connectant sur les deux ports HE10) pr\u00e9c\u00e9demment d\u00e9velopp\u00e9es pour le premier BeagleBone.<\/p>\n<p style=\"text-align: justify;\">Pour l&rsquo;utilisation en Media Player, je pense que le Raspberry Pi est plus int\u00e9ressant car il dispose directement d&rsquo;une sortie Audio et d&rsquo;une interface HDMI standard. En revanche pour les applications plus orient\u00e9es vers le dialogue avec des p\u00e9riph\u00e9riques et \u00e9quipements h\u00e9t\u00e9rog\u00e8nes (ce qui me concerne plus particuli\u00e8rement), le BeagleBone Black va probablement s&rsquo;imposer rapidement.<\/p>","protected":false},"excerpt":{"rendered":"<p>Il y a un quart d&rsquo;heure de cela, un livreur a d&eacute;pos&eacute; sur mon bureau deux exemplaires (pour limiter les frais de port) d&rsquo;un nouveau terrain de jeu pour hackers de Linux embarqu&eacute;&nbsp;: le BeagleBone Black. Je vous propose un petit tour de piste rapide&hellip;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,5,8,10,11],"tags":[],"class_list":["post-3570","post","type-post","status-publish","format-standard","hentry","category-beagleboneblack","category-embarque","category-linux-2","category-microprocesseur","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/3570","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=3570"}],"version-history":[{"count":30,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/3570\/revisions"}],"predecessor-version":[{"id":3618,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/3570\/revisions\/3618"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=3570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=3570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=3570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}