PortaMesh

De TMR0.fr
Aller à la navigation Aller à la recherche

Le PortaMesh est un "téléphone portable" équipé, entre autre, d'une radio LoRa lui permettant de se connecter au réseau maillé Meshtastic.

Portamesh (revision 0)

Spécifications techniques

Catégorie Référence Fonctionnalités / Notes
CPU Allwinner T113-s3/-s4 2x ARM Cortex-A7 @ 1Ghz (208Mhz idle et 1.2Ghz Overclock - 1.6Ghz possible)

+ 1x DSP HiFi4 (non utilisé pour l'instant)

+ 1x RiscV (-s4 uniquement. Non utilisé pour l'instant)

Pas de GPU 3D. GPU 2D (G2D + VE + DE) non utilisé.

Décodeur vidéo hardware (H264).

RAM 128 Mo (-s3) / 256 Mo (s4) DDR3 intégrée au SoC
LoRA SX1262 +22dbm
WiFi RTL8723DS WiFi4 - 2.4Ghz

150Mbps théorique. 40Mbps max (limité par CPU ?)

Bluetooth RTL8723DS Bluetooth 4.2 + BLE
IMU TDK ICM-20948 9 axes : Accéléromètre + Gyroscope + Boussole

Sujet à changement pour rev.1

GPS YIC51009EBGG-33 Basé sur chipset MTK

Marche mal dans la rev.0 PCB (mauvaise implémentation PCB ? Placement Antenne ?)

Batterie 2000 ~4000 mAh Un à deux jours d'autonomie (écran souvent éteint, wifi et LoRa allumé, BT+GPS éteint) selon batterie.

Gouverneur CPU "conservative" (208Mhz la majorité du temps, ~1Ghz quand refresh UI).

Pas de "vraie" veille actuellement, donc autonomie ne peux qu'augmenter lorsque la veille/suspend-to-ram sera implémentée.

LCD 480p 5" tactile 800x480 5" 60 Hz IPS

Couleurs 18 bits (RGB666)

Tactile capacitif 5 points (10 ?)

OLED 128x32 0.96"? Pour notifications et utilisation "en poche".
Boutons 4+1 4 boutons utilisateurs en façade + 1 bouton "power".

Boutons en façade rétroéclairés LEDs vertes

Bouton "power" rétroéclairé par LEDs RGB (non fonctionnel car erreur de schéma :( )

Stockage Carte SD Compatible SDHC/SDXC (testé jusqu'à 64Go)

Contient le bootloader, l'OS et les données utilisateurs.

OS Linux Distribution Linux basée sur Buildroot (pour fonctionnalités de base)

+ environnement Debian (chroot) pour s'amuser.

Logiciel

Le PortaMesh exécute un système d'exploitation basé sur un noyau Linux (quasi-mainline) et un serveur graphique X11. Le tout est amorcé par le bootloader U-Boot (également quasi-mainline).

La pile logicielle s'approche plus de celle d'un PC classique que d'un système embarqué classique.

Le logiciel du Portamesh est encore en cours de développement et est loin de final. Tout est sujet à changement !

Néanmoins, si vous souhaitez le tester ou participer au développement*, vous pouvez compiler le code source en suivant les instructions ci-dessous.

*(en supposant que vous ayez accès au matériel, un émulateur n'étant pas encore disponible)

Compilation depuis les sources

Pré-requis

Un système d'exploitation Linux est obligatoire pour compiler le système. La compilation a été testée sur Debian 12, qui est notre environnement de développement actuel. Si vous utilisez Windows, vous pouvez compiler dans une machine virtuelle Debian. WSL n'as pas encore été essayé.

Un minimum de 8 Go de RAM est recommandé. Plus de RAM vous permet d'utiliser plus de threads de compilation parallèles pour réduire le temps de compilation.

Un minimum de 20 Go de stockage est a prévoir. Un SSD rapide est préférable.

Une connexion internet très haut débit sans comptage de la conso (pas un forfait mobile !), préférablement fibre ou Docsis est préférable pour l'étape de téléchargement.

Il n'y a pas de prérequis pour le CPU, mais pour des temps de compilation raisonnables, un processeur >8 threads @ >3Ghz est préférable.

Une carte micro SD de >1Go pour le PortaMesh.

Préparations

Si ce n'est pas déjà le cas, installez les paquets de développement "essentiels" de votre distribution Linux. Sur Debian (12) cela correspond à :

sudo apt install build-essentials git git-lfs perl unzip rsync binutils make python libncurses5-dev

Ensuite, dans un répertoire de votre choix, et dont le chemin ne contient pas d'accents, créez un dossier dans lequel s'effectuera toute la compilation. Par exemple, à la racine du dossier utilisateur, nous créons un dossier nommé "portamesh-buildroot" :

cd ~
mkdir portamesh-buildroot
cd portamesh-buildroot

Une fois le dossier créé, nous pouvons passer à la récupération du code source.

Récupération du code source

Le code source est hébergé sur Github et séparé en plusieurs dépôts :

Ces différentes parties sont reliées par la fonctionnalité de "Customisation externe" (BR2_EXTERNAL) de Buildroot. Une fois liées, la compilation du système d'exploitation entraîne automatiquement la compilation des deux autres éléments.

Dans le dossier précédemment créé, cloner les dépôts ci-dessus :

git clone https://github.com/Turion64/PortaMesh-buildroot
git clone -b gui-x11 https://github.com/Turion64/buildroot-meshtastic.git
# TODO : dépots TMR0

Entrez ensuite dans le dossier "Portamesh-buildroot" :

cd Portamesh-buildroot/buildroot
Configuration initiale

Lors de la première utilisation, il est nécessaire de charger la configuration Buildroot correspondant au Portamesh.

Comme toutes les actions dans Buiildroot, cela se fait avec la commande "make". Ici, pour charger la configuration du PortaMesh équipé d'un CPU Allwinner T113-s3/-s4 :

make tmr0fr_porta_mesh_t113_defconfig

NOTE: Vous pouvez exécuter la commande ci-dessus pour repartir d'une configuration "propre" (oublier toutes vos modifications non sauvegardées) à n'importe quel moment.

Ensuite, vous pouvez ouvrir le menu de configuration en activant les "Customisations externes".

La variable "BR2_EXTERNAL" indique le/les chemin vers les dossiers de customisations. Les chemins peuvent être relatifs ou absolus (TODO : tester relatif). Plusieurs dossiers peuvent être spécifiés en les séparant d'un ":".

make BR2_EXTERNAL=./../../buildroot-meshtastic/ menuconfig

Un menu s'ouvre. Vérifiez la présence de l'entrée "External Options" ! Si elle n'y est pas, la compilation sera incomplète, vérifiez que vous n'avez pas oublié une étape.

Pour l'instant, on ne modifie rien, avec les flèches du clavier se rentre sur le bouton "Exit" et valider si la sauvegarde de la configuration si la question est posée.

Compilation

Enfin, on peut lancer la compilation avec la commande :

make -j4

L'argument de "-j" : 4 peut être remplacé par le nombre de threads/cores de votre CPU. Un plus grand nombre permet une compilation plus rapide mais augmente l'utilisation mémoire !

Buildroot va alors télécharger le code source du compilateur, le compiler, puis télécharger le code source des paquets et les compiler à leur tour. Les étapes de téléchargement peuvent être extrêmement longues selon votre connexion internet. Cette étape ne sera effectuée qu'une seule fois.

L'étape de compilation peut prendre plusieurs heures lorsqu'aucun paquet n'as précédemment été compilé, et quelques secondes lors de la compilation d'un seul paquet.

NOTE: Si la compilation échoue (avec ou sans erreur), essayer une nouvelle fois "make", potentiellement en allouant moins de cœurs. En effet, la compilation peut s’arrêter par manque de RAM car Linux tue le compilateur, ce qui n'affiche pas tout le temps une erreur ou donne des erreurs n'ayant aucun sens. Relancer le processus avec plus de RAM libre ou moins de cœurs alloués peut résoudre le problème.

Flash de l'image

Après la compilation, si celle-ci a fonctionné, Buildroot crée une image disque prête à être flashée sur une carte SD.

Celle ci se trouve dans le dossier "output/images". On peut la flasher sur la carte SD avec dd. Faire extrêmement attention au disque de destination pour ne pas effacer votre disque dur !

SDDEVICE=/dev/mmcblkX; \
sudo dd if=./output/images/sdcard.img of=$SDDEVICE bs=1M status=progress conv=sync
sync

Remplacer /dev/mmcblkX par le nom du blockdevice de votre carte SD. Celui-ci peut être obtenu en observant la sortie de la commande "sudo dmesg -wH" et en ejectant-insérant la carte SD : les messages parlerons d'un "/dev/sdX" ou "/dev/mmcblkX".

Il est également possible d'utiliser un outil de flash graphique tel que "Raspberry Pi Imager".

Démarrage

Une fois la carte SD flashée, l'insérer dans le Portamesh, et appuyer pendant 2s sur le bouton "power" dans le coin supérieur droit.

Au bout d'une dizaine de secondes, un écran de démarrage dévrait s'afficher.

Si le PortaMesh ne démarre pas, considérer les options suivantes :

  • La carte SD est vide/corrompue : l'insérer de nouveau dans le PC linux et vérifier l'existance des partitions ext4 : boot et userdata. Essayer de les monter et vérifier leur contenu. Dans le doute, essayer de reflasher.
  • La carte SD n'est pas compatible. La bootROM du CPU peut ne pas apprécier certaines cartes SD. Le problème s'est déjà manifesté avec certaines Sandisk de 64 Go.
  • Le PortaMesh a été allumé sans carte SD : Si le PortaMesh est allumé sans qu'une carte valide SD soit insérée, il plante silencieusement mais reste "allumé" et ne répond plus au bouton "power" : maintenir le bouton "power" pendant 15s et ressayer de l'allumer (avec une carte SD valide, cette fois ci :))
  • Le PortaMesh est déchargé. (ça peut paraitre con, mais on sait jamais) : essayer de le mettre en charger. Lorsqu'il est éteint et connecté à un chargeur, le Portamesh doit automatiquement démarrer.