Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Projet_MartinGounabou_EnzoEssono_JulienTaran
Submodule Projet_MartinGounabou_EnzoEssono_JulienTaran added at c47f06
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ Several exercises are available :
* GNU/Linux System Programming
* Embedded system with RPI3
* Usefool Tools (autotools, docker, git, ...)
My new fix
Binary file added TP1_MartinGounabou/question4/question4
Binary file not shown.
9 changes: 9 additions & 0 deletions TP1_MartinGounabou/question4/question4.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
printf("Hello World\n");
return EXIT_SUCCESS;
}
7 changes: 7 additions & 0 deletions TP1_MartinGounabou/question5/hello.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include <stdio.h>
#include <stdlib.h>

void Hello(void)
{
printf("Hello World\n");
}
6 changes: 6 additions & 0 deletions TP1_MartinGounabou/question5/hello.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef H_GL_HELLO
#define H_GL_HELLO

void Hello(void);

#endif
Binary file added TP1_MartinGounabou/question5/main
Binary file not shown.
9 changes: 9 additions & 0 deletions TP1_MartinGounabou/question5/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include <stdio.h>
#include <stdlib.h>
#include "hello.h"

int main(void)
{
Hello();
return EXIT_SUCCESS;
}
26 changes: 26 additions & 0 deletions TP1_MartinGounabou/reponses_tp1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

**Reponses aux questions**

Question 1: Qu'est ce qu'un Makefile? À quoi sert make?

le Makefile est un fichier qui contient des paramètres pour une compilation avec gcc

En revanche make est l'outil qui appelle le makefile pour exécuter un ensemble d'actions, comme la compilation d'un projet, l'archivage de document, la mise à jour de site, etc...


Quel compilateur est utilisé ici?

Le compilateur utilisé est le compilateur gcc

Qu'est ce qu'une librairie partagée?

les librairies partagées sont du code compilé destiné à être partagé entre plusieurs différents programmes. Ils sont distribués en tant que fichiers .so


Question 4: Donnez un exemple de fichier C et la ligne de commande correspondante pour obtenir un binaire exécutable (un hello world par exemple).

Fichier question4.c, le code a exécuter est gcc question4.c -o question4

Question 5: Donnez un exemple de fichier C et les lignes de commandes correspondantes pour obtenir une librairie partagée.

fichier question5.c
39 changes: 39 additions & 0 deletions TP2_Exercice1_MartinGounabou/reponses_tp2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Question 1 : Que se passe-t-il au bout de quelques secondes? Qu'en déduisez vous?

Apres quelques secondes, le processus s'arrete et affiche une erreur de segmentation, j'en deduis qu'il y a une violation de memoire

Question 2 : Quel signal a reçu le processus pour se terminer ainsi? Comment vérifiez vous le numéro du signal reçu?

Après avoir l'aide en ligne, la violation de la protection memoire correspond au signal SIGSEGV, qui a pour numero 12, on peut juste executer la commande kill -l , on a la liste des signaux precedes de leurs numeros.

Question 3 : Grâce à GDB et au fichier core généré, analysez la source du problème du binaire gps. Quelle partie du code est fausse? Pourquoi?

Le problème se produit au niveau du code gps, avec l'utilisation de * nmea_vtg (& vtg) * à la ligne 40 de la source, ce qui déclenche une erreur au niveau de la bibliothèque nmea à la ligne 23 avec la commande * met (NULL) *, étant NULL un paramètre défectueux pour les put.

Question 4 : Que se passe-t-il quand vous lancez GDB en mode interactif sur le binaire gps?

lorsque on lance le GDB en mode interactif sur le binaire gps, le programme plante comme precedemment

Question 5 : À quoi sert la commande ldd? Quelle information supplémentaire cela vous apporte-t-il?

La commande ldd permet de lister l'ensemble des bibliothèques partagées requises par un exécutable.

l'information supplementaire est la liste des bibliothèques partagées manquantes, ce qui permet de resoudre les problèmes de bibliothèques partagées manquantes.


Question 6 : Comment résoudre ce problème en tant qu'utilisateur? N'hésitez pas à regarder le fichier gps/run.sh.

pour resoudre le probleme il suffit d executer les commandes suivantes
- LD_LIBRARY_PATH="$(pwd)/lib"
- export LD_LIBRARY_PATH

Question 7 : Quelle est la différence entre les commandes s et n dans le prompt gdb suite à un breakpoint?

La commande n, s'exécute jusqu'à la prochaine ligne de code dans le code source, tandis que La commande s, fait la même chose, mais n'entre pas dans les fonctions telles qu'elles apparaissent dans le code, sautant leur exécution.

Question 8 : Dans quel contexte ce type d'outils peut être intéressant?

ce type d'outils peut etre interresant lorsque on travaille sur un meme projet a plusieurs. un autre pourra debugger votre code de son ordinateur.



91 changes: 91 additions & 0 deletions TP4_MartinGounabou/tp4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
Question 1: Décriver de manière plus précise l'utilité ainsi que la syntaxe de chacun des 3 fichiers mentionnés ci-dessus


- configs/embsys_defconfig : c'est le fichier de configuration de buildroot, ce fichier contient les intructions permettant de spécifier les éléments que nous voulons dans le système qui sera construit, la configurations se fait en choisissant des booléens ou des strings.
syntaxe:
BR2_PACKAGE_MODULE_INIT_TOOLS is not set
BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL=""

- busybox.config : C'est le fichier de configuration de busybox, qui permet plus ou moins de faciliter la création du lien symbolique. Les champs peuvent être activés ou désactivés en utilisant ( is not pu = y )
syntaxe
CONFIG_FEATURE_SYSLOGD_DUP is not set
CONFIG_FEATURE_SYSLOGD_CFG=y

- users.table : C'est un fichier utilisé par buildroot pour sauvegarder les informations relatives aux utilisateurs comme leurs shell par defaut. Chaque ligne correspond à un utilisateur.
syntaxe
user -1 users_group -1 =user1* /home/user /bin/sh -


Question 2: En considérant que la cible est une carte RaspberryPi3 avec un OS 32 bits, quel est le fichier de configuration Buildroot par défaut à utiliser?

raspberrypi3_defconfig dans le dossier configs


Question 3: Que contient le répertoire package et à quoi servent les sous-répertoires et fichiers associés?

Le dossier package contient tous les packages qui pourront être utilisés ou disponible à l'OS cible.
Les sous repertoires contiennent les fichiers HASHS qui sont couramment utilisés comme une méthode de vérification de la taille du fichier.
il y a aussi les fichiers configure.in qui contient les configurations du package

Question 4: À quoi sert la commande précédente?

cette commande permet le lancement d’une IHM de configuration utilisant Kconfig se fait, elle permet aussi de configuré le busybox, on obtient un fichier de configuration à la sortie.

Question 5: En naviguant dans le menu, repérez:

