{"id":1847,"date":"2013-09-12T18:46:55","date_gmt":"2013-09-12T16:46:55","guid":{"rendered":"https:\/\/www.azurs.net\/carnet\/?p=1847"},"modified":"2025-10-17T23:19:42","modified_gmt":"2025-10-17T21:19:42","slug":"installer-arch-linux-arm-sur-la-cubieboard","status":"publish","type":"post","link":"https:\/\/www.azurs.net\/carnet\/2013\/09\/installer-arch-linux-arm-sur-la-cubieboard\/","title":{"rendered":"Installer Arch Linux ARM sur la Cubieboard"},"content":{"rendered":"<p><span style=\"color: navy;\">[Mise \u00e0 jour du 30\/09\/2014 &#8211; Cet article a \u00e9t\u00e9 mis \u00e0 jour, notamment pour permettre d&rsquo;utiliser la totalit\u00e9 des 1 Go de RAM embarqu\u00e9s sur la carte Cubieboard &#8211; Pour une proc\u00e9dure d&rsquo;installation actualis\u00e9e, consulter : <a href=\"https:\/\/www.azurs.net\/carnet\/2014\/09\/arch-linux-arm-sur-cubieboard-1-allwinner-a10-1go-ram\/\">Arch Linux ARM sur Cubieboard 1 (Allwinner A10, 1Go RAM)<\/a>]<\/span><\/p>\n<p>J&rsquo;ai fait l&rsquo;acquisition <a href=\"https:\/\/www.azurs.net\/carnet\/2013\/07\/cubieboard\/\">au d\u00e9but du mois de juillet<\/a> d&rsquo;une carte <em>Cubieboard 1<\/em>. Il s&rsquo;agit d&rsquo;un mini-ordinateur mono-carte bas\u00e9 sur un syst\u00e8me sur puce (SoC) Allwinner A10 embarquant un processeur ARM Cortex-A8 cadenc\u00e9 \u00e0 1\u00a0GHz et dot\u00e9 entre autres d&rsquo;1\u00a0Go de m\u00e9moire vive, de 4 Go de <a href=\"http:\/\/fr.wikipedia.org\/wiki\/M%C3%A9moire_flash#NAND\">m\u00e9moire flash NAND<\/a>, d&rsquo;une interface SATA et d&rsquo;une sortie HDMI (depuis, un second mod\u00e8le est sorti, la <em>Cubieboard 2<\/em>, qui est bas\u00e9 sur un SoC Allwinner A20 embarquant un processeur double coeur ARM 2xCortex A7 \u00e0 1\u00a0GHz).<br \/>\n<!--more--><br \/>\nContrairement \u00e0 la carte Raspberry Pi, la Cubieboard n&rsquo;est pas (encore ?) suivie par une communaut\u00e9 importante d&rsquo;utilisateurs. La documentation et le support sont basiques et encore balbutiants, pour ne pas dire inexistants.<\/p>\n<figure id=\"attachment_2062\" aria-describedby=\"caption-attachment-2062\" style=\"width: 625px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-2062\" src=\"https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/chameau-750x511.jpg\" alt=\"Dans le d\u00e9sert, un chameau conduit par un homme porte quatre jeunes femmes en costume traditionnel de Mandchourie.\" width=\"625\" height=\"425\" srcset=\"https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/chameau-750x511.jpg 750w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/chameau-300x204.jpg 300w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/chameau-624x425.jpg 624w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/chameau.jpg 1173w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><figcaption id=\"caption-attachment-2062\" class=\"wp-caption-text\">\u00ab il est plus facile \u00e0 un bidouilleur d\u00e9butant d&rsquo;installer Arch Linux ARM sur la carte CubieBoard qu&rsquo;\u00e0 un chameau de passer par le chas d&rsquo;une aiguille, surtout s&rsquo;il porte quatre danseuses mandchouriennes sur ses flancs. \u00bb <a href=\"http:\/\/gallica.bnf.fr\/ark:\/12148\/btv1b9051862v\/f1.item\">Source : Gallica.bnf.fr<\/a>.<\/figcaption><\/figure>\n<p>C&rsquo;est toujours bon \u00e0 savoir pour qui envisagerait d&rsquo;acheter cette carte : pour l&rsquo;utiliser, il faut aller chercher les informations diss\u00e9min\u00e9es un peu partout, et \u00e0 la fois celles qui traitent sp\u00e9cifiquement de la Cubieboard et celles qui portent sur des machines dot\u00e9es du m\u00eame SoC, comme par exemple les cartes <a href=\"http:\/\/gooseberry.atspace.co.uk\/\">Gooseberry<\/a>, <a href=\"https:\/\/www.miniand.com\/products\/Hackberry%20A10%20Developer%20Board\">Hackberry A10<\/a>, <a href=\"http:\/\/www.hardkernel.com\/renewal_2011\/products\/prdt_info.php?g_code=G135341370451\">ODROID-U2<\/a> ou encore <a href=\"http:\/\/linux-sunxi.org\/Mele_A1000\">Mele A1000<\/a>.<\/p>\n<p>L&rsquo;installation des distributions embarqu\u00e9es par <a href=\"http:\/\/www.berryterminal.com\/doku.php\/berryboot_a10\">Berryboot<\/a>, qui devrait \u00eatre simple, ne m&rsquo;a pas convaincue. Pour une raison que j&rsquo;ignore, l&rsquo;utilisation de Berryboot s&rsquo;est traduite par un \u00e9chec dans la plupart des cas, la Cubieboard ne d\u00e9marrant pas ou d\u00e9marrant sur la m\u00e9moire NAND Flash. De plus, l&rsquo;installation d&rsquo;Arch Linux avec Berryboot n&rsquo;est pas vraiment possible (en tous cas, je n&rsquo;ai jamais r\u00e9ussi \u00e0 y arriver sur le Raspberry Pi).<\/p>\n<p>J&rsquo;ai donc opt\u00e9 pour une installation \u00ab\u00a0\u00e0 la main\u00a0\u00bb, \u00e0 partir du <a href=\"http:\/\/archlinuxarm.org\/platforms\/armv7\/allwinner\/cubieboard\">guide<\/a> disponible sur le site Web d\u00e9di\u00e9 \u00e0 Arch Linux.<\/p>\n<p>Comme j&rsquo;ai eu beaucoup de mal \u00e0 m&rsquo;en d\u00e9patouiller et que j&rsquo;ai finalement obtenu le r\u00e9sultat souhait\u00e9, voici, pour m\u00e9moire, pour r\u00e9f\u00e9rence et parce que d&rsquo;autres pourraient \u00eatre int\u00e9ress\u00e9s, un relev\u00e9 comment\u00e9 des \u00e9tapes de l&rsquo;installation d&rsquo;Arch Linux sur la carte Cubieboard que j&rsquo;ai r\u00e9alis\u00e9e.<\/p>\n<p>Les <a href=\"#sources\">sources<\/a> utilis\u00e9es et dig\u00e9r\u00e9es pour cette installation sont indiqu\u00e9es \u00e0 la fin de ce billet.<\/p>\n<h2>Pr\u00e9-requis pour l&rsquo;installation d&rsquo;Arch Linux ARM sur la carte Cubieboard (boot sur la carte micro-SD)<\/h2>\n<p>L&rsquo;installation d\u00e9crite ici a \u00e9t\u00e9 r\u00e9alis\u00e9e de mani\u00e8re \u00e0 faire d\u00e9marrer (boot) la Cubieboard sur la carte micro-SD. Je n&rsquo;ai pas tent\u00e9 de r\u00e9aliser cette op\u00e9ration sur la m\u00e9moire Flash, sur laquelle j&rsquo;ai pr\u00e9f\u00e9r\u00e9 laisser Android int\u00e9grant XBMC que j&rsquo;avais test\u00e9 pr\u00e9c\u00e9demment. Lorsqu&rsquo;une carte micro-SD correctement configur\u00e9e est ins\u00e9r\u00e9e dans la Cubieboard, elle d\u00e9marre sur cette carte. Pour d\u00e9marrer sur la m\u00e9moire NAND Flash, il suffit de retirer la carte micro-SD.<\/p>\n<h3>Disposer d&rsquo;une machine tournant sous Linux et pourvue d&rsquo;une interface permettant d&rsquo;acc\u00e9der \u00e0 la carte micro-SD<\/h3>\n<p>Comme je n&rsquo;ai pas 36 machines tournant sous Linux et que j&rsquo;aime les complications, j&rsquo;ai utilis\u00e9&#8230; une carte Raspberry Pi tournant elle m\u00eame sous Arch Linux ARM (il s&rsquo;agit de la carte dont j&rsquo;ai d\u00e9crit la <a title=\"Serveur de torrents sur Raspberry Pi sous Archlinux\" href=\"https:\/\/www.azurs.net\/carnet\/2013\/07\/seedbox-sur-raspberry-pi-sous-archlinux\/\">configuration en client Bittorent<\/a> il y a quelques semaines), sur laquelle j&rsquo;ai branch\u00e9 un <a href=\"http:\/\/dx.com\/p\/compact-all-in-one-mini-usb-2-0-ms-m2-mini-sd-tf-sd-mmc-card-reader-translucent-pink-47593\">lecteur de cartes multi-formats<\/a> acquis pour la modique somme de 1\u00a0\u20ac\u00a086 (frais de port compris) chez un <a href=\"http:\/\/dx.com\/\">marchand chinois<\/a><\/p>\n<h3>Partitionner et formater la carte micro-SD pour pr\u00e9parer l&rsquo;installation<\/h3>\n<p>C&rsquo;est l\u00e0 que j&rsquo;ai, paradoxalement, rencontr\u00e9 le plus de difficult\u00e9s.<\/p>\n<p>Pour pr\u00e9parer l&rsquo;installation, il faut partitionner puis formater la carte micro-SD en y cr\u00e9ant :<\/p>\n<ul>\n<li>une partition de 16\u00a0Mo format\u00e9e en FAT pour y placer le <a href=\"http:\/\/rhombus-tech.net\/allwinner_a10\/a10_boot_process\/\">bootloader<\/a>\u00a0;<\/li>\n<li>une partition occupant l&rsquo;espace restant sur la carte micro-SD, format\u00e9e en ext4, pour le syst\u00e8me de fichiers.<\/li>\n<\/ul>\n<p>Je me suis donc muni d&rsquo;une carte micro-SD de classe 10 et d&rsquo;une capacit\u00e9 de 32 Go, et j&rsquo;ai tourn\u00e9 en rond sans parvenir \u00e0 formater la seconde partition en ext4. J&rsquo;ai tent\u00e9 ma chance avec GParted depuis une machine tournant sous Xubuntu, avec fdisk depuis ma carte Raspberry, mais rien \u00e0 faire : au moment du formatage, ma partition ne voulait pas se formater en ext4 et la commande mkfs.ex4, si elle ne renvoyait pas d&rsquo;erreur, ne formatait rien du tout.<\/p>\n<p>J&rsquo;ai finalement chang\u00e9 de carte micro-SD pour une carte premier prix de classe 4 d&rsquo;une capacit\u00e9 de 4\u00a0Go, et j&rsquo;ai tout refait \u00e0 la main en m&rsquo;inspirant des (bons) conseils trouv\u00e9s dans un <a title=\"Installing a customized Debian on the Cubieboard\" href=\"http:\/\/abhinavgupta2812.wordpress.com\/2013\/08\/24\/installing-a-customized-debian-on-the-cubieboard\/\">billet<\/a> d&rsquo;un <a title=\"Interstellar Overdrive\" href=\"http:\/\/abhinavgupta2812.wordpress.com\/\">blog d\u00e9couvert par hasard<\/a>, billet qui porte sur l&rsquo;installation d&rsquo;une distribution Debian sur la Cubieboard (mais l&rsquo;\u00e9tape \u00ab\u00a0formatage de la carte micro-SD\u00a0\u00bb est sensiblement la m\u00eame sous Arch Linux ARM).<\/p>\n<p><strong>Pour partitionner et formater la carte micro-SD, il faut se connecter \u00e0 la machine dans laquelle elle est ins\u00e9r\u00e9e avec des droits d&rsquo;administrateur (root).<\/strong><\/p>\n<h4>Remise \u00e0 z\u00e9ro des premiers secteurs de la carte<\/h4>\n<p>Les cartes micro-SD sont vendues pr\u00e9format\u00e9es. La mienne avait cependant d\u00e9j\u00e0 fait l&rsquo;objet de tentatives de formatage inabouties&#8230;<\/p>\n<p>Pour d\u00e9terminer le nom de p\u00e9riph\u00e9rique de stockage de la carte micro-SD sur la machine dans laquelle elle est ins\u00e9r\u00e9e, on commence par utiliser fdisk :<\/p>\n<p><code># <strong>fdisk -l<\/strong><\/code><\/p>\n<p>[&#8230;]<\/p>\n<p>Disk <strong>\/dev\/sdb<\/strong>: 3965 MB, 3965190144 bytes, 7744512 sectors<br \/>\nUnits = sectors of 1 * 512 = 512 bytes<br \/>\nSector size (logical\/physical): 512 bytes \/ 512 bytes<br \/>\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<br \/>\nDisk label type: dos<br \/>\nDisk identifier: 0xf57554a0<\/p>\n<p>Device Boot Start End Blocks Id System<br \/>\n\/dev\/sdb1 2048 67584 32768+ e W95 FAT16 (LBA)<br \/>\n\/dev\/sdb2 69632 7744511 3837440 83 Linux<\/p>\n<p>Ma carte est le p\u00e9riph\u00e9rique (<em>device<\/em>) <code>\/dev\/sdb<\/code>, elle a une taille de 3965\u00a0Mo r\u00e9partis en 7744512 secteurs de 512 octets chacun. Elle a d\u00e9j\u00e0 \u00e9t\u00e9 format\u00e9e et comprend deux partitions (<code>sdb1<\/code> et <code>sdb2<\/code>).<\/p>\n<p>Pour partir d&rsquo;une carte micro-SD \u00ab\u00a0propre et nette\u00a0\u00bb il faut \u00ab\u00a0nettoyer\u00a0\u00bb les premiers secteurs de la carte (les 2048 secteurs qui se trouvent avant le d\u00e9but de <code>sdb1<\/code> qui commence au secteur 2048 (ce qui veut dire qu&rsquo;il y a 2048*512\/(1024\u00b2) = 1\u00a0Mo avant le d\u00e9but de sdb1 &#8211; pour rappel, 1\u00a0Mo contient 1024\u00a0Ko qui contiennent chacun 1024 octets). Ce premier Mo est en fait r\u00e9serv\u00e9 au <em>Master boot record<\/em> (MBR ou en bon fran\u00e7ais, la zone d&rsquo;amor\u00e7age), qui contient la table des partitions et le bootloader.<\/p>\n<p>Pour le faire, on utilise la <a href=\"http:\/\/pwet.fr\/man\/linux\/commandes\/dd\">commande dd<\/a> (<em>destroy disk<\/em>) pour remettre \u00e0 z\u00e9ro cette partie de la carte.<strong> Comme son nom l&rsquo;indique, la commande dd peut faire des d\u00e9g\u00e2ts : attention notamment \u00e0 bien rep\u00e9rer le nom du <em>device<\/em> qui correspond \u00e0 la carte micro-SD<\/strong> (\/dev\/sdb dans mon cas, comme expliqu\u00e9 plus haut).<\/p>\n<p><code># <strong>dd if=\/dev\/zero of=\/dev\/sdb bs=1M count=1<\/strong><br \/>\n1+0 records in<br \/>\n1+0 records out<br \/>\n1048576 bytes (1.0 MB) copied, 0.111078 s, 9.4 MB\/s<\/code><\/p>\n<h4>Pr\u00e9paration et \u00e9criture de la table de partitions sur la carte micro-SD<\/h4>\n<p>Puis on lance fdisk :<\/p>\n<p><code># <strong>fdisk \/dev\/sdb<\/strong><br \/>\nWelcome to fdisk (util-linux 2.23.2).<\/code><\/p>\n<p>Changes will remain in memory only, until you decide to write them.<br \/>\nBe careful before using the write command.<\/p>\n<p>Device does not contain a recognized partition table<br \/>\nBuilding a new DOS disklabel with disk identifier 0x776cd483.<\/p>\n<p>On cr\u00e9e une nouvelle partition (commande n).<\/p>\n<p><code>Command (m for help): <strong>n<\/strong><\/code><\/p>\n<p>De type primaire :<\/p>\n<p><code>Partition type:<br \/>\np   primary (0 primary, 0 extended, 4 free)<br \/>\ne   extended<br \/>\nSelect (default p): <strong>p<\/strong><\/code><\/p>\n<p>Qui porte le num\u00e9ro 1 :<\/p>\n<p><code>Partition number (1-4, default 1): <strong>1<\/strong><\/code><\/p>\n<p>Qui commence, on a vu plus haut pourquoi, au secteur 2048 :<\/p>\n<p><code>First sector (2048-7744511, default 2048): <strong>2048<\/strong><\/code><\/p>\n<p>Et dont la taille est de 16\u00a0Mo :<\/p>\n<p><code>Last sector, +sectors or +size{K,M,G} (2048-7744511, default 7744511): <strong>+16M<\/strong><br \/>\nPartition 1 of type Linux and of size 16 MiB is set<\/code><\/p>\n<p>On liste les partitions pour v\u00e9rifier que tout est correct :<\/p>\n<p><code>Command (m for help): <strong>p<\/strong><\/code><\/p>\n<p>Disk \/dev\/sdb: 3965 MB, 3965190144 bytes, 7744512 sectors<br \/>\nUnits = sectors of 1 * 512 = 512 bytes<br \/>\nSector size (logical\/physical): 512 bytes \/ 512 bytes<br \/>\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<br \/>\nDisk label type: dos<br \/>\nDisk identifier: 0x776cd483<\/p>\n<p>Device Boot Start End Blocks Id System<br \/>\n<strong>\/dev\/sdb1<\/strong> 2048 34815 16384 83 Linux<\/p>\n<p>Et on cr\u00e9e la seconde partition :<\/p>\n<p><code>Command (m for help): <strong>n<\/strong><\/code><\/p>\n<p>Qui est primaire et porte le num\u00e9ro 2 :<\/p>\n<p><code>Partition type:<br \/>\np   primary (1 primary, 0 extended, 3 free)<br \/>\ne   extended<br \/>\nSelect (default p): <strong>p<\/strong><br \/>\nPartition number (2-4, default 2): <strong>2<\/strong><\/code><\/p>\n<p>Et que l&rsquo;on fait d\u00e9marrer juste apr\u00e8s la partition 1 cr\u00e9\u00e9e pr\u00e9c\u00e9demment, qui se terminait au secteur 34815 dans mon cas (propos\u00e9 par d\u00e9faut) et s&rsquo;achever au dernier secteur (propos\u00e9 par d\u00e9faut lui aussi) :<\/p>\n<p><code>First sector (34816-7744511, default 34816):<br \/>\nUsing default value 34816<br \/>\nLast sector, +sectors or +size{K,M,G} (34816-7744511, default 7744511):<br \/>\nUsing default value 7744511<br \/>\nPartition 2 of type Linux and of size 3.7 GiB is set<\/code><\/p>\n<p>La Cubieboard ne pourra booter que sur une partition format\u00e9e en FAT. Il faut donc changer le type de partition pour sdb1 (Linux, par d\u00e9faut et comme le montre le r\u00e9sultat de la commande p pass\u00e9e plus haut).<\/p>\n<p><code>Command (m for help): <strong>t<\/strong><br \/>\nPartition number (1,2, default 2): <strong>1<\/strong><br \/>\nHex code (type L to list all codes): <strong>L<\/strong><br \/>\n[...]<\/code><\/p>\n<p><strong>e W95 FAT16 (LBA)<\/strong><\/p>\n<p>[&#8230;]<\/p>\n<p>Le code hexad\u00e9cimal pour FAT16 est e :<\/p>\n<p><code>Hex code (type L to list all codes): <strong>e<\/strong><\/code><\/p>\n<p>WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.<\/p>\n<p>Changed type of partition &lsquo;Linux&rsquo; to &lsquo;W95 FAT16 (LBA)&rsquo;<\/p>\n<p>Et voil\u00e0 le travail achev\u00e9 pour ma partition sdb1 qui est indiqu\u00e9e comme \u00e9tant de type FAT16.<\/p>\n<p>Je liste les partitions pour m&rsquo;assurer que tout est bon :<\/p>\n<p><code>Command (m for help): <strong>p<\/strong><\/code><\/p>\n<p>Disk \/dev\/sdb: 3965 MB, 3965190144 bytes, 7744512 sectors<br \/>\nUnits = sectors of 1 * 512 = 512 bytes<br \/>\nSector size (logical\/physical): 512 bytes \/ 512 bytes<br \/>\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<br \/>\nDisk label type: dos<br \/>\nDisk identifier: 0x5b0864a3<\/p>\n<p>Device Boot Start End Blocks Id System<br \/>\n\/dev\/sdb1 2048 34815 16384 e W95 FAT16 (LBA)<br \/>\n\/dev\/sdb2 34816 7744511 3854848 83 Linux<\/p>\n<p>Ma partition 2 (sdb2) est bien de type Linux.<\/p>\n<p>C&rsquo;est quasiment fini, mais rien n&rsquo;a encore \u00e9t\u00e9 r\u00e9ellement \u00e9crit sur la carte micro-SD. J&rsquo;ach\u00e8ve le partitionnement en passant la commande <code>w<\/code> :<\/p>\n<p><code>Command (m for help): <strong>w<\/strong><br \/>\nThe partition table has been altered!<\/code><\/p>\n<p>Calling ioctl() to re-read partition table.<br \/>\nSyncing disks.<\/p>\n<h4>Formatage des partitions 1 et 2 en FAT et en ext4<\/h4>\n<p>La table des partitions est au point, il reste maintenant \u00e0 formater ma partition 1 en FAT et ma partition 2 en ext4 en utilisant la commande <code>mkfs<\/code>.<\/p>\n<p>Pour la partition 1 :<\/p>\n<p><code># <strong>mkfs.vfat \/dev\/sdb1<\/strong><br \/>\nmkfs.fat 3.0.22 (2013-07-19)<\/code><\/p>\n<p>Pour la partition 2 :<\/p>\n<p><code># <strong>mkfs.ext4 \/dev\/sdb2<\/strong><br \/>\nmke2fs 1.42.8 (20-Jun-2013)<br \/>\nFilesystem label=<br \/>\nOS type: Linux<br \/>\nBlock size=4096 (log=2)<br \/>\nFragment size=4096 (log=2)<br \/>\nStride=0 blocks, Stripe width=0 blocks<br \/>\n240960 inodes, 963712 blocks<br \/>\n48185 blocks (5.00%) reserved for the super user<br \/>\nFirst data block=0<br \/>\nMaximum filesystem blocks=989855744<br \/>\n30 block groups<br \/>\n32768 blocks per group, 32768 fragments per group<br \/>\n8032 inodes per group<br \/>\nSuperblock backups stored on blocks:<br \/>\n32768, 98304, 163840, 229376, 294912, 819200, 884736<\/code><\/p>\n<p>Allocating group tables: done<br \/>\nWriting inode tables: done<br \/>\nCreating journal (16384 blocks): done<br \/>\nWriting superblocks and filesystem accounting information: done<\/p>\n<p>Une petite v\u00e9rification :<\/p>\n<p><code># <strong>lsblk -f<\/strong><br \/>\nNAME        FSTYPE LABEL UUID                                 MOUNTPOINT<\/code><\/p>\n<p>[&#8230;]<\/p>\n<p>sdb<br \/>\n\u251c\u2500sdb1 vfat 8919-F4BC<br \/>\n\u2514\u2500sdb2 ext4 dead6087-3b4d-413c-bf7b-6d03655ca31a<\/p>\n<p>[&#8230;]<\/p>\n<p>La pr\u00e9paration de la carte est termin\u00e9e\u00a0! On peut passer \u00e0 l&rsquo;installation proprement dite.<\/p>\n<h2>Installation d&rsquo;Arch Linux ARM sur la Cubieboard (avec d\u00e9marrage sur la carte micro-SD)<\/h2>\n<h3>T\u00e9l\u00e9chargement et installation du <em>bootloader<\/em> sur la partition 1 de la carte micro-SD<\/h3>\n<p>Le bootloader est sp\u00e9cifique \u00e0 la carte. Il faut le t\u00e9l\u00e9charger. Mon installation \u00e9tant r\u00e9alis\u00e9e depuis un Raspberry Pi, j&rsquo;ai cr\u00e9\u00e9 un r\u00e9pertoire temporaire <em>cubie<\/em> pour y ranger mes affaires dans <em>\/home\/root\/<\/em> et je m&rsquo;y suis d\u00e9plac\u00e9 :<\/p>\n<p><code># <strong>cd ~<\/strong><br \/>\n# <strong>mkdir cubie<\/strong><br \/>\n# <strong>cd cubie<\/strong><\/code><\/p>\n<p>Puis j&rsquo;ai t\u00e9l\u00e9charg\u00e9 la derni\u00e8re version du bootloader :<\/p>\n<p><code># <strong>wget http:\/\/archlinuxarm.org\/os\/sunxi\/cubieboard-bootloader.tar.gz<\/strong><\/code><\/p>\n<p>[&#8230;]<\/p>\n<p>2013-09-11 21:51:59 (684 KB\/s) &#8211; \u2018cubieboard-bootloader.tar.gz\u2019 saved [127367\/127367]<\/p>\n<p>J&rsquo;ai d\u00e9compress\u00e9 l&rsquo;archive et \u00ab\u00a0\u00e9crit\u00a0\u00bb le bootloader sur la patition 1 de ma carte micro-SD :<\/p>\n<p><code># <strong>tar xzf cubieboard-bootloader.tar.gz<\/strong><br \/>\n# <strong>dd if=cubieboard\/sunxi-spl.bin of=\/dev\/sdb bs=1024 seek=8<\/strong><br \/>\n19+1 records in<br \/>\n19+1 records out<br \/>\n19968 bytes (20 kB) copied, 0.0300145 s, 665 kB\/s<\/code><\/p>\n<p># <strong>dd if=cubieboard\/u-boot.bin of=\/dev\/sdb bs=1024 seek=32<\/strong><br \/>\n168+1 records in<br \/>\n168+1 records out<br \/>\n173052 bytes (173 kB) copied, 0.0760237 s, 2.3 MB\/s<\/p>\n<h3>T\u00e9l\u00e9chargement et installation du <em>syst\u00e8me de fichiers root<\/em> sur la partition 2 de la carte micro-SD<\/h3>\n<p>Il faut maintenant aller r\u00e9cup\u00e9rer le syst\u00e8me de fichiers et l&rsquo;\u00e9crire sur la partition 2 pr\u00e9c\u00e9demment format\u00e9e en ext4. Pour pr\u00e9parer l&rsquo;\u00e9criture, je cr\u00e9e deux r\u00e9pertoires temporaires pour pouvoir monter la partition de boot et la partition du syst\u00e8me de fichiers.<\/p>\n<p><code># <strong>mkdir \/tmp\/boot<\/strong><br \/>\n# <strong>mkdir \/tmp\/arch<\/strong><\/code><\/p>\n<p>Je monte ma parition 1 sur \/tmp\/boot et ma partition 2 sur \/tmp\/arch<\/p>\n<p><code># <strong>mount \/dev\/sdb1 \/tmp\/boot<\/strong><br \/>\n# <strong>mount \/dev\/sdb2 \/tmp\/arch<\/strong><\/code><\/p>\n<p>Je t\u00e9l\u00e9charge la derni\u00e8re version du syst\u00e8me de fichier :<\/p>\n<p><code># <strong>wget http:\/\/archlinuxarm.org\/os\/ArchLinuxARM-sun4i-latest.tar.gz<\/strong><\/code><\/p>\n<p>[&#8230;]<\/p>\n<p>2013-09-11 22:09:23 (580 KB\/s) &#8211; \u2018ArchLinuxARM-sun4i-latest.tar.gz\u2019 saved [157803839\/157803839]<\/p>\n<p>Je d\u00e9compresse l&rsquo;archive et j&rsquo;\u00e9cris le syst\u00e8me de fichiers sur la partition 2 de la carte (mont\u00e9e sur \/tmp\/arch) :<\/p>\n<p><code># <strong>tar -zxf ArchLinuxARM-sun4i-latest.tar.gz -C \/tmp\/arch<\/strong><\/code><\/p>\n<p>Je copie uImage pr\u00e9sent dans le r\u00e9pertoire \/boot\/ du syst\u00e8me de fichiers vers la parition 1 mont\u00e9e pr\u00e9c\u00e9demment sur \/tmp\/boot :<\/p>\n<p><code># <strong>cp \/tmp\/arch\/boot\/uImage \/tmp\/boot\/uImage<\/strong><\/code><\/p>\n<p>Je copie pour finir le fichier FEX compil\u00e9 et le fichier uEnv.txt vers la partition 1 de la carte :<\/p>\n<p><code># <strong>cp cubieboard\/cubieboard*.bin \/tmp\/boot\/<\/strong><br \/>\n# <strong>cp cubieboard\/uEnv.txt \/tmp\/boot\/uEnv.txt<\/strong><\/code><\/p>\n<p>On reviendra plus loin sur ce \u00e0 quoi servent ces fichiers et comment les manipuler.<\/p>\n<p>Une petite synchronisation et je d\u00e9monte mes deux partitions :<\/p>\n<p><code># <strong>sync<\/strong><br \/>\n# <strong>umount \/dev\/sdb1<\/strong><br \/>\n# <strong>umount \/dev\/sdb2<\/strong><\/code><\/p>\n<p>Il me reste \u00e0 extraire la carte micro-SD de mon lecteur de cartes, \u00e0 l&rsquo;ins\u00e9rer dans la Cubieboard et \u00e0 brancher l&rsquo;alimentation de la Cubieboard pr\u00e9alablement raccord\u00e9e par uhn cable ethernet \u00e0 un port de mon routeur.<\/p>\n<p>Comme je vise une installation avec administration \u00e0 distance, je n&rsquo;ai pas pr\u00e9vu de brancher d&rsquo;\u00e9cran \u00e0 la Cubieboard. SSH \u00e9tant activ\u00e9 par d\u00e9faut, il me suffit de d\u00e9terminer, en consultant la table DHCP, l&rsquo;IP que le routeur a assign\u00e9 \u00e0 la Cubieboard (le nom d&rsquo;h\u00f4te par d\u00e9faut est alarm).<\/p>\n<p>Le login de l&rsquo;administrateur est root<br \/>\nLe mot de passe par d\u00e9faut est root.<\/p>\n<p>Depuis un client SSH (sous Linux en mode console dans mon cas), je me connecte \u00e0 la Cubieboard :<\/p>\n<p><code><strong>ssh root@192.168.X.X<\/strong><\/code><\/p>\n<p>et je saisis le mot de passe <em>root<\/em>.<\/p>\n<p>Et si tout s&rsquo;est bien pass\u00e9, je dois obtenir dans mon terminal :<\/p>\n<p><code>[root@alarm ~]#<\/code><\/p>\n<p>L&rsquo;installation \u00e0 proprement parler est termin\u00e9e. Il me reste quelques compl\u00e9ments pour que le syst\u00e8me soit \u00e0 jour.<\/p>\n<h3>Pour achever l&rsquo;installation d&rsquo;Arch Linux<\/h3>\n<h4>Changement du mot de passe de l&rsquo;administrateur<\/h4>\n<p><code># <strong>passwd<\/strong><br \/>\nEnter new UNIX password:<br \/>\nRetype new UNIX password:<br \/>\npasswd: password updated successfully<\/code><\/p>\n<h4>Mise \u00e0 jour de la distribution<\/h4>\n<p><code><strong>pacman -Syu<\/strong><\/code><\/p>\n<h2>Compl\u00e9ments et optimisations de l&rsquo;installation d&rsquo;Arch Linux sur la Cubieboard<\/h2>\n<h3>D\u00e9finir le bon fichier FEX dans l&rsquo;environnement U-Boot<\/h3>\n<h4>Mais qu&rsquo;y-a-t-il dans la partition de boot (<em>\/dev\/mmcblk0p1<\/em>) ?<\/h4>\n<p>Pour explorer la partition de boot, montons-la sur le r\u00e9pertoire temporaire cr\u00e9\u00e9 pr\u00e9c\u00e9demment :<\/p>\n<p><code># <strong>mount \/dev\/mmcblk0p1 \/mnt\/tmp<\/strong><\/code><\/p>\n<p>et regardons ce qu&rsquo;il y a dedans :<\/p>\n<p><code># <strong>cd \/mnt\/tmp<\/strong><br \/>\n# <strong>ls<\/strong><\/code><\/p>\n<p>On trouve \u00e0 la racine de la partition de boot les fichiers suivants :<\/p>\n<p><code>cubieboard_512.bin<br \/>\ncubieboard.bin<br \/>\nuEnv.txt<br \/>\nuImage<\/code><\/p>\n<p>Les fichiers .bin correspondent aux fichiers de configuration de la carte Cubieboard. Comme pour tous les \u00e9quipements bas\u00e9s sur le SoC Alwinner A10, ces fichiers de configuration sont des binaires <a title=\"Barbara Thompson\" href=\"http:\/\/linux-sunxi.org\/Fex_Guide#FEX_Description\">FEX<\/a>. Pour les \u00e9diter, il faut utiliser deux utilitaires qui permettent de convertir un binaire en fichier FEX lisible et vice versa : il s&rsquo;agit de <em>fex2bin<\/em> et <em>bin2fex<\/em>. Ces utilitaires sont disponibles dans le paquet <em>sunxi-tools<\/em> disponible dans le d\u00e9p\u00f4t <em>alarm<\/em>.<\/p>\n<p>Nous les utiliserons tout \u00e0 l&rsquo;heure, aussi allons-nous monter d\u00e8s maintenant le paquet <em>sunxi-tools<\/em> :<\/p>\n<p><code><strong>pacman -S sunxi-tools<\/strong><\/code><\/p>\n<h4>Introduire les bons param\u00e8tres dans le fichier <em>uEnv.txt<\/em><\/h4>\n<p>Le fichier uEnv.txt contient de mani\u00e8re lisible les param\u00e8tres de l&rsquo;environnement U-Boot. Le nom du fichier binaire FEX utilis\u00e9 au d\u00e9marrage de la carte y est d\u00e9fini. Par d\u00e9faut, c&rsquo;est cubieboard_512.bin, qui est d\u00e9di\u00e9 \u00e0 la premi\u00e8re version de la Cubieboard 1, qui n&rsquo;\u00e9tait \u00e9quip\u00e9e que de 512\u00a0Mo de RAM. Pour la derni\u00e8re r\u00e9vision de la Cubieboard 1, dot\u00e9e d&rsquo;1\u00a0Go de RAM, il faut utiliser cubieboard.bin.<\/p>\n<p>Pour que le bon FEX binaire soit utilis\u00e9 au d\u00e9marrage, il faut \u00e9diter le fichier uEnv.txt<\/p>\n<p><code># <strong>nano uEnv.txt<\/strong><\/code><\/p>\n<p>et remplacer :<\/p>\n<p><code>fexfile=cubieboard_512.bin<\/code><\/p>\n<p>par :<\/p>\n<p><code>fexfile=cubieboard.bin<\/code><\/p>\n<h3>Affecter une adresse MAC fixe \u00e0 la Cubieboard<\/h3>\n<h4>Probl\u00e8me : par d\u00e9faut, l&rsquo;adresse MAC de la Cubieboard change \u00e0 chaque d\u00e9marrage<\/h4>\n<p>Comme je souhaite administrer la Cubieboard \u00e0 distance (installation <em>headless<\/em>, il faut, pour me connecter \u00e0 la machine en SSH, que je connaisse son adresse IP dans le r\u00e9seau local. Il est possible de configurer le routag statique du routeur et d&rsquo;attribuer \u00e0 la carte une IP fixe, mais je pr\u00e9f\u00e8re que l&rsquo;IP soit attribu\u00e9e dynamiquement, comme pour mes autres machines connect\u00e9es au routeur, par le serveur DHCP, en r\u00e9servant une adresse \u00e0 la Cubieboard, ce qui revient au m\u00eame puisqu&rsquo;elle se verra attribuer toujours la m\u00eame adresse IP.<\/p>\n<p>Mais il y a un petit probl\u00e8me \u00e0 r\u00e9soudre : pour d\u00e9clarer une r\u00e9servation DHCP, il faut que l&rsquo;adresse MAC de la Cubieboard soit toujours la m\u00eame, et par d\u00e9faut, ce n&rsquo;est pas le cas. Comme <a href=\"http:\/\/linux-sunxi.org\/EMAC\">expliqu\u00e9 en anglais ici<\/a>, le syst\u00e8me sur puce (Soc) Allwinner A10 qui \u00e9quipe la Cubieboard est dot\u00e9 d&rsquo;une unit\u00e9 MAC appel\u00e9e EMAC dont le pilote attribue par d\u00e9faut \u00e0 la carte une adresse MAC al\u00e9atoire. A chaque d\u00e9marrage, l&rsquo;<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Adresse_MAC\">adresse MAC<\/a> de la carte change donc, ce qui est incompatible avec la r\u00e9servation DHCP.<\/p>\n<h4>Solution : \u00e9diter le fichier de configuration FEX<\/h4>\n<p>Pour corriger ce comportement, la m\u00e9thode que j&rsquo;ai utilis\u00e9e (il y en a d&rsquo;autres) consiste \u00e0 modifier le fichier binaire FEX qui contient les param\u00e8tres de configuration du d\u00e9marrage.<\/p>\n<p>Il est de bonne pratique de faire une copie de pr\u00e9caution des fichiers que l&rsquo;on va manipuler, pour pouvoir revenir en arri\u00e8re si on fait une bourde :<\/p>\n<p><code># <strong>cp cubieboard.bin cubieboard.bin.bak<\/strong><\/code><\/p>\n<p>Pour lire et \u00e9diter le fichier de configuration, il faut convertir le binaire en FEX avec l&rsquo;utilitaire <em>bin2fex<\/em> install\u00e9 pr\u00e9c\u00e9demment avec le paquet sunxi-tools :<\/p>\n<p><code># <strong>bin2fex cubieboard.bin cubieboard.fex<\/strong><\/code><\/p>\n<p>Une petite copie de pr\u00e9caution avant de bidouiller le fichier FEX :<\/p>\n<p><code># <strong>cp cubieboard.fex cubieboard.fex.bak<\/strong><\/code><\/p>\n<p>On \u00e9dite le fichier FEX :<\/p>\n<p><code># <strong>nano cubieboard.fex<\/strong><\/code><\/p>\n<p>et, \u00e0 la fin du fichier, on rajoute les deux lignes suivantes :<br \/>\n<code><br \/>\n[dynamic]<br \/>\nMAC = \"XXXXXXXXXXXX\"<\/code><\/p>\n<p>o\u00f9 <em>XXXXXXXXXXXX<\/em> correspond \u00e0 l&rsquo;adresse MAC fixe que pr\u00e9sentera d\u00e9sormais la Cubieboard. Il para\u00eet pr\u00e9f\u00e9rable d&rsquo;utiliser l&rsquo;une des adresses attribu\u00e9es au hasard par EMAC, rep\u00e9rable par exemple dans la table des clients DHCP du routeur (il s&rsquo;agit de 6 paires de caract\u00e8res sans les : entre chaque paire).<\/p>\n<p>On sauvegarde cubieboard.fex et on le convertit en binaire avec l&rsquo;utilitaire <em>fex2bin<\/em> :<\/p>\n<p><code># <strong>fex2bin cubieboard.fex cubieboard.bin<\/strong><\/code><\/p>\n<p>Un petit coup de synchronisation, on d\u00e9monte la partition de boot :<\/p>\n<p><code># <strong>sync<\/strong><br \/>\n# <strong>cd ~<\/strong><br \/>\n# <strong>umount \/dev\/mmcblk0p1<\/strong><\/code><\/p>\n<p>On red\u00e9marre ( <code>shutdown -r now<\/code> ) , et oh, stupeur ! ;-) , l&rsquo;adresse MAC de la Cubieboard est la m\u00eame que celle indiqu\u00e9e pr\u00e9c\u00e9demment sous [dynamic] dans cubieboard.fex. il ne reste qu&rsquo;\u00e0 d\u00e9finir une r\u00e9servation DHCP pour que la m\u00eame IP lui soit affect\u00e9e \u00e0 chaque connexion au routeur.<\/p>\n<p>C&rsquo;est fini : la Cubieboard est op\u00e9rationnelle et Arch Linux ARM install\u00e9.<\/p>\n<p><a name=\"sources\"><\/a>Sources utilis\u00e9es :<\/p>\n<ul>\n<li><a href=\"http:\/\/archlinuxarm.org\/platforms\/armv7\/allwinner\/cubieboard\">Le guide d&rsquo;installation fourni sur le site Web d&rsquo;Ach Linux ARM<\/a><\/li>\n<li>Pour le partitionnement et le formatage de la carte micro-SD : <a href=\"http:\/\/abhinavgupta2812.wordpress.com\/2013\/08\/24\/installing-a-customized-debian-on-the-cubieboard\/\">Interstellar Overdrive : Installing a customized Debian on the Cubieboard<\/a>.<\/li>\n<li>Pour la solution au probl\u00e8me de l&rsquo;adresse MAC al\u00e9atoire : <a href=\"http:\/\/andre.blaatschaap.be\/2013\/01\/installing-archlinuxarm-on-the-cubieboard\/\">Andr\u00e9&rsquo;s blog : Installing ArchLinux ARM on the CubieBoard<\/a> et <a href=\"http:\/\/linux-sunxi.org\/EMAC\">la page consacr\u00e9e \u00e0 EMAC sur le Wiki linux-sunxi.org<\/a>.<\/li>\n<\/ul>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 faire part de vos remarques et commentaires, ou \u00e0 me signaler les in\u00e9vitables erreurs qui se sont gliss\u00e9es dans ce relev\u00e9 d&rsquo;installation.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9crit les \u00e9tapes d&rsquo;une installation d&rsquo;Arch Linux ARM sur la carte Cubieboard avec d\u00e9marrage sur la carte micro-SD.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[395],"tags":[249,329,250,206],"class_list":["post-1847","post","type-post","status-publish","format-standard","hentry","category-bidouillages","tag-archlinux","tag-cubieboard-3","tag-installation","tag-linux"],"share_on_mastodon":{"url":"","error":""},"_links":{"self":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/1847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/comments?post=1847"}],"version-history":[{"count":33,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/1847\/revisions"}],"predecessor-version":[{"id":4659,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/1847\/revisions\/4659"}],"wp:attachment":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/media?parent=1847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/categories?post=1847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/tags?post=1847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}