Grand jour, après une attente interminable de plus d’un mois, je viens de recevoir mon Orange Pi Plus équipée d’un SoC Allwinner H3 quad core ARMv7. Mon choix s’est orienté vers ce modèle en raison de la puissance CPU, d’une interface Gigabit Ethernet, d’une mémoire eMMC de 8GB intégrée, des 4 ports USB, des 40 pins GPIO et du module WIFI, enfin tout ce qui manquait à ma Raspberry Pi A, première génération qui me sert actuellement comme station Airport pour écouter de la musique sur ma chaine HiFi avec un DAC Sabre ES9023 I2S d'Audiophonics que je recommande fortement. J’utilise aussi ma Raspberry Pi pour faire des relevés de températures et d’humidité à l’aide à plusieurs capteurs I2C et 1-Wire. J’avais d’autres projets et tête, comme la mise en place d’un système de relais commandés via I2C pour faire un ersatz de centre de contrôle domotique, et l’ajout de plusieurs mini-écrans OLED également contrôlés en I2C, mais cela fera certainement partit d’un autre post. Enfin, compte tenu des limitations de de la première Raspberry Pi, je me suis orienté vers une Orange Pi au lieu d’une Raspberry Pi 2 car le rapport qualité-prix penchait largement en faveur de l’Orange Pi (49$). Le seul défaut, la communauté est beaucoup plus limitée, les ressources moins importantes, ce qui vous obligera à mettre les mains dans le cambouis. Orange Pi View

Note

Dans ce tutoriel, je me contenterai de décrire les étapes qui m’ont permis de rendre l’OrangePi fonctionnelle sous Arch Linux avec un ordinateur sous OSX. Les commandes fournies pour copier l’image système sur la carte mircroSD sont quasiment compatible avec les distributions Linux. Si vous utilisez un ordinateur sous Windows, il faudra vous renseigner sur la procédure à suivre sous Windows. Cette étape est très bien expliquée sur les tutoriaux pour Raspberry Pi. Pour l’utilisation de l’adaptateur UART, vous pouvez utiliser n’importe quel terminal de port série (PuTTY par example).  

Checklist

Pour la mise en place de l’Orange Pi Plus, il est nécessaire d’utiliser le câble d’alimentation fourni (USB vers prise d’alimentation coaxiale) avec une alimentation (non fournie) un peu pêchu, 2000mA doivent normalement suffire. Il est également nécessaire d’avoir une carte microSD, attention, les cartes bas de game ne sont pas toujours compatibles car elles ne supportent pas les partitions de boot. Une fois que vous avez tous les éléments il ne vous manque plus que l’image de boot. Fort heureusement, il y pléthore de choix d’image prêtes à l’usage sur orangepi.org. Mon choix s’est orienté vers Arch Linux, une distribution minimaliste avec une bonne communauté et proche de Debian, qui est ma distribution favorite pour un serveur et avec laquelle je possède le plus d’expérience. Il vous faudra également un adaptateur UART / USB, je recommande les adaptateurs avec une puce CP2102 STC en vente sur ebay, ils sont très stables.

  • Orange Pi Plus (obviously)
  • Câble d’alimentation coaxial
  • Alimentation USB de plus d'1,5A (je conseille 2000mA)
  • Carte microSD d’au moins 2GB (attention aux cartes low cost qui ne supportent pas le boot)
  • Un ordinateur avec la possibilité de lire la carte mircoSD
  • Adaptateur UART / USB
  • Câble Ethernet en option si vous le souhaitez
  • Une distribution Linux téléchargée l’espace mega.nz d’orangepi.org  

Décompression de l’image système

A ma grande déception, l’image fournie n’est pas compressée dans un format standard. L’extension est XZ, mais tar ne semblait pas capable de décompresser le fichier (tar: Unrecognized archive format) … En regardant de plus près, le fichier contient un header indiquant 7zXZ. Clairement le fichier à été compressé avec 7-Zip. Sur mac, il m’a simplement fallu installer le paquet p7zip.

$sudo port install p7zip

La décompression se réalise ensuite sans problème.

$7za e ArchLinux_Minimal.img.xz

