Ctris works and telnet too
This commit is contained in:
191
tp6.md
191
tp6.md
@@ -814,6 +814,197 @@ Le code du testeur n'est pas sur le git car il est assez petit pour tenir sur ce
|
||||
|
||||
## Compilation croisée de la librairie ncurses
|
||||
|
||||
`wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.5.tar.gz`
|
||||
|
||||
`xz -d ncurses-6.5.tar.gz.xz`
|
||||
|
||||
`tar -xvf ncurses-6.5.tar.gz`
|
||||
|
||||
ensuite dans le repertoire nouvellement créé :
|
||||
|
||||
`./configure --host=arm-linux --prefix=/usr --without-progs --with-shared`
|
||||
|
||||
On met à jour la variable d'environnement
|
||||
|
||||
```
|
||||
echo $CC
|
||||
arm-buildroot-linux-musleabi-gcc
|
||||
```
|
||||
|
||||
Ensuite on peut lancer la compilation :
|
||||
|
||||
`make -j 8`
|
||||
|
||||
Et evidemment comme dhab ca prend 2h sur ma vm mais pas de soucis.
|
||||
|
||||
Je créée ensuite un repertoire de staging "/home/moi/tp/lib/ncurses/buildNcurse" et on peut faire l'installation:
|
||||
|
||||
`make DESTDIR=/home/moi/tp/lib/ncurses/buildNcurse install`
|
||||
|
||||
Dans le repertoire staging sous usr on peut voire cette arborescence :
|
||||
|
||||
`bin include lib share`
|
||||
|
||||
De ce que je comprends dans le tp, le contenu qui nous intéresse se trouve dans /lib
|
||||
|
||||
```
|
||||
ls | grep .so
|
||||
libformw.so
|
||||
libformw.so.6
|
||||
libformw.so.6.5
|
||||
libmenuw.so
|
||||
libmenuw.so.6
|
||||
libmenuw.so.6.5
|
||||
libncursesw.so
|
||||
libncursesw.so.6
|
||||
libncursesw.so.6.5
|
||||
libpanelw.so
|
||||
libpanelw.so.6
|
||||
libpanelw.so.6.5
|
||||
```
|
||||
|
||||
## [Q5] Quels répertoires avez-vous copiés ?
|
||||
|
||||
J'ai commencé par mettre le libncursesw.so.6.5 dans le repertoire /lib de mon système embarqué, mais je me suis aussi dit que ca coutait pas bien cher de mettre les autres et que si ca se trouve Ctris aura besoin d'elles aussi.
|
||||
|
||||
Donc en tout j'ai mis
|
||||
|
||||
- libncursesw.so.6.5
|
||||
- libpanelw.so.6.5
|
||||
- libmenuw.so.6.5
|
||||
- libformw.so.6.5
|
||||
|
||||
EDIT DECOUVERTES PENDANT L'INSTALLATION DE CTRIS: Finalement je n'ai pris que la lib libncursesw.so.6 et j'ai pris ce qui se trouvait sous /usr/share et je l'ai mis dans un repertoire /usr/share nouvellement créé dans le système embarqué.
|
||||
|
||||
## Compilation croisée de CTRIS
|
||||
|
||||
`git clone https://github.com/0xminik/ctris.git`
|
||||
|
||||
Il faut modifier le makefile pour changer différents paramètres.
|
||||
|
||||
1: Il faut changer le compilateur CC avec notre gcc arm
|
||||
|
||||
old `CC=gcc`
|
||||
new `CC=arm-buildroot-linux-musleabi-gcc`
|
||||
|
||||
old `CFLAGS=-Wall -fomit-frame-pointer -O3`
|
||||
new `CFLAGS=-Wall -fomit-frame-pointer -O3 -I/home/moi/tp/lib/ncurses/buildNcurse/usr/include`
|
||||
|
||||
old `LIBS=-lm -lncurses`
|
||||
new `LIBS=-L/home/moi/tp/lib/ncurses/buildNcurse/usr/lib -lm -lncursesw`
|
||||
|
||||
et ensuite on peut faire un `make`
|
||||
|
||||
Maintenant on a un exectuable ctris que on peut mettre sur le système embarqué
|
||||
|
||||
Et après un `chmod +x ctris`
|
||||
|
||||
Quand on essaie de `./ctris` on a un message d'erreur qui nous indique que la librairie ncurses demandée n'est pas la 6.5 mais la 6, je remplace donc la lib et ensuite on peut re essayer de lancer ctris :
|
||||
|
||||
```
|
||||
~ # ./ctris
|
||||
Error opening terminal: vt102.
|
||||
```
|
||||
|
||||
Après un peu de googling je comprends que le repertoire ncurses /usr/share peut avoir une utilité.
|
||||
|
||||
J'ai donc créé un repertoire share dans /usr sur la machine embarquée et j'y ai mis tout ce qui se trouvait dans /usr/share dans le repertoire staging.
|
||||
|
||||
Desormais quand on tente de lancer ctris on a l'erreur attendue :
|
||||
|
||||
```
|
||||
~ # ./ctris
|
||||
ERROR, your terminal can't display colors.
|
||||
```
|
||||
|
||||
## [Q6] Quelle est le type du terminal courant sur votre système embarqué ?
|
||||
|
||||
On peut voir quel terminal notre système embarqué utilise comme cela :
|
||||
|
||||
```
|
||||
~ # echo $TERM
|
||||
vt102
|
||||
```
|
||||
|
||||
Le vt102 est un terminal très ancien (1978 de ce que j'ai pu voir sur internet) sur des machines de l'époque. Il est donc très barebones et ne peut pas afficher de couleurs ou autres choses plus avancées que du texte simple.
|
||||
|
||||
On peut changer ca avec `export TERM=linux`
|
||||
|
||||
Et avec ce nouveau terminal on peut voir des couleurs quand on fait des ls et quand on lance ctris ca fonctionne !
|
||||
|
||||
Mais quand on redémarre le système, le terminal revient au mode Vt102.
|
||||
|
||||
Pour ca on peut aller dans notre /etc/inittab et changer la ligne
|
||||
|
||||
`::respawn:/sbin/getty 115200 ttyS0`
|
||||
|
||||
en
|
||||
|
||||
`::respawn:/sbin/getty 115200 ttyS0 linux`
|
||||
|
||||
A defaut d'avoir un fichier .profile dans /etc
|
||||
|
||||
## [Q7] Quelle en est la raison à votre avis ?
|
||||
|
||||
Bon honnêtement je n'ai pas spécialement vu de ralentissement et je trouvais pas le jeu peu fluide mais la raison pour laquelle ca n'est pas aussi fluide que sur un vrai écran natif c'est que tout est envoyé caractère par caractère en série et donc forcément ca pue un peu pour des applications qui utilisent ncurses qui demande beaucoup de caractères par seconde pour mettre à jour tout l'écran.
|
||||
|
||||
Du moins c'est mon avis.
|
||||
|
||||
## Mise en place d’un serveur telnet
|
||||
|
||||
Si on fait un `telentd --help` sur le système embarqué l'aide apparait donc j'ai la chance de ne pas avoir à recompiler un busybox.
|
||||
|
||||
On lance un telnetd en foreground -F
|
||||
|
||||
`telnetd -F`
|
||||
|
||||
Du côté de la machine hôte on peut faire
|
||||
|
||||
`brew install telnet`
|
||||
|
||||
et ensuite
|
||||
|
||||
```
|
||||
telnet 192.168.144.100
|
||||
Trying 192.168.144.100...
|
||||
Connected to 192.168.144.100.
|
||||
Escape character is '^]'.
|
||||
Connection closed by foreign host.
|
||||
```
|
||||
|
||||
Et du côté du système embarqué on a ce message :
|
||||
|
||||
`telnetd: can't find free pty`
|
||||
|
||||
Comme marqué dans le tp pour solutionner ce problème on peut monter le système de fichier virtuel pty dans /dev/pty.
|
||||
|
||||
`mkdir /dev/pts`
|
||||
|
||||
`mount -t devpts devpts /dev/pts`
|
||||
|
||||
Et la si je lance un telnet et que je tente de me connecter depuis ma machine hôte ca fonctionne !! Magnifique plus besoin d'utiliser ces fichus câbles.
|
||||
|
||||
honnêtement je ne vois pas forcément la différence de fluidité mais bon le fait de plus avoir besoin de se brancher avec le port série c'est vraiment un plus !
|
||||
|
||||
## [Q8] Quels changements avez-vous effectués pour réaliser ceci ?
|
||||
|
||||
Pour faire en sorte que le serveur telnetd soit lancé au démarrage on peut créer un petit script dans `/etc/init.d`
|
||||
|
||||
`vi Stelnetd.sh`
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
mkdir /dev/pts
|
||||
mount -t devpts devpts /dev/pts
|
||||
telnetd
|
||||
```
|
||||
|
||||
`chmod +x Stelnetd.sh`
|
||||
|
||||
Et avec ca, après chaque reboot ce script est lancé et je peut accèder au système embarqué sans utiliser le port série !!
|
||||
|
||||
## Modification de CTRIS pour utiliser le joystick de la carte MyLab1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user