Page 1 of 1

Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 21 Dec 2015, 19:10
by Lionel Debroux
Hier, "Jean-Baptiste Boric" s'est présenté sur Omnimaga comme allant faire un autre firmware tiers pour la Prime, non pas à partir du fichier armfir.elf embarqué dans l'apps disk comme je l'avais fait il y a bientôt un an et demi, mais un niveau plus bas, et donc probablement avec plus de contrôle, dans PRIME_OS.ROM.
Et aujourd'hui, il a posté la trace ordinateur d'une session GDB obtenue en tournant un GDBstub côté calculatrice :)

Code: Select all
(gdb) x/16x 0x30000000
0x30000000:     0x30000020      0x00000000      0x00100000      0x30000000
0x30000010:     0x00100000      0x004a3556      0x36313432      0x00000000
0x30000020:     0xeb000000      0xeafffffe      0xe92d4008      0xe59f000c
0x30000030:     0xeb00017f      0xe59f0008      0xeb0001cc      0xeb00012b
(gdb) set *(unsigned) 0x30000000 = 0x12345678
(gdb) x/16x 0x30000000
0x30000000:     0x12345678      0x00000000      0x00100000      0x30000000
0x30000010:     0x00100000      0x004a3556      0x36313432      0x00000000
0x30000020:     0xeb000000      0xeafffffe      0xe92d4008      0xe59f000c
0x30000030:     0xeb00017f      0xe59f0008      0xeb0001cc      0xeb00012b
(gdb) x/4x 0x56000070
0x56000070:     0x1400150a      0x00000062      0x01554050      0x00000000
(gdb)


Le GDBstub contient des fonctions d'examination et de manipulation d'état des registres et de la mémoire.
ExtendeD en avait implémenté un dans Ncubate, fork de nspire_emu; je l'avais réintégré dans une version plus moderne de nspire_emu; Firebird, le vrai émulateur de Nspire, le propose toujours, bien sûr.


Bref, ça n'a peut-être pas l'air très excitant comme ça pour les non initiés, et puis je m'y prends peut-être mal pour l'expliquer... mais voici donc le PoC merdique (*1) que j'avais fait enfin dépassé :)
Si Jean-Baptiste continue sur sa lancée pendant des semaines, ceci signe peut-être enfin, plus de deux ans après l'introduction des Prime sur le marché, le vrai début de la programmation alternative sur Prime, ce qui n'était pas le but de mon PoC (*2) :)

Nous vous tiendrons informés de ses avancées, bien sûr.

Source de l'info: https://www.omnimaga.org/introduce-your ... ody-22224/ , https://github.com/boricj/ripem

*1: en relatif, mon armfir.elf tiers était mieux que tout ce qui avait été fait jusque là et encore sur presque un an et demi après, mais en absolu, c'était nul, comme on peut s'y attendre pour un travail de ce genre réalisé en une dizaine d'heures seulement. Et puis étant l'auteur, j'ai le droit de critiquer mon travail comme je veux, surtout quand c'est mérité :)
*2: mon PoC était comme une invitro, une invitation à mieux faire - et Jean-Baptiste est le premier à la saisir, félicitons-le ;)

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 21 Dec 2015, 23:48
by jean-baptiste boric
Et dire que je voulais garder la surprise pour Noël... :D

Bonjour à tous, c'est l'auteur de ce firmware tiers. Excusez mes manières, je suis tout nouveau ici.

Je tiens à garder la date de sortie "officiel" pour le 25 décembre le temps de pouvoir améliorer le PoC, documenter le tout et faire un triple jeu de mots en anglais, je ne m'étalerai donc pas sur les détails avant la date butoir. Par contre, ce n'est pas pour des raisons de contrôle que j'ai décidé de remplacer PRIME_OS.ROM au lieu de armfir.elf (les deux devraient donner un contrôle total de la machine, mais j'ai pas vérifié).

La raison théorique est que c'est l'endroit idéal pour faire un bootloader non-officiel. Vu que BXCBOOT0.BIN (qui charge PRIME_OS.ROM) n'a pas vocation à être mis à jour aussi souvent que PRIME_OS.ROM (qui charge armfir.elf), c'est un endroit beaucoup plus stable dans le temps pour du développement tiers comparé à armfir.elf. Remplacer BXCBOOT0.BIN n'est par contre pas une bonne idée car à la moindre erreur ressusciter la calculette devient très compliqué, étant donné que le recovery est à l'intérieur.

La raison pratique est que je n'avais pas réussi à faire fonctionner le PoC existant avec la dernière version du firmware de HP pour des raisons qui m'échappent en partie... (j'avais réussi sur une version précédente et j'avais bien remarqué que l'adresse en mémoire de base du fichier ELF avait changé entre temps, mais pas moyen d'obtenir la fameuse mire...)