Copie de l’image système

Il vous faut maintenant une carte microSD disponible, prête à être formatée. Attention, cette étape efface toutes de données sur la carte. Personnellement je ne formate pas la carte avant de copier l’image système, il n’y a pas vraiment d’intérêt. Pour repérer le nom de la carte j’utilise diskutil list.

$diskutier list 
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.9 GB    disk3
   1:             Windows_FAT_32 NO NAME                 31.9 GB    disk3s1

D’abord je démonte la partition disk3s1, si la carte SD contient d’autres partitions, il est nécessaire de les démonter également.

$sudo amount /dev/disk3s1

L’identifiant de la carte est disk3, mais pour la copie sur OSX, j’utilise rdisk3, qui permettra une copie plus rapide. J’utilise également une un block-size de 1 méga. La commande est donc:

sudo dd if=ArchLinux_Minimal.img of=/dev/rdisk bs=1m
sudo sync

Attention, sur linux l’option block-size utilise des majuscules pour la taille, sur OSX, ce sont des minuscules. Seulement 30 secondes plus tard, la copie est terminée. Le moment de vérité est arrivé. Je vérifie que la copie a fonctionné:

$diskutier list 
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.9 GB    disk3
   1:                 DOS_FAT_32 BOOT                    67.1 MB    disk3s1
   2:                      Linux                         1.1 GB     disk3s2

On peut voir la disparition de l’ancienne partition et l’apparition de 2 nouvelles partitions. Une partition de boot de 67.1 MB (disk3s1), et une seconde partition de 1.1GB (disk3s2).

Vous pouvez maintenant éjecter le disque:

$sudo diskutil eject /dev/disk3

Débuggage via UART

Après insertion de la carte microSD dans l’Orange Pi, la connexion d’un câble Ethernet à mon routeur, la mise sous tension et l’appuie sur le bouton Power (à côté de la prise d’alimentation), je m’attendais à voir apparaître sur l’interface du routeur l’Orange Pi. Malheureusement, cela n’est pas arrivé. Fort heureusement, l’Orange Pi dispose de 3 pins UART, permettant le débuggage. J’utilise screen pour afficher les informations de débuggage.  

$screen /dev/tty.SLAB_USBtoUART 115200

Et là magie, les infos de boot apparaissent :

Arch Linux 3.4.39 (ttyS0)
OrangePi login:

Après plusieurs essais, je trouve facilement login et mot de passe: orangepi

OrangePi login: orangepi
Password:
Last login: Mon Oct 19 13:36:11 on tty1
[orangepi@OrangePi ~]$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 5 (v7l)
processor       : 0
BogoMIPS        : 1920.00
 
processor       : 1
BogoMIPS        : 1920.00
 
processor       : 2
BogoMIPS        : 1920.00
 
processor       : 3
BogoMIPS        : 1920.00
 
Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5
 
Hardware        : sun8i
Revision        : 0000
Serial          : 34005034050c243902ce

Je vérifie la connexion Ethernet:

