
Installer DOOM sur n'importe quel appareil revient à hisser la bannière du gagnant sur une forteresse tombée. On m'a posé la question "eh bien, avez-vous commencé le destin?" au moins 35 fois quand ils ont découvert que je tripote cette calculatrice. J'ai décidé de ne pas décevoir le public et de réaliser le lancement de DOOM. En cours de route, il est devenu un bon test des performances de l'équipement, tout en révélant des bugs désagréables. Alors allons-y!
Actualités du projet
Pour ceux qui se demandent comment j'ai fait fonctionner DOOM, ils peuvent sauter ce chapitre et passer au suivant. Il présente simplement l'état actuel du projet.
Comme vous vous en souvenez dans les parties précédentes ( partie 1 et partie 2 ), j'étais en train de mettre Linux sur une calculatrice, de reconstruire u-boot, kernel, rootfs. Depuis lors, je me suis beaucoup impliqué dans la calculatrice et j'ai même bien compris ce qui était fait dans u-boot, le noyau et l'arborescence des périphériques. Vous devez comprendre que c'est mon passe-temps, dans mon temps libre de mon travail principal et de ma famille, donc tout ne va pas vite, et parfois c'est quelque peu illogique, simplement parce qu'aujourd'hui il y a une humeur pour faire cela et pas autrement.
Les principales nouvelles ont eu lieu, grâce à l'utilisateur Alx2000y, qui m'a invité à une discussion dans un panier, où les gens ont vu leur firmware pour Xiaomi Gateway sur un processeur similaire. Il y a même un article sur Habré sur le sujet . Les gens ont déjà beaucoup avancé dans ce sujet, étendant incroyablement les fonctionnalités de l'appareil. Et m'a beaucoup aidé à vaincre le problème des nand. Comme vous vous en souvenez, au tout début, j'ai effacé mon image de stupidité. En conséquence, j'ai eu un assez grand nombre de mauvais secteurs "virtuels", le plus désagréable est que les secteurs défectueux étaient au tout début et ne permettaient pas d'écrire u-boot. Vous trouverez ci-dessous une liste de secteurs défectueux, la plupart d'entre eux étant virtuels.
=> nand bad Device 0 bad blocks: 00000000 00020000 00040000 00060000 012c0000 04e20000 05280000 094c0000 17b20000 1ff80000 1ffa0000 1ffc0000 1ffe0000 =>
Lenar, du chat ci-dessus, m'a beaucoup aidé, le problème a été résolu avec seulement deux commandes dans u-boot:
nand erase.chip … nand scrub.chip … Really scrub this NAND flash? <y/N> y
Après cela, nous vérifions le nombre de secteurs défectueux et, voilà , il y en a beaucoup moins!
=> nand bad Device 0 bad blocks: 1ff80000 1ffa0000 1ffc0000 1ffe0000
En conséquence, je peux maintenant charger u-boot dans le secteur zéro et démarrer. Pour le moment, la calculatrice peut être chargée en appliquant simplement l'alimentation et sera entièrement chargée avec Linux, avec un écran fonctionnel et la possibilité d'exécuter des programmes via UART. Cela fonctionne même correctement pour DOOM. «Mais, il y a une nuance» (C). Apparemment, le pilote du clavier chevauche en quelque sorte le pilote ubifs, et par conséquent, si vous appuyez sur n'importe quelle touche du clavier, la calculatrice se bloque instantanément. Une panique du noyau s'est même envolée vers moi une fois, mais je n'ai pas pensé à la sauvegarder pour au moins trouver le lieu de cette intersection. Donc pour l'instant, tout fonctionne dans les initramfs à coup sûr. Une vidéo montrant le travail de chargement de nand, de lancement de DOOM et de gel a été publiée sur ma chaîne de télégramme .
À partir d'autres bonnes nouvelles, j'ai essayé de mettre ubuntu sur nand, cela fonctionne également correctement. Les packages, bien sûr, ne peuvent pas être installés, mais en général, vous pouvez travailler et l'utiliser, ce qui est également pratique. Mais sans clavier fonctionnel, ces jeux sont toujours dénués de sens pratique.
Dans la dernière partie, je me suis plaint que u-boot a un comportement différent lors de l'exécution sur nand et à partir de la RAM. J'ai passé deux jours à fouiller dans les codes sources de u-boot pour comprendre ce qui se passait. Et tout s'est avéré banal (même honteux). L'utilitaire uuu, lors du démarrage de u-boot à partir de la mémoire, y transmet ses variables d'environnement. Plus précisément, il appelle mfgtool_args et, par conséquent, la ligne de la variable d'environnement de démarrage ressemble à ceci:
bootargs=rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber= mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
Bien sûr, si vous démarrez à partir de nand, avec de tels paramètres, les ubifs de la quatrième section ne seront pas visibles. Par conséquent, après avoir chargé u-boot dans la RAM, je lui ai défini de force les variables d'environnement suivantes:
setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs)
Et tout fonctionne très bien.
Laissez-moi vous expliquer pourquoi cela est nécessaire: si vous flashez le chargeur de démarrage dans le secteur zéro, la possibilité de travailler avec mfgtool (utilitaire uuu) disparaît. Et à ce stade, consistant en développement et débogage, c'est l'outil principal. Par conséquent, il est plus facile de laisser l'utilitaire uuu s'exécuter et de charger u-boot manuellement à chaque fois.
Lancement de DOOM
Passons à la partie amusante - exécuter DOOM sur la calculatrice. Comme vous pouvez l'imaginer, ce n'est pas en vain que j'ai écrit sur tous les problèmes au début. Vous pouvez exécuter DOOM lorsqu'il est chargé sur un flash NAND, vous pouvez y mettre des cartes de toutes sortes, toutes les versions possibles de DOOM, et en général tout ce que vous voulez. Mais lors de l'exécution en RAM, nous sommes limités par la taille de l'image rootfs à environ 15 Mo (la pratique a montré que 16 roule toujours). À cet égard, j'ai dû sélectionner la version de DOOM et faire le bon assemblage, ainsi qu'apprendre à travailler avec.
Il s'est avéré que toutes les bonnes choses ont été inventées pour nous il y a longtemps, et DOOM peut être assemblé directement dans buildroot sans quitter le canapé. J'ai découvert cela en recherchant sur Google toutes les variantes possibles de DOOM pour les systèmes embarqués et en essayant de les construire. En fait, il suffit de courir:
make menuconfig
Et choisissez DOOM. Ceci est fait dans "
Target packages ---> Games --->
"

Nous avons deux versions de DOOM à notre disposition: chocolate-doom et prboom . Après quelques expérimentations, j'ai réalisé que la destruction du chocolat ne voulait pas s'intégrer dans les initramfs. Sauf si vous supprimez complètement les fichiers wad. J'essayais de trouver des fichiers wad recadrés qui conviendraient à la catastrophe du chocolat. Mais elle a refusé de travailler avec eux. En conséquence, j'ai essayé d'installer la version chocolat sur nand (avec prboom) et l'ai essayé là -bas. J'ai sélectionné des paramètres, etc. L'expérience a abouti à la méthode de lancement suivante:
export SDL_NOMOUSE=1
chocolate-doom -geometry 320x240 -bpp 24 -nomouse
Le résultat m'a beaucoup déçu: cette version de doom mal (ou, au contraire, correctement) étire l'écran, laissant de larges rayures sur les bords de l'écran, ce que je n'aimais vraiment pas.

La version chocolatée de DOOM. Une bande noire est visible ci-dessous.
Au démarrage, ma perte de chocolat me dit ce que fait le redimensionnement de la fenêtre:
I_InitGraphics: 320x240 mode not supported on this machine. I_InitGraphics: Auto-adjusted to 320x200x32bpp.
Par conséquent, je me suis installé sur prboom. J'ai créé l'image avec les fichiers WAD partagés et le prboom lui - même , j'ai supprimé toutes les choses inutiles. Mais, tout de même, pendant très longtemps je n'ai pas pu le faire fonctionner. J'ai lu toutes sortes de manuels, cherché comment configurer pour que tout fonctionne correctement. L'image s'affiche, réagit aux boutons, mais l'écran s'étire maladroitement et affiche des courbes de couleurs. Jusqu'à ce que je trouve les paramètres de lancement idéaux sur un forum.
En général, pour notre calculatrice, le lancement de prboom est le suivant: éteignez la souris, puis lancez prboom avec les paramètres suivants:
export SDL_NOMOUSE=1
/usr/games/prboom -width 320 -height 240 -nosound -vidmode 32bit
Le paramètre clé ici:
"-vidmode 32bit"
.

Je cherchais depuis longtemps des paramètres appropriés, et c'est seulement avec cela que tout a commencé. Pour plus de commodité, j'ai tout écrit dans le script d.sh. Enfin tout fonctionne, vous pouvez même jouer!
Surtout pour vous, j'ai préparé un assemblage mis à jour de flash_utility avec DOOM , que vous pouvez exécuter sur votre calculatrice même sans le flasher, et montrer à vos amis, disent-ils, DOOM fonctionne dans ma calculatrice. Il suffit de démonter la calculatrice, de fermer les contacts décrits dans la première partie et d'exécuter
sudo uuu doom.uu
À la fin de toutes les étapes, vous recevrez une calculatrice, avec linux et DOOM. Pour démarrer DOOM, vous devrez vous connecter et exécuter sur la calculatrice:
./d.sh
Résumer
DOOM fonctionne! Puis-je y jouer? Eh bien, localement, télécharger à partir d'un ordinateur - vous pouvez. Cela a l'air cool et beau, mais en fait, pas vraiment ce que vous voulez obtenir. C’est vraiment cool quand vous êtes dans le métro, prenez une calculatrice et sortez-la de vos jambes larges, allumez-la (le mode d’économie d’énergie ne fonctionne pas pour le moment) et démarrez DOOM. C'est vraiment cool de jouer dans le métro sur une calculatrice dans DOOM, Duke Nukem 3D, Quake I, II, III, etc. Mais le fait demeure: DOOM fonctionne sur ce matériel. Mais il reste encore beaucoup de travail à faire.
En général, il n'y a pas assez au moins une petite communauté autour de cette calculatrice (au moins plus que moi), pour qu'il y ait des testeurs de problèmes, il y ait quelqu'un à qui parler et partager, pour entendre des conseils. L'auteur original s'est clairement refroidi à ce projet, bien qu'il ait fait un travail titanesque. Je le comprends bien, et je ne peux pas lui reprocher de ne pas vouloir l’aider même avec des conseils sur ce projet. Eh bien, il a fait de petites recommandations, mais il n'était clairement plus à lui. Par conséquent, si vous avez des idées, une calculatrice, une envie d'aider, au moins avec des conseils, écrivez ici ou dans le panier, j'en serai ravi!
PS Pourquoi est-ce que je fais ça?
Très souvent, ils me demandent «pourquoi»? Je comprends intellectuellement qu'il est stupide de répondre à cette question, mais je répondrai néanmoins.
Pourquoi un artiste peint-il une image ou un auteur écrit-il un livre? Soyons honnêtes, 90% des livres, peintures et autres œuvres peuvent ne pas voir du tout la lumière, et parmi ceux qui le font, une fraction de pour cent se fera connaître et gagnera un large éventail de lecteurs. En termes simples, la plupart des créateurs font un travail «inutile». De plus, de nombreux ouvrages ne trouvent même jamais leurs lecteurs, mais pourquoi ne le feraient-ils pas? Qu'est-ce qui motive ces gens? Tout est assez banal. Ils sont animés par un sentiment simple:

En termes simples, vous le faites parce que c'est cool et que c'est pressé. Et, curieusement, à l'avenir, cela apportera de grands avantages, bien que pas aussi évidents qu'il n'y paraît.
Fichiers à télécharger
- Micrologiciel mis Ă jour avec DOOM
