#Modifier Epsilon sur N0115

1 messages · Page 1 of 1 (latest)

charred escarp
#

Salut, depuis quelque temps je voulais faire une version perso de Epsilon pour avoir un os custom.

Donc je récupère le code sur le github officiel, puis je le modifie comme je veux. Je teste avec la commande pour compiler en mode "simulator", comme vue dans la docs de numworks. Tout marche comme prévu.

Ensuite, j'ai voulu le flasher sur ma N0115. Mais j'obtiens des erreurs avec des manques de fichier par exemple. J'ai réussi à m'en sortir (en déplaçant et éditant des fichiers). Mais il me manque un fichier qui se trouve dans "ion/N0115". Mais ce répertoire est inexistant même sur le github.

Ma question est donc si cela est vraiment possible de faire mon os pour n0115 et de le flasher et si des tutoriels existe a ce sujet.

wide stump
#

Tu as fais la commande du site de Numworks ?

#

Parce que c'est prévu pour N0110 donc il faut modifier la commande pour N0115

#

make MODEL=n0115 userland.A.dfu
et
python3 build/device/dfu.py -s 0x90010000:leave -D output/release/device/n0115/userland/userland.A.dfu

charred escarp
# wide stump make MODEL=n0115 userland.A.dfu et python3 build/device/dfu.py -s 0x90010000:lea...

oui ! J'avais essayer. Cela me donne une erreur a la fin : ``` CC python/src/py/warning.o
LD userland.A.elf
make: the '-j' option requires a positive integer argument
Usage: make [options] [target] ...
Options:
-b, -m Ignored for compatibility.
-B, --always-make Unconditionally make all targets.
-C DIRECTORY, --directory=DIRECTORY
Change to DIRECTORY before doing anything.
-d Print lots of debugging information.
--debug[=FLAGS] Print various types of debugging information.
-e, --environment-overrides
Environment variables override makefiles.
-E STRING, --eval=STRING Evaluate STRING as a makefile statement.
-f FILE, --file=FILE, --makefile=FILE
Read FILE as a makefile.
-h, --help Print this message and exit.
-i, --ignore-errors Ignore errors from recipes.
-I DIRECTORY, --include-dir=DIRECTORY
Search DIRECTORY for included makefiles.
-j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
--jobserver-style=STYLE Select the style of jobserver to use.
-k, --keep-going Keep going when some targets can't be made.
-l [N], --load-average[=N], --max-load[=N]
Don't start multiple jobs unless load is below N.
-L, --check-symlink-times Use the latest mtime between symlinks and target.
-n, --just-print, --dry-run, --recon
Don't actually run any recipe; just print them.
-o FILE, --old-file=FILE, --assume-old=FILE
Consider FILE to be very old and don't remake it.
-O[TYPE], --output-sync[=TYPE]
Synchronize output of parallel jobs by TYPE.
-p, --print-data-base Print make's internal database.
-q, --question Run no recipe; exit status says if up to date.
-r, --no-builtin-rules Disable the built-in implicit rules.
-R, --no-builtin-variables Disable the built-in variable settings.
--shuffle[={SEED|random|reverse|none}]
Perform shuffle of prerequisites and goals.
-s, --silent, --quiet Don't echo recipes.
--no-silent Echo recipes (disable --silent mode).
-S, --no-keep-going, --stop
Turns off -k.
-t, --touch Touch targets instead of remaking them.
--trace Print tracing information.
-v, --version Print the version number of make and exit.
-w, --print-directory Print the current directory.
--no-print-directory Turn off -w, even if it was turned on implicitly.
-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
Consider FILE to be infinitely new.
--warn-undefined-variables Warn when an undefined variable is referenced.

This program built for x86_64-pc-msys
Report bugs to [email protected]
lto-wrapper.exe: fatal error: make returned 2 exit status
compilation terminated.
d:/msys64/home/***/gcc-arm/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
make: *** [build/rules.mk:77: output/release/device/n0115/userland/userland.A.elf] Error 1.``` Dans les fichier il n'y a effectivement pas : "output/release/device/n0115/userland/userland.A.elf" mais "userland.A.elf.objs". C'est ici que je bloque. J'ai essayer d'enlever l'extension .objs mais rien a faire...

charred escarp
#

Cela arrive après une partie de la compilation. Quand je relance make MODEL=n0115 userland.A.dfu je tombe directement sur l'erreur.

wide stump
#

Essaye make MODEL=n0115 LTO=0 userland.A.dfu

charred escarp
charred escarp
# wide stump T'as essayé avec le slot B ?

Oui j'ai tenter pour le slot A : python3 build/device/dfu.py -s 0x90010000:leave -D output/release/device/n0115/userland/userland.A.dfu et pour le slot B : ```python3 build/device/dfu.py -s 0x90410000:leave -D output/release/device/n0115/userland/userland.A.dfu

