π
<-
Chat plein-écran
[^]

NumBoots - Bootloader pour NumWorks N0110

NumBoots - Bootloader pour NumWorks N0110

Message non lude jean-baptiste boric » 25 Aoû 2019, 13:35

J'ai expérimenté un peu ce week-end afin de résoudre le problème des apps tierce-parties perpétuellement cassées sur les calculatrices NumWorks.

Pour faire court, c'est un bootloader pour NumWorks N0110 qui permet de démarrer des exécutables. Lors d'un reset, un menu présente les fichiers dans la Flash externe pour sélectionner un programme à démarrer. Ce n'est pas un shell à proprement parler étant donné que les programmes sont standalone, mais cela offre une indépendance par rapport aux fluctuations du firmware officiel.

Les avantages de cette approche sont l'indépendance vis-à-vis du firmware officiel et de sa licence, les programmes ont un accès complet aux 256 KiB de RAM sans avoir à partager avec quiconque et la présence d'un simili-système de fichiers permet de stocker des choses (par exemple, avoir plusieurs fichiers ROMs pour un émulateur NES quand/si un sortira).

L'inconvénient majeur est qu'il faut faire un reset pour changer de programme. Le bouton est plus facile d'accès que sur la N0100, mais cela implique la perte des données d'epsilon (scripts Python, fonctions/variables...). Cela se prête donc plutôt aux programmes indépendants du firmware officiel, comme des émulateurs ou des firmwares alternatifs. L'isolement des applications va aussi coûter plus de Flash par rapport à une approche de type shell où les programmes peuvent se reposer sur les fonctionnalités du firmware.

Ce qui manque maintenant c'est une HAL pour faire des programmes. J'ai picoré celle de NumWorks pour faire le sample, mais il faudra en écrire une from scratch si on souhaite s'affranchir de la licence d'epsilon. J'ai réussi à trouver une solution qui ne nécessite pas de ré-architecturer epsilon, la maintenance ne devrait pas être trop chronophage.

Techniquement rien n'empêcherait de faire la même chose sur des N0100, mais la quantité limitée de Flash et la taille du firmware officiel fait que ce serait d'une utilité plus que discutable.

C'est encore très brut de décoffrage, mais c'est utilisable.

Code: Tout sélectionner
make EPSILON_DEVICE_BENCH=0 EPSILON_USB_DFU_XIP=0 EPSILON_ONBOARDING_APP=1 EPSILON_BOOT_PROMPT=update build/device/n0110/epsilon_two_binaries -j
python scripts/device/prg.py build/device/n0110/epsilon.external.bin epsilon.external.bin ../lenna/lenna.prg
sudo dfu-util -D build/device/n0110/epsilon.internal.bin -s 0x08000000
sudo dfu-util -D epsilon.external.bin -s 0x90000000


Sources:
Fichiers joints
epsilon.external.bin
(837.88 Kio) Téléchargé 3 fois
epsilon.internal.bin
(8.63 Kio) Téléchargé 4 fois
Avatar de l’utilisateur
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 41.2%
 
Messages: 273
Inscription: 21 Déc 2015, 22:22
Genre: Non spécifié
GitHub: boricj

En ligne

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude critor » 25 Aoû 2019, 13:42

Bien, quelle rapidité ! :bj:

Bon maintenant, histoire que ce soit accessible au plus grand nombre, il faudrait mettre à jour https://ti-planet.github.io/webdfu_numworks/ pour permettre l'écriture de la partie externe du firmware.
Image
Avatar de l’utilisateur
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Prochain niv.: 96.8%
 
Messages: 33410
Images: 8677
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
Classe: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude Adriweb » 25 Aoû 2019, 13:45

J'accepte les PR :P
Avatar de l’utilisateur
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 51.6%
 
Messages: 12625
Images: 1081
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
Classe: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude zardam » 25 Aoû 2019, 14:22

Très bonne idée, cela ouvre beaucoup de possibilités !
Avatar de l’utilisateur
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 19.7%
 
Messages: 196
Images: 13
Inscription: 11 Oct 2017, 23:39
Genre: Non spécifié
Calculatrice(s):

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude parisse » 25 Aoû 2019, 16:08

En effet!
Une des possibilites est de compiler epsilon avec pour seul app settings, il devient ainsi un OS (et on peut recuperer sur la RAM commune utilisee par les applis). Il me semble qu'on pourrait alors ajouter une application GPL (sans utiliser de code des applications d'epsilon, mais uniquement des appels au code partage entre les applications, code qui joue le role d'OS) et le diffuser sans avoir de conflit de licence. Maintenant que le prototypage de giac est fonctionnel, je vais sans doute attaquer un shell comme sur la Casio qui est un candidat a fournir un firmware diffusable, avec le multiboot pour pouvoir preserver l'utilisation originelle de la calc. Ca sera sans doute assez long, surtout avec la rentree qui se profile...
Avatar de l’utilisateur
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 76.3%
 
Messages: 1767
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié

En ligne

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude critor » 25 Aoû 2019, 20:08

Adriweb a écrit:J'accepte les PR :P


Quel est le problème ?

Ce n'est pas juste intégrer les paramètres DFU spécifiques à la Flash externe que j'ai déjà vu passer ?
Image
Avatar de l’utilisateur
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Prochain niv.: 96.8%
 
Messages: 33410
Images: 8677
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
Classe: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude jean-baptiste boric » 02 Sep 2019, 18:51

Je continue à travailler sur le sujet. Je m’attelle à créer un SDK digne de ce nom (compilateur+libc+bibliothèques) afin d'avoir quelque chose qui tienne la route.

J'ai décidé d'abandonner pour l'instant l'idée d'exécuter du code in-place dans la Flash. C'est une complication inutile pour le moment et newlib ne semble pas supporter du tout ce mode de fonctionnement. Je me replie sur une exécution en RAM avec un loader d'ELF et un système de fichiers de type TAR pour la flash externe (oui, le format d'archive Unix, c'est pour limiter les modifications du côté d'epsilon au maximum avec quelques tours de passe-passe). Ça me permet également de pouvoir réutiliser ma N0100 qui est déjà mutilée pour le debug hardware dans le cadre du développement avec un écart très faible par rapport à la véritable cible.

Je bute pour le moment sur la libc, newlib nécessitant une liste d'options longue comme le bras pour le convaincre de générer du code pleinement compatible avec la NumWorks...
Avatar de l’utilisateur
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 41.2%
 
Messages: 273
Inscription: 21 Déc 2015, 22:22
Genre: Non spécifié
GitHub: boricj

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude parisse » 02 Sep 2019, 19:52

Mais ca risque de diminuer enormement la taille des executables non? Ou bien le code est copie par segments, mais alors on va buter sur la taille de la RAM de la Numworks. Sur la hp39gii, le code est copie de la flash vers la RAM, avec de gros ralentissements pour du code ou on n'a pas pris de precaution pour assurer la localite. Et la RAM etait de 512K dont la moitie reservee a copier du code de la flash vers la ram...
Avatar de l’utilisateur
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 76.3%
 
Messages: 1767
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude zardam » 02 Sep 2019, 19:59

jean-baptiste boric a écrit:Je bute pour le moment sur la libc, newlib nécessitant une liste d'options longue comme le bras pour le convaincre de générer du code pleinement compatible avec la NumWorks...


Étrange, je n'ai pas eu particulièrement de problème avec ça (pour du code basé sur libopencm3), mais je rate peut être quelque chose.
Avatar de l’utilisateur
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 19.7%
 
Messages: 196
Images: 13
Inscription: 11 Oct 2017, 23:39
Genre: Non spécifié
Calculatrice(s):

Re: NumBoots - Bootloader pour NumWorks N0110

Message non lude jean-baptiste boric » 02 Sep 2019, 22:20

parisse a écrit:Mais ca risque de diminuer enormement la taille des executables non? Ou bien le code est copie par segments, mais alors on va buter sur la taille de la RAM de la Numworks.


Comme je l'ai dit, je renonce à l'usage de la flash pour le moment afin de réduire le nombre de problèmes à résoudre dans un premier temps : le code assembleur de newlib n'est pas compatible avec du position-independent code et j'ai déjà assez fort à faire pour faire fonctionner cette lib au forceps. C'est également pour des raisons pratiques, je peux utiliser ma N0100 customisé pour le SWD pour prototyper sans devoir massacrer ma N0110 sur l'autel de la science.

Je m'attaquerai à l'exécution de code depuis la Flash quand j'aurai un SDK fonctionnel (ou alors je contournerai le problème avec du WebAssembly).

zardam a écrit:Étrange, je n'ai pas eu particulièrement de problème avec ça (pour du code basé sur libopencm3), mais je rate peut être quelque chose.


Je fais une toolchain bare-metal intégrale (binutils+gcc+newlib) depuis les sources, ça me permet d'avoir quelque chose de propre et de réduire drastiquement les options de compilation/linker à mettre explicitement dans les Makefiles, mais c'est inversement proportionnel à la quantité d'incantations magiques pour construire la-dite toolchain afin que ça marche pour de vrai... Ce n'est pas parce que y'a un ELF produit à la fin que la calculatrice est contente pour autant >_<
Avatar de l’utilisateur
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 41.2%
 
Messages: 273
Inscription: 21 Déc 2015, 22:22
Genre: Non spécifié
GitHub: boricj

Suivante

Retourner vers Programmation native (C/C++/...)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

-
Rechercher
-
Sujets à la une
Concours TI-Planet-Casio de rentrée 2019. 3 défis pour plus d'une 15aine de calculatrices graphiques et nombre de goodies sortant de l'ordinaire ! :D
Comparaisons des meilleurs prix pour acheter sa calculatrice !
12
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...

Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety 
-
Stats.
600 utilisateurs:
>561 invités
>33 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)