diff --git a/Projet_MartinGounabou_EnzoEssono_JulienTaran b/Projet_MartinGounabou_EnzoEssono_JulienTaran new file mode 160000 index 00000000..c47f06eb --- /dev/null +++ b/Projet_MartinGounabou_EnzoEssono_JulienTaran @@ -0,0 +1 @@ +Subproject commit c47f06eb44fc96970f0abfcc941ec16425b2a9e6 diff --git a/README.md b/README.md index c8cbeb53..50a6e5fc 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,4 @@ Several exercises are available : * GNU/Linux System Programming * Embedded system with RPI3 * Usefool Tools (autotools, docker, git, ...) +My new fix diff --git a/TP1_MartinGounabou/question4/question4 b/TP1_MartinGounabou/question4/question4 new file mode 100755 index 00000000..9fb9b939 Binary files /dev/null and b/TP1_MartinGounabou/question4/question4 differ diff --git a/TP1_MartinGounabou/question4/question4.c b/TP1_MartinGounabou/question4/question4.c new file mode 100644 index 00000000..130f4430 --- /dev/null +++ b/TP1_MartinGounabou/question4/question4.c @@ -0,0 +1,9 @@ +#include +#include + + +int main(void) +{ + printf("Hello World\n"); + return EXIT_SUCCESS; +} diff --git a/TP1_MartinGounabou/question5/hello.c b/TP1_MartinGounabou/question5/hello.c new file mode 100644 index 00000000..7e1bb28e --- /dev/null +++ b/TP1_MartinGounabou/question5/hello.c @@ -0,0 +1,7 @@ +#include +#include + +void Hello(void) +{ + printf("Hello World\n"); +} diff --git a/TP1_MartinGounabou/question5/hello.h b/TP1_MartinGounabou/question5/hello.h new file mode 100644 index 00000000..6213682f --- /dev/null +++ b/TP1_MartinGounabou/question5/hello.h @@ -0,0 +1,6 @@ +#ifndef H_GL_HELLO +#define H_GL_HELLO + +void Hello(void); + +#endif diff --git a/TP1_MartinGounabou/question5/main b/TP1_MartinGounabou/question5/main new file mode 100755 index 00000000..7ce40d82 Binary files /dev/null and b/TP1_MartinGounabou/question5/main differ diff --git a/TP1_MartinGounabou/question5/main.c b/TP1_MartinGounabou/question5/main.c new file mode 100644 index 00000000..215e892d --- /dev/null +++ b/TP1_MartinGounabou/question5/main.c @@ -0,0 +1,9 @@ +#include +#include +#include "hello.h" + +int main(void) +{ + Hello(); + return EXIT_SUCCESS; +} diff --git a/TP1_MartinGounabou/reponses_tp1.txt b/TP1_MartinGounabou/reponses_tp1.txt new file mode 100644 index 00000000..cc1716a7 --- /dev/null +++ b/TP1_MartinGounabou/reponses_tp1.txt @@ -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 diff --git a/TP2_Exercice1_MartinGounabou/reponses_tp2.txt b/TP2_Exercice1_MartinGounabou/reponses_tp2.txt new file mode 100644 index 00000000..fb1156f3 --- /dev/null +++ b/TP2_Exercice1_MartinGounabou/reponses_tp2.txt @@ -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. + + + diff --git a/TP4_MartinGounabou/tp4.txt b/TP4_MartinGounabou/tp4.txt new file mode 100644 index 00000000..e13f33b2 --- /dev/null +++ b/TP4_MartinGounabou/tp4.txt @@ -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 ) + + diff --git a/TP5_autotools_MartinGOUNABOU/tp5.txt b/TP5_autotools_MartinGOUNABOU/tp5.txt new file mode 100644 index 00000000..bc8acc2d --- /dev/null +++ b/TP5_autotools_MartinGOUNABOU/tp5.txt @@ -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 diff --git a/test.txt b/test.txt new file mode 100644 index 00000000..e69de29b