next sundial
#

Ça désactive LTO, c'est l'optimalisation au linkage pour rendre le code plus rapide et léger

#

Normalement, il ne faut pas le désactiver

#

Tu es sur Msys2 ?

#

Le LTO est cassé sur Msys2, je ne sais pas pourquoi (et je n'ai pas Windows pour tester)

charred escarp
#

Oui je suis sur Msys2. J'ai commencer dessu et j'ai eu la flemme de tout réinstaller sur linux 😅

#

Apres avoir réessayer les 2 commandes que j'ai décrit avant, je suis tomber sur cette erreur directement sur la numworks :
OFFICIAL UPGRADE REQUIRED
the software you were about to execute requires a more recent authentified kernel to be executed.
Pleasse upgrade your calculator with the last official software before trying again.

Je l'ai donc mise a jour même si elle l'était normalement. Ensuite j'ai réassayer le slot b et je tombe sur :
UNOFICIAL SOFTWARE
Caution: You are using an unofficial softawer. This software does not match the requirements of some exémas.
Numworks is not responsible for problems that arise from use of this software.

Mais toujours rien ensuite. Je reste sur le software officiel.

#

Le deuxième message apparait des que j'allume ma calculatrice. Preuve que l'os est normalement là. Mais ne s'affiche pas.

wide stump
#

Le deuxième message c'est normal mais pour le premier tu peux manuellement faire correspondre la version à celle de ton kernel dans build/config.mak il me semble

charred escarp
#

Ok je regarderai pour le premier. Mais concernant le deuxième, je ne voit toujours pas mon os après cela... (j'ai changer un icone pour voir mais il n'apparait pas). Il y a une manipulation spécifique a faire ?

wide stump
#

Normalement si tu fais OK le message disparaît

#

Sinon réinstalle Epsilon sur les deux slots et refait l'installation pour le slot B

charred escarp
#

Ducoup dans build/config.mak je doit remplacer EPSILON_VERSION ?= 23.2.3 par EPSILON_VERSION ?= 23.2.6 (qui est la version d'epsilon flasher sur ma calculatrice) et ensuite relancer make clean et make MODEL=n0115 LTO=0 userland.A.dfu

wide stump
#

T'as quoi si tu fais python3 build/device/dfu.py -l ?

charred escarp
#

$ python3 build/device/dfu.py -l
Bus 2 Device 023: ID 0483:a291
Memory Layout
0x90030000 61 pages of 64K bytes
0x90400000 64 pages of 64K bytes
(venv)

wide stump
#

make MODEL=n0115 LTO=0 userland.B.dfu

charred escarp
# wide stump `make MODEL=n0115 LTO=0 userland.B.dfu`

Je crois que j'ai la poisse 😅 ça continue de me faire : OFFICIAL UPGRADE REQUIRED
the software you were about to execute requires a more recent authentified kernel to be executed.
Pleasse upgrade your calculator with the last official software before trying again.
Après make MODEL=n0115 LTO=0 userland.B.dfu et python3 build/device/dfu.py -s 0x90410000:leave -D output/release/device/n0115/userland/userland.B.dfu
File: output/release/device/n0115/userland/userland.B.dfu
b'DfuSe' v1, image size: 1608589, targets: 1
b'Target' 0, alt setting: 0, name: "ST...", size: 1608304, elements: 2
0, address: 0x90410000, size: 1542752
1, address: 0x907f0000, size: 65536
usb: 0483:a291, device: 0x0000, dfu: 0x011a, b'UFD', 16, 0x9111ab88
Writing memory...
0x90410000 1542752 [=========================] 100%
0x907f0000 65536 [=========================] 100%
Exiting DFU... on address 0x90410000
(venv)

#

Tu crois que s'est du au fait que sur git la derniere version est la 23.2.3 ? Dans ce cas comment obtenir la 23.2.6 ?

oblique meteor
charred escarp
#

Au pire tu galères 3 jours 💀 mais après c'est bon pour longtemps normalement

oblique meteor
#

J'ai envie de faire un userland custom avec des éléments de Upsilon

#

Un peu un "Upsilon at home"

charred escarp
#

On a un peu le même objectif 😂. Après moi c'est plus un élément pour apprendre le C, donc plus un loisir

oblique meteor
#

Je connais un peu le C mais pas trop

#

Je suis vraiment pas à l'aise avec ce langage et j'ai pas envie d'apprendre comme j'avais appris python quand j'avais 8 ans 🫠

#

Du coup je me dis qu'un projet fun comme ça c'est la meilleure chose

charred escarp
#

Déjà t'as commencé le python jeune 8 ans c'est pas mal !

oblique meteor
#

J'aime bien faire du dev backend, j'y arrive à peu près bien x)

charred escarp
#

Pour ma part j'ai commencé plus tard, vers 13 ans mais avant j'avais pas de pc alors c'était plus compliqué 😂

#

Tant que j'y pense, tu connaîtrais d'autre forum pour pourvoir demander de l'aide pour le flash de l'os ? Ça permettrait peut être de trouver une solution plus rapidement...

oblique meteor
#

Par contre j'ai réfléchi pas mal et je sais que c'est impossible de redistribuer une version modifiée de Epsilon

#

Mais qui a dit qu'on avait pas le droit de redistribuer des fichiers .patch qui patchent le code source d'Epsilon

#

À peu près la même technique utilisé par Forge pour éviter de se faire exploser la gueule par Mojang tout en permettant le patch de mémoire

charred escarp
#

Peut être le github de Epsilon ?

oblique meteor
#

Tu peux tenter

#

Voir limite regarder les issue existantes

#

Voir si y a pas un blud dans le même problème que toi

charred escarp
oblique meteor
#

Et en voyant les issues récentes ça ne m'a pas l'air d'être le cas

charred escarp
#

Je leur demanderai demain 😉. Limite je leurs demande de mettre à jour leur doc officiel et de me faire un tuto complet 😂

charred escarp
oblique meteor
#

Au pire pgrv tu fais un GitHub gist dès que tu trouves la solution mdr

#

En plus ça fait chier car j'allais lancer le développement de mon custom userland demain au CDI (cherche pas j'ai fait des dingueries sur un pc et j'ai installé mingw64 dessus) et je vois ça 😭

next sundial
#

Normalement, le upgrade required, c'est juste modifier un fichier

#

Ensuite un clean (supprime le dossier output, c'est la meilleure méthode, le clean normal ne marche pas dans toys les cas)

#

Et ensuite recompile

oblique meteor
oblique meteor
#

en espérant que ça fasse pas tout exploser :p

next sundial
#

Il faut que la version soit exactement la même que celle du kernel (version officielle installée, en gros)

oblique meteor
wide stump
#

J'ai essayé avec la 23.2.6 sur une N0115 et ça marche pour moi

charred escarp
# wide stump J'ai essayé avec la 23.2.6 sur une N0115 et ça marche pour moi

bonne nouvelle ! J'ai supprimer le dossier output, executé : make MODEL=n0115 userland.B.dfu puis make MODEL=n0115 LTO=0 userland.B.dfu. Je fait les 2 commandes sinon je n'ai pas "userland.B.dfu" qui est généré. Ensuite le flash marche. Sais-tu pourquoi (une fois mon os flasher) lorsque je clique sur le bouton home ou encore quand je change la langue, pourquoi cela me réinitialise ma numworks sur l'os officiel ?

charred escarp
#

Ya pas moyen de flasher mon os sur tous les slots pour empecher le bootloader de repasser sur la version officiel ?

oblique meteor
#

Je sais que quand la calculatrice crash elle redémarre

#

Or quand elle redémarre ça supprime toutes les modifications temporaires

#

Y compris l'OS

charred escarp
#

Oui mais j'ai seulement changer des icon et des fichiers langue.

#

Je pense que c'est pour empecher le contournement du mode examen

#

Je vais essayer avec aucune modif de l'original et je verrai si ça me fait la meme

oblique meteor
#

Sinon je commence le développement de mon userland

#

Je vais essayer de merge des petites modifications de Upsilon

#

Puis peu à peu intégrer des plus en plus grandes

charred escarp
#

Tu me dira si ça te fait la meme

oblique meteor
#

C'est quoi la toolchain que je dois télécharger

#

Aarch64 ou aarch32?

charred escarp
#

Pour ma part j'ai pris la dernière version. En fait j'ai suivi la "documentation" de numworks. Mais je sais pas si c'est aarch64 ou aarch32. J'ai installer : gcc-"arm-none-eabi-10.3-2021.10-win32.exe". Après si c'est pas ça c'est que je l'ai installer l'année dernière donc je sais plus.

#

Après je pense que ça depend de ton architecthure pour ton pc

oblique meteor
#

Non mais c'est l'architecture de target de l'appareil

#

La calculatrice son CPU c'est du arm32 ou arm64

#

Oh wait att c'est le truc embedded là

#

Ah bah mdr

charred escarp
#

A mais c'est du 32 bits numworks non ? Donc arm32

oblique meteor
#

Nan nan oublie mdr

#

J'étais en train de télécharger la toolchain normale pas la embedded

oblique meteor
#

J'ai réussi à compiler le simulateur !

#

Je me demande par contre, est-ce que c'est possible de porter le système de date et heure de Upsilon vers Epsilon sur N0120

next sundial
#

Tu peux le faire en gardant la calculatrice allumée en continu, peut-être

charred escarp
#

Après elle ne s'éteint jamais non ? Elle reste en veille si je dis pas de bêtises

oblique meteor
charred escarp
oblique meteor
#

Je pense que c'est clairement possible, c'est qu'une calculatrice et à côté t'as des monstres de sécurité (consoles de jeux modernes par exemple) qui se font compromettre quand même

oblique meteor
charred escarp
#

Sinon tu dessoude puis ressoude une puce mémoire et tu flash ton bootloader 😂. Après c'est peut-être plus simple autrement 😏

oblique meteor
#

Y en a un en création pour la N0120 mais il est loin d'être terminé

charred escarp
oblique meteor
charred escarp
#

A bon ? Je croyais qu'on pouvait plus flasher de bootloader personnalisé ?

#

A non c'est bon oubli 😅

wide stump
oblique meteor
wide stump
#

C'est pas obligé on peut le faire avec du scotch ou simplement avec ses doigts. C'est que le temps de la manip

oblique meteor
#

Comment ça 😭

wide stump
#

Si tu arrives à maintenir les câbles sans bouger sur le port debug ça le fait

oblique meteor
#

Fausse manip avec tes doigts et la calculatrice est foutue

wide stump
oblique meteor
#

C'est pas du tout optimal comme solution mais de toute façon ce que je veux faire c'est un géant hack à la con sur le code d'Upsilon et d'Epsilon mdr

oblique meteor
#

Genre conserver le moins de choses allumés mais juste assez pour que la clock fonctionne encore

charred escarp
#

Et au pire tu met une batterie plus performante

next sundial
#

Par contre, tu auras une autonomie pourrie

drowsy kernel
#

la batterie tiendrait pas longtemps et il serait impossible de faire autre chose donc inutile

oblique meteor
#

😭

next sundial
#

Et pas sûr qu'on puisse éteindre l'écran

next sundial
drowsy kernel
#

dans l'idée il y a un nouveau composant dans la calculatrice qui permettrait de maintenir un RTC actif

#

115/120

next sundial
#

Un mode précis avec genre 4 jours d'autonomie

oblique meteor
#

Et je me vois mal faire une Xbox og

#

Càd demander de reconfigurer l'heure à chaque sortie du mode veille

next sundial
#

Et un qui n'est pas précis (genre 10 minutes de dérive par jour) mais qui consomme quasiment rien

oblique meteor
#

Mais la batterie tiendrait combien de temps en gardant la calc allumée

next sundial
#

J'ai pas testé

oblique meteor
#

Si c'est genre 2j franchement sacrifice pour plus de fonctionnalités

drowsy kernel
next sundial
#

Mais moins de 4 jours, c'est sûr

oblique meteor
next sundial
#

On a que ça comme fonctions

oblique meteor
#

Car c'est jamais vraiment vrai mdr

#

Donc 15h d'autonomie, pas fou

next sundial
#

20h, écran allumé

#

Mais on ne peut pas l'éteindre, donc...

charred escarp
#

Un peu comme si ta le mode exam ON en gros

next sundial
#

Tu peux faire une horloge si le mode examen est actif, peut-être

#

Mais je ne sais pas dans quelle mesure tu peux faire ça depuis un firmware custom

oblique meteor
charred escarp
#

Je suis pas sur... De mon coté quand je flash mon os si je passe en mode exams ou si je clic sur le bouton home (va savoir pourquoi 💀 ) ça me repasse automatiquement sur l'os officiel. Donc l'horloge c'est pas sur

oblique meteor
#

😭

oblique meteor
next sundial
oblique meteor
#

Y compris les modifs au niveau de l'OS et les apps

#

Pour le bouton home je sais pas

#

Mais d'ailleurs le kernel est-ce qu'il sert vraiment à quelque chose à part la sécurité

charred escarp
next sundial
next sundial
oblique meteor
next sundial
oblique meteor
#

Ah ouais le kernel rudimentaire de fou

next sundial
#

Il a un timer pour le spinner

oblique meteor
#

Bon après avec 500ko de ram sur la n0120 c'est vrai que tu vas pas aller très loin niveau kernel

charred escarp
next sundial
#

Et le processeur n'a qu'un coeur, donc des processus n'auraient pas un vrai intérêt (à part de l'isolation)

oblique meteor
#

C'est dommage car l'OS il est joli

next sundial
#

Ça prendrait beaucoup trop de mémoire pour quelque chose d'inutile

next sundial
#

Tant que tu codes pas en Python, c'est bon

#

J'arrive à faire tourner du Game-Boy Color en temps réel sur ma N0110

oblique meteor
next sundial
#

Mon téléphone galère sur la Wii (Zelda TP)

oblique meteor
#

Après y a tout le overhead de l'émulation donc plus de conso ram

#

Je pense pas ça le fait

oblique meteor
#

Oh et merde j'avais oublié tous les modes de la SNES notamment le mode 7

next sundial
#

Le plus gros problème, c'est que tu dois garder la RAM de l'userland pouvoir quitter l'émulateur après

#

Et le CPU sur N0110 est limite pour Game Boy Color

oblique meteor
next sundial
#

Copier la RAM de l'OS dans les bandes noires du framebuffer

#

Et les restaurer en quittant

oblique meteor
#

Niveau CPU

next sundial
#

Ça dépend probablement de l'émulateur

#

Dolphin peut soit interpréter (ce qu'on a sur Peanut-GB), soit recompiler pour exécuter directement sur le processeur

oblique meteor
#

Je me demandais aussi qu'est-ce qui pourrait réellement être porté depuis Upsilon vers Epsilon userland

finite ledge
finite ledge
oblique meteor
finite ledge
oblique meteor
#

Date/heure c'est partiellement hardware, le système de fichiers c'est hardware, et puisque je pense que la majorité du code de Upsilon (apps notamment) repose sur la présence de l'un des deux ça devient très vite compliqué

finite ledge
#

J'ai constaté que sur un Userland custom le bouton Home reset la calculatrice mais pas en faisant le test usine de la calculatrice

#

donc je suis allé voir dans le code et j'ai trouvé ça:

#

apps/hardware_test/app.cpp:

App* App::Snapshot::unpack(Container* container) {
  // Spinner may break LCD data test
  Ion::Events::setSpinner(false);
  // Disable Home button, so that the Home key can be tested
  Ion::CircuitBreaker::unsetCheckpoint(
      Ion::CircuitBreaker::CheckpointType::Home);
  return new (container->currentAppBuffer()) App(this);
}
next sundial
#

Ah oui, le unset

#

Tu peux le remettre facilement après ?

finite ledge
#

En fait je sais pas je cherchais juste à enlever le reset

#

Mais le bouton Home fonctionne comme sur une calculatrice pas modifiée après

#

donc je sais pas trop ce que ça fait pour être honnête

charred escarp
charred escarp
#

A non c'est moi ! Mon os ne s'était pas recompiler.

#

Ducoup ça marche nickel ! Merci beaucoup @finite ledge

charred escarp
#

Quelqu'un connait le fichier a modifier pour changer la couleur du fond de texte + arrière des icônes a chaque lancement de "home" ? J'ai déjà changé en partie mais je ne trouve pas le reste.

charred escarp
#

Y a t-il une variable global qui definit la couleur background par defaut ? N'ayant pas trouver j'ai ajouter : constexpr KDColor KDColorGreyBackgroundL = KDColor::RGB24(0x3D4439); constexpr KDColor KDColorGreyBackgroundH = KDColor::RGB24(0x252525); dans le fichier color.h du module kandinsky. Or comme on peut le voir sur la photo des rectangles blanc apparaisse a chaque lancement de "home". Lorsque je "passe" sur l'écriture cela me change bien la couleur de fond de cette écriture.

#

Le problème est tout de meme gênant