- Architecture : ARM little endian
- CPU : ARMV8
- ABI : EABIhf
- Bibliothèque C : uClibc-ng
- Compilateur croisé : GCC 6.x
- version du noyau : depend du depot git
(https://github.com/raspberrypi/linux.git) URL of custom reposito│ │
│ │ (9126e25b0934bd7bd843763310ea4b34c6e139d0) Custom repository vers│


Question 6: En recherchant dans l'interface de Buildroot, déterminez si le paquet openssh sera compilé et disponible dans l'OS cible. De même, retrouver cette information en analysant le fichier de configuration embsys_defconfig.

Dans le fichier embsts.config on a la ligne suivante BR2_PACKAGE_OPENSSH=y qui prouve que le package sera compilé et utilisable.
De même en faisant une recherche dans l'IHM ( /openshh ) on a BR2_PACKAGE_OPENSSH [=y] qui prouve que le package sera compilé et utilisable.

Question 7: Qu'est ce que busybox? À quoi sert la commande make busybox-menuconfig? Qu'obtiens t'on et que pouvons nous faire?

busybox est un binaire unique fournissant les commandes grâce à un jeu de liens symboliques, la commande busybox-menuconfig permet de spécifier les configurations du busybox, après on obtiens un fichier de configuration qui sera utilisé par le buildroot pour compiler l'OS cible.

Question 8: Que contient le répertoire output/host? À quoi correspond le binaire output/host/usr/bin/arm-linux-gcc?

le répertoire output/host contient la chaine de cross-compilation

le binaire output/host/usr/bin/arm-linux-gcc est la chaine d'outils de cross-compilation

Question 9: Décrire le résultat de la commande file. Que se passe t-il si vous exécutez la commande ./hw?

nous avons un exécutable de type "object share" avec des liens dynamiques ce i signifie que es bibliothèques externes incluses dans le code source sont compilées mais un lien vers la bibliothèque compilée (ou un objet dans la perspective de l'éditeur de liens) est ajouté à l'exécutable (et les bibliothèques / objets compilés sont chargés par l'éditeur de liens au moment de l'exécution si nécessaire.
Le compilateur utilisé est le gcc de notre ordinateur.
Le fchier hw s'exécute parfaitement


Question 10: Utilisez la commande file sur le binaire résultant. Quelle différences constatez vous par rapport au cas précédent (binaire généré avec gcc)? Que se passe t-il si vous essayez d'exécuter la commande ./hw? Expliquez pourquoi.

ous avons un exécutable de type "executable", la différence est que un executable compilé peut être lié à un "object share" mais pas un "executable".
ce fichier est compilé avec le compilateur compilé
il y a une erreur de format.
avant de pour executer le fichier .hw il faudrait ajouter les varibales d'environnements avec une comande export ...

Question 11: Que contient le répertoire output/images? Décrivez notamment l'utilité des fichiers rootfs.tar, zImage et sdcard.img.

le repertoire output/images contient les images compilées.


Question 12: Que vous dis les résultats de la commande file lorsque vous l'utilisez sur les fichiers zImage et sdcard.img?


le fichier zimage est lié au kernel tandis que sdcar.img enumère les partitions de cartes SD ainsi que leurs tailles ( en gros des informations sur la carte SD du système compilé)


Question 13: Que contient le répertoire /tmp/rootfs?


le repertoire /tmp/roootfs contient plusieurs sous-repertoires (etc lib linuxrc mnt proc run sys usr ,dev home lib32 media opt root sbin tmp var )


28 changes: 28 additions & 0 deletions TP5_autotools_MartinGOUNABOU/tp5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
Question 1 : En analysant le contenu du fichier configure.ac, déterminez quel header est vérifié pendant la phase de configuration.

sys/socket.h

Question 2 : Modifiez le fichier configure.ac pour forcer l'étape de configuration à vérifier la présence d'un header inexistant sur le système. Relancez la phase de configuration et observez les plaintes! Remettez les choses dans l'ordre lorsque vous avez terminé.


en ajoutant la ligne suivante dans le fichier configure.ac AC_CHECK_HEADER(sys/inexistant.h, [], [AC_MSG_ERROR(["Couldn't find sys/socket.h"])]) on obtient les erreurs suivantes :
checking sys/inexistant.h usability... no
checking sys/inexistant.h presence... no
checking for sys/inexistant.h... no


Question 3 : En cherchant sur le net, déterminez à quoi sert la macro AC_ENABLE_SHARED utilisée dans le fichier configure.ac.

Modifiez le comportement par défaut pour LT_INITactiver les bibliothèques partagées.

Question 4 : À quoi sert le fichier Makefile.am?

Makefile.amest un fichier défini par le programmeur et est utilisé par automakepour générer le fichier Makefile.in


Question 5 : Modifiez le fichier Makefile.am pour qu'il compile le fichier src/miniserver/miniserver.c en un binaire nommé miniserver.

fait

Question6 : test de fonctionnement
erreur lors de l execussion
Empty file added test.txt
Empty file.