Page 3 sur 4

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 28 Nov 2019, 19:01
de jean-baptiste boric
J'avais abandonné le projet pour le moment étant donné que je n'étais pas arrivé à faire cracher à la toolchain Cortex-M un programme en mode PIC et avec .text/.rodata en Flash immutable à une position non prédéterminée à l'avance. De mémoire, la toolchain générait du code exécutable qui supposait que la GOT/PLT était à un offset constant des sections .text/.rodata au lieu d'utiliser le registre GOT. C'était endémique aux Cortex-M, je n'avais pas ce problème en compilant pour du Cortex-A.

Pour ce qui est de la complexité des fichiers ELF, ce n'est vraiment pas complexe au runtime. Seuls les program headers font foi et mon loader qui faisait du dynamic linking (!) tenait en 150 lignes de C.

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 28 Nov 2019, 19:12
de Lionel Debroux
Un loader ELF n'est pas forcément très complexe au runtime, en effet, mais sur Nspire, je me souviens d'overheads taille variables au runtime, parfois très faibles mais parfois plus difficiles à accepter par rapport au faible apport d'ELF pour ce cas d'usage, des dizaines de KBs sur certains programmes assez simples qui contenaient... ce qu'il fallait pour qu'il y ait de tels overheads, je ne sais pas exactement quoi mais je suppose que ça pouvait être beaucoup de sections, beaucoup de relocations, ou quelque chose de ce genre.

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 28 Nov 2019, 19:37
de zardam
De ce que j'ai constaté, pour pouvoir avoir un .data "relocatable" en ram et un .text en flash, il faut utiliser l'option "-mno-pic-data-is-text-relative" qui crée des entrées dans .got pour chaque symbole du .data, et ça pouvait prendre beaucoup de place, pour giac par exemple.

De mémoire aussi, il y a plus de 2Mo de relocations pour giac, donc impossible à faire sur la calculatrice.

C'est plus simple au final de reporter ça en dehors. Du coup pas besoin de toolchain ou libc spécifique, ni rien de complexe ou coûteux sur la calculatrice.

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 07 Déc 2019, 22:55
de zardam
Au final, j'ai réussi à compiler ld et objcopy avec emscripten, donc pas besoin d'avoir un outil/format dédié, le link final se fait directement dans le navigateur.

J'ai enrobé tout ça dans une page web disponible ici : https://zardam.github.io/nw-external-apps/

Le firmware et KhiCAS sont à jour avec les modifications pour le mode examen. Les deux autres applications méritent encore un peu d'attention avant d'être pleinement utilisables.

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 07 Déc 2019, 23:51
de Lionel Debroux
Super travail, comme toujours :)
Emscripten a décidément progressé au fil du temps.

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 08 Déc 2019, 02:31
de Adriweb
Excellent !
Ca va simplifier beaucoup de choses :)

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 08 Déc 2019, 10:04
de quentinguidee
Merci! C'est super tout ça!! :) Je me pencherai dessus un maximum après mes examens pour adapter Omega et le rendre parfaitement compatible avec cet outil ;)

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 10 Déc 2019, 19:14
de critor
Merci @zardam. :)

Moyen de choisir la ROM pour l'émulateur NES qui semble venir par défaut avec un homebrew 2048 ?

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 10 Déc 2019, 19:33
de zardam
Pas pour la moment, sauf à recompiler, mais ça va arriver (quand ça sera prêt...).

L'ajout de fichiers "custom" sur l'installeur en ligne et pensé entre autre pour ça.

Je suis aussi en train de regarder pour faire un explorateur de fichiers du script store pour pouvoir se passer du workshop, et aussi d'échanger d'autres types de fichiers (sessions KhiCAS).

Re: NumBoots - Bootloader pour NumWorks N0110

Message non luPosté: 11 Déc 2019, 15:52
de M4x1m3
Zardam si jamais tu veux t'eviter de t'arracher les cheveux avec tout ce qui est WebUSB/DFU j'ai commencé à faire quelques fonctions utiles dans un repo github : https://github.com/M4xi1m3/omega-webdfu-tests