Premier post et je casse déjà la légende. Ca commence bien on dirait :)

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 22 Dec 2015, 00:04
by Adriweb
Bien joué :)
Je me suis mis en watcheur sur le repo GitHub pour suivre l'évolution...

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 22 Dec 2015, 15:14
by Lionel Debroux
Et dire que je voulais garder la surprise pour Noël... :D

Après qu'un breakthrough ait été posté sur un forum public surveillé régulièrement par plusieurs personnes (ce qui est d'autant plus facile, dans le cas d'Omnimaga, que le forum n'est plus que l'ombre de lui-même...), ce breakthrough n'est plus vraiment une surprise :)

Je tiens à garder la date de sortie "officiel" pour le 25 décembre le temps de pouvoir améliorer le PoC, documenter le tout et faire un triple jeu de mots en anglais, je ne m'étalerai donc pas sur les détails avant la date butoir.

Bien sûr, je comprends tout à fait :)
Quand ce sera officiel, tu auras une news sur le portail.

Par contre, ce n'est pas pour des raisons de contrôle que j'ai décidé de remplacer PRIME_OS.ROM au lieu de armfir.elf (les deux devraient donner un contrôle total de la machine, mais j'ai pas vérifié).

J'aurais dû écrire "probablement pas moins de contrôle", ouais.

La raison théorique est que c'est l'endroit idéal pour faire un bootloader non-officiel. Vu que BXCBOOT0.BIN (qui charge PRIME_OS.ROM) n'a pas vocation à être mis à jour aussi souvent que PRIME_OS.ROM (qui charge armfir.elf), c'est un endroit beaucoup plus stable dans le temps pour du développement tiers comparé à armfir.elf. Remplacer BXCBOOT0.BIN n'est par contre pas une bonne idée car à la moindre erreur ressusciter la calculette devient très compliqué, étant donné que le recovery est à l'intérieur.

En effet, modifier le boot0 est une des manips les plus dangereuses existantes pour des Prime, et tant que ce n'est pas une obligation pour bidouiller, nous savons tous qu'il vaut mieux éviter.
Dans les versions récentes de l'OS, HP ne met même plus à jour le boot0 avec le contenu de BXCBOOT0.BIN.

La raison pratique est que je n'avais pas réussi à faire fonctionner le PoC existant avec la dernière version du firmware de HP pour des raisons qui m'échappent en partie... (j'avais réussi sur une version précédente et j'avais bien remarqué que l'adresse en mémoire de base du fichier ELF avait changé entre temps, mais pas moyen d'obtenir la fameuse mire...)

Ah tiens, intéressant. Je n'avais même pas regardé pour faire fonctionner l'armfir.elf tiers sur une autre version: virtuellement tout le monde s'en foutait, de toute façon...

Premier post et je casse déjà la légende

Que veux-tu dire ?

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 22 Dec 2015, 18:18
by jean-baptiste boric
Premier post et je casse déjà la légende

Que veux-tu dire ?


Premier post et j'avoue déjà ne (presque) pas savoir ce que je fais, vu qu'au lieu de réussir à comprendre pourquoi je n'arrive plus à lancer un armfir.elf alternatif je décide de remplacer PRIME_OS.ROM à la tronçonneuse, avec tout l'inconfort que de ne pas être chargé avec un fichier ELF bien standard.

Ou comment réussir à implémenter un stub GDB alors que mon code était décalé en mémoire de 32 octets par rapport à ce que je disais au linker faute de documentation. C'est assez impressionnant à quel point le jeu d'instruction ARM est permissif sur ce genre d'erreurs, mon code en a encore des séquelles...

Qu'on se le dise, je suis un débutant dans le monde des calculettes qui est vraiment très, très chanceux. D'où la phrase "premier post et je casse déjà la légende, ça commence bien on dirait" car commencer par exécuter des constantes en mémoire qui par miracle réussissent à finir par arriver au code qui était supposé être lancé au départ + le fait qu'en ARM les grosses constantes sont chargés avec un adressage relatif à pc (et donc l'erreur des 32 octets ne s'est pas fait trop sentir), c'est la chance (monstrueuse) du débutant en action et rien d'autre :o

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 25 Dec 2015, 21:38
by Lionel Debroux
Ne te dévalorise pas ;)
Tu fais beaucoup mieux que ne pas savoir ce que tu fais.

Je suis en train de rédiger la news sur la release officielle. C'est dommage que tu l'aies annoncée seulement sur le moins actif des 4 principaux sites de la communauté, tu sais ;)

Re: Un meilleur PoC de firmware tiers pour Prime...

Unread postPosted: 26 Dec 2015, 09:14
by DoOmnimaga
Lionel Debroux wrote:C'est dommage que tu l'aies annoncée seulement sur le moins actif des 4 principaux sites de la communauté, tu sais ;)
Je crois que c'est du au fait que le site en question est le premier à apparaitre dans Google lorsqu'on tape HP Prime assembly. :P (ironiquement, la majorité du développement tiers sur HP Prime se déroule depuis toujours dans la communauté TI)