[root@OrangePi orangepi]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 16436
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 320  bytes 25280 (24.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 320  bytes 25280 (24.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 58:63:56:8b:82:d8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
wlan1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 5a:63:56:8b:82:d8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Pas d’interface Ethernet ?  

[root@OrangePi orangepi]# ifconfig -a
eth0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether ea:54:63:ae:a5:8c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 114 
 
gre0: flags=128<NOARP>  mtu 1476
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 0 (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
ip6tnl0: flags=128<NOARP>  mtu 1452
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 0 (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 16436
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 320  bytes 25280 (24.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 320  bytes 25280 (24.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
sit0: flags=128<NOARP>  mtu 1480
        sit  txqueuelen 0  (IPv6-in-IPv4)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
tunl0: flags=128<NOARP>  mtu 1480
        tunnel   txqueuelen 0  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 58:63:56:8b:82:d8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
wlan1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 5a:63:56:8b:82:d8  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

L’interface Ethernet semble bien présente, mais pas active. Je démarre donne donc vie à l’interface

[root@OrangePi orangepi]# ifconfig eth0 up
[root@OrangePi orangepi]# ifconfig eth0 10.0.0.2/24

Malheureusement, l’interface ne semble toujours pas ‘up’ puisque ifconfig ne l’affiche pas. J’ajoute une configuration de base avec une adresse statique.  

[root@OrangePi orangepi]# vi /etc/netctl/eth0
Description='Interface Ethernet eth0'
Interface=eth0
Connection=ethernet
IP=static
Address=('10.0.0.2/24')
Gateway=(‘10.0.0.1’)
DNS=('8.8.8.8')

Malheureusement, cela ne semble pas fonctionner:

[root@OrangePi orangepi]# netctl start eth0
Job for netctl@eth0.service failed because the control process exited with error code. See "systemctl status netctl@eth0.service" and "journalctl -xe" for details.

Hum Hum, ça me laisse perplexe.

[root@OrangePi orangepi]# systemctl -l status netctl@eth0.service
* netctl@eth0.service - Networking for netctl profile eth0
   Loaded: loaded (/usr/lib/systemd/system/netctl@.service; static; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2015-10-19 15:06:02 UTC; 50s ago
     Docs: man:netctl.profile(5)
  Process: 1750 ExecStart=/usr/lib/network/network start %I (code=exited, status=1/FAILURE)
Main PID: 1750 (code=exited, status=1/FAILURE)
 
Oct 19 15:05:56 OrangePi systemd[1]: Starting Networking for netctl profile eth0...
Oct 19 15:05:56 OrangePi network[1750]: Starting network profile 'eth0'...
Oct 19 15:06:02 OrangePi network[1750]: Failed to bring interface 'eth0' up
Oct 19 15:06:02 OrangePi systemd[1]: netctl@eth0.service: Main process exited, code=exited, status=1/FAILURE
Oct 19 15:06:02 OrangePi network[1750]: Failed to bring the network up for profile 'eth0'
Oct 19 15:06:02 OrangePi systemd[1]: Failed to start Networking for netctl profile eth0.
Oct 19 15:06:02 OrangePi systemd[1]: netctl@eth0.service: Unit entered failed state.
Oct 19 15:06:02 OrangePi systemd[1]: netctl@eth0.service: Failed with result 'exit-code'.

Un reboot ne change rien. Le problème semble plus profond.

[root@OrangePi orangepi]# dmesg
[ 1041.150825] gmac0 gmac0: eth0: eth0: PHY ID 00000000 at 0 IRQ poll (gmac0-0:00)
[ 1041.161018] gmac0 gmac0: eth0: Initialize hardware error

En effet. Après quelques recherches, il faut faire une mise à jour. Sur le dépôt mega.nz il y a un fichier scriptbin_kernel.tar à télécharger. Le plus simple est de copier le fichier sur une clé USB et de connecter la clé USB à l’Orange Pi. Ensuite sur l’Orange Pi:

mkdir /media/usb
mount /dev/sdb1 /media/usb
mkdir scriptbin
tar -xvf  /media/usb/scriptbin_kernel.tar.gz -C ./scriptbin
cd scriptbin
cp -v script.bin.OPI-PLUS_* orange_pi_plus.fex /boot
cp -v uImage_OPI-PLUS /boot/uImage
for file in $(find lib/ -type f); do cp -v ${file}  /${file};done;
reboot

BINGO, l'interfece Ethernet est fonctionnelle

Installation sur la mémoire eMMC

Pour cela il y a un script. Mais d'abord, il faut installer 2 paquets supplémentaires, sinon ça ne marchera pas, croyez-moi. Le script est mal conçu et ne permet pas d’afficher les messages d'erreur, pas vraiment cool.

[root@OrangePi scriptbin]# pacman -S parted dosfstools
[root@OrangePi scriptbin]# install_to_emmc
[root@OrangePi scriptbin]# sync
[root@OrangePi scriptbin]# halt

Une fois le système 'halted', j’enlève la carte microSD, débranche et rebranche.

Bingo, le système démarre!

[root@OrangePi orangepi]# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             10M     0   10M   0% /dev
tmpfs           201M  392K  201M   1% /run
/dev/mmcblk0p2  7.1G  1.1G  5.7G  16% /
tmpfs           502M     0  502M   0% /dev/shm
tmpfs           502M     0  502M   0% /sys/fs/cgroup
tmpfs           502M     0  502M   0% /tmp
/dev/mmcblk0p1   64M   22M   43M  34% /media/boot
tmpfs           101M     0  101M   0% /run/user/1000

Mise à jour du système

pacman -Syu

Et une installation des éléments essentiels:

pacman -S base-devel screen htop vim wireless_tools

Changement du nom d'utilisateur

Se déconnecter complètement en faisant Ctrl+D puis me log en tant que root (mdp orangepi) puis je modifie le nom d’utilisateur par défaut et le mot de passe:

[root@OrangePi orangepi]# exit
[orangepi@OrangePi ~]$ logout
Arch Linux 3.4.39 (ttyS0)
OrangePi login: root
Password:
[root@OrangePi ~]# usermod -l nom_utilisateur orangepi
[root@OrangePi ~]# cd /home
[root@OrangePi home]# mv orangepi nom_utilisateur
[root@OrangePi ~]# passwd nom_utilisateur

Enfin, modifier /etc/passwd pour modifier le chemin du $HOME de l’utilisateur.

[root@OrangePi ~]# vipw
nom_utilisateur:1000:100::/home/nom_utilisateur:/bin/bash

Et voilà, une Orange Pi fonctionnelle.

Je termine par une anecdote: le site que vous lisez est actuellement hébergé sur cette Orange Pi Plus.

  • Share

Comments

Quiévreux Julien 1 year, 6 months ago

Super article, qui montre bien la faiblesse et la puissance de l'orange pi actuellement.
Du matériel au top, mais un suivi côté software quasi absent.

Heureusement des bidouilleurs sont à la rescousse :) Merci grâce à cette article j'ai une connexion internet sur le mien !

Link | Reply

Comment awaiting approval 7 months, 1 week ago

Comment awaiting approval 6 months, 3 weeks ago

Comment awaiting approval 6 months, 3 weeks ago

Comment awaiting approval 6 months, 3 weeks ago

Comment awaiting approval 5 months, 4 weeks ago

Comment awaiting approval 5 months, 4 weeks ago

Comment awaiting approval 5 months, 4 weeks ago

Comment awaiting approval 1 month, 2 weeks ago

Vrong 1 year, 5 months ago

Bonjour,
Un article intéressant, en attendant que le soft s'améliore.
Aussi, avez-vous réussi à utiliser l'accélération matérielle sur ArchLinux ?

Link | Reply

Letroll 1 year, 4 months ago

c'est la chose qui me manque aussi, si vous avancez sur cette partie, je suis preneur si vous avez des informations et/ou des conseils à partager!

Link | Reply

Yoann 1 year, 4 months ago

Bonjour,

Je n'utilise pas les fonctions graphiques de l'Orange Pi, je n'ai pas regardé.

Faites attention, il y a une backdoor dans les sources du noyau Linux Allwinner. Apparemment, un oubli des développeurs. N'importe quel utilisateur peut faire:
"echo rootmydevice > /proc/sunxi_debug/sunxi_debug"
et devenir root!

Il faut appliquer le patch suivant et recompiler le noyau.

Link | Reply

Yoann 1 year, 4 months ago

Lien du patch:

https://github.com/friendlyarm/h3_lichee/commit/5d4d02b1c8f336ba002eed4d97dee3a51ea76cdd

Link | Reply

letroll 1 year, 1 month ago

Merci pour l'info !

Link | Reply

DA SILVA Monica 7 months, 1 week ago

Bonjour. Je viens de lire des articles sur Orange Pi et totalement nocive sur le sujet mais très intéressée. Est il toujours intéressant d'acheter Orange Pi si côté Soft c'est moins bien suivi qu'avec un raspberry Pi?

Link | Reply

Yoann 7 months, 1 week ago

Bonjour,
Si vous êtes novice, je vous recommande grandement un Raspberry Pi, la communauté est beaucoup plus active, vous trouverez plus d'informations et de ressources aussi bien en français qu'en anglais.

Link | Reply

New Comment

* Merci de remplir les champs obligatoires!