IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Linux kernel developpement


Sujet :

C

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Linux kernel developpement
    Salut les C,
    Comme le titre l'indique je m'intéresse au noyau linux et a son architecture ainsi que le développement ce qui me pose problème car je ne peut pas tester de code écrit par un débutant et même en recompilant le noyau je ne voit pas comment je pourrai débuter a écrire du code (et surtout le tester) car:

    "Les sources /usr/src/linux-headers-$(uname -r)/* ne sont pas linkable" et je n'ai pas trouver d'équivalent dans /usr/include/

    par exemple pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "usr/src/$(uname -r)/sched.h" // ce qui ne fonctionne pas je sais
    struct task_struct *task ;
    next_task(task) ;
    printf("find a task structure [pid:%d]\n",task->pid) ;
    J'ai chercher un paquet kernel-dev qui n'existe pas et je n'ai pas de dossier:
    /usr/include/kernel

    Alors comment tester du code noyau, quel est la méthodologie a utiliser pour débuter.

    Je cherche juste la bonne méthodologie pour débuter et tester du code noyau sachant que le noyau n'est pas écrit en C normal mais en optimiser et que les fichiers sources sont inutilisables pour #include...

    Je vous serai reconnaissant si vous voulez bien m'éclairez un peu sur le sujet et me guider.
    Merci pour toutes vos réponses éclairés.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Salut,

    Generallement pour commencer tu ecris des LKM. Ce livre est une bonne reference: https://lwn.net/Kernel/LDD3/
    Par exemple, pour commencer j'ai ecrit des rootkits. C'est assez simple de hooker les fonctions kernels et ca permet de se familiariser avec les structures noyau (pas acces a la libc, donc ca pique au debut ).

    Ca te permet de te familiariser avec l'environement et l'API du kernel, sans te prendre trop la tete. Apres, pour vraiment ecrire du code noyau, je connais pas d'autres solutions que de modifier les sources a l'endroit que tu veux et recompiler. Le plus simple je pense est d'essayer de resoudre certains bugs simples.

    Bon courage, c'est un chemin pave de crash/reboot/oops, mais c'est passionant.

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1

  5. #5
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Comme dis sur l'autre forum : pas de libC, donc tu devras recoder ce qui t'est utile.
    Attention toutefois : comme c'est du kernel, il va falloir plutôt se limiter dans les tailles de buffers (genre les char* de taille indéterminée c'est... plutôt non), donc faire les versions N des fonctions (strnlen, strncpy, etc...).
    Des char[512] ça t'évitera de devoir faire des malloc kernels (qui ne sont jamais libérés du coup, sauf si tu refais un petit gestionnaire de mémoire dynamique).
    Maintenant, les globales ont un très gros intérêt, mais comme d'hab' : peuvent entraîner des conséquences sur beaucoup de choses.
    Car "bien évidemment" : tu es en kernel, donc tu as absolument tous les droits sur ta machine, et hormis générer un "kernel panic" qui te fera rebooter, rien ne t'empêcheras d'écrire PARTOUT cette fois.

    Normalement tu as reçu tous les liens les plus utiles pour faire un module et débuter là-dedans, la seule chose que je peux ajouter : vérifie BIEN la version de ton kernel et ce que les bouquins étudient.
    Je ne suis pas expert, mais entre un 2.6 et un 3.2, il est très probable qu'il y ait des différences dans certaines structures, et dans le fonctionnement même.

    En bref :
    - recodage des fonctions de la libc nécessaires
    - buffers limités à la compilation si possible...
    - ...ou comparaison/copie en tailles limitées (strNdup, ...)
    - ...ou micro malloc/free (quand tu auras bien investigué les modules kernel)
    - mots clés "const" et "restrict" à utiliser AUTANT que possible pour t'éviter le plus d'embrouilles possibles
    - variables globales nécessaires dans beaucoup plus de cas
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Bktero Voir le message


    Citation Envoyé par Metalman Voir le message
    Comme dis sur l'autre forum : pas de libC, donc tu devras recoder ce qui t'est utile.
    Certes, mais sans réinventer la roue pour autant.
    Le kernel propose déjà pas mal de trucs (donc les fonctions pour manipuler les chaînes de caractères du genre strcmp), voire plus de trucs que la libc parfois (liste chaînée, arbre rouge-noir, …).
    Voire ici (ou ) pour un petit aperçu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Linux kernel developpement avec un driver [tutoriel].
    Par Luke spywoker dans le forum Contribuez
    Réponses: 8
    Dernier message: 05/05/2014, 12h48
  2. sous-section Linux Kernel dans la section développement Linux
    Par kromartien dans le forum Evolutions du club
    Réponses: 1
    Dernier message: 13/04/2007, 09h36
  3. Linux->kernel->sources : Documentation
    Par doccpu dans le forum Administration système
    Réponses: 3
    Dernier message: 04/09/2006, 11h03
  4. Linux Kernel Developpement
    Par Invité(e) dans le forum Linux
    Réponses: 3
    Dernier message: 13/06/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo