Forum Linux.noyau Call back sur un dossier du fs /proc

Posté par .
Tags : aucun
1
22
jan.
2009
Salut,

Je suis en train de développer un module noyau qui utilise le système de fichier virtuel /proc.
Je me demandais s'il était possible d'attacher un call back sur un dossier de ce système de fichier.
Le noyau utilise la même structure (proc_dir_entry) pour un fichier et un dossier. Je vais essayer d'attacher une fonction call back sur un des deux pointeurs (read_proc ou write_proc) de la structure de mon dossier mais je ne sais pas si il faut utiliser le même prototypage que pour un fichier.
Je vous pose donc la question pour savoir si je fonce dans le mur.

Merci.
  • # bon j'avoue

    Posté par . Évalué à 1.

    j'ai pas du tout compris ce que tu compte faire.
    Mais sous unix tout est fichier donc a priori c'est dans l'esprit effectivement.
    Maintenant ce que je ne comprend pas c' est pourquoi tu n'utiliserais pas la fops de ton module dans /dev ? Car /proc est plutot dans l'information module->user que dans l'interaction module<->user
    • [^] # Re: bon j'avoue

      Posté par . Évalué à 1.

      Le but est de créer des fichiers depuis l'espace utilisateur dans un dossier spécifique du procfs qui sont utilisés à la fois par le noyau et par d'autres applications "user".
      J'aimerais pouvoir intercepter la création d'un fichier ou bien lister et lire ces fichiers dans ce dossier depuis le noyau.

      Je ne saisie pas 'intérêt de pouvoir créer des fichiers dans le procfs depuis l'espace utilisateur s'il n'est pas possible de le remonter au noyau. Pour toi le procfs ne sert qu'à faire transiter des info depuis le noyau vers l'espace utilisateur ?

      PS : que signifie fops ?
      • [^] # about fops

        Posté par (page perso) . Évalué à 1.

        struct file_operations *fops : pointeur vers une structure qui contient des pointeurs de fonction. Ils définissent les fonctions appelées lors des appels systèmes (open, read...) du côté utilisateur.

        Par exemple :
        fops = {
        read : my_read_function,
        write : my_write_function,
        open : my_open_function,
        release : my_release_function /* correspond a close */
        };
      • [^] # Re: bon j'avoue

        Posté par . Évalué à 2.

        Tu ne peux pas lire/écrire dans un fichier depuis le noyau. Tu ne dois pas tenter de le faire non plus car il y a beaucoup de cas ou le noyau tourne mais ou les fichiers ne sont pas accessibles.

        "La première sécurité est la liberté"

      • [^] # Re: bon j'avoue

        Posté par . Évalué à 1.

        bon je pense que la lecture du rubiny te sera d'une grande aide
        http://lwn.net/Kernel/LDD3/
        tu trouveras toutes les reponses a tes question (y compris sur le passage d'argument au module au moment du chargement qui serait bien plus souple que le define a la compilation).
        Pour le fops et le role de /proc dans le systeme les explications si dessous sont suffisantes.
        Bonne lecture
  • # Fs dédié

    Posté par (page perso) . Évalué à 2.

    Ca ne va pas trop t'aider vu que je ne connais pas la réponse, mais pour ce genre d'utilisation j'aurais plutôt vu un fs dédié comme devpts ou sys.
  • # ben en fait non

    Posté par (page perso) . Évalué à 2.

    Le truc de /proc, c'est qu'il est généré par le noyeau à la volée qu'au moment ou tu va voir dedans (genre "ls /proc")

    Donc tu peux, via inotify détecter des processus userland qui vont aller voir dans /proc, mais tu ne recevra aucun callback pour par exemple la création d'un nouveau répertoire /proc/$pid associé à un nouveau processus, vu que ce répertoire n'est pas réellement créé.

    Hint: Tu peux tester ce genre de choses avec la commande inotifywait dans un terminal.
  • # Autre question pour mle Makefile

    Posté par . Évalué à 1.

    Une autre petite question.
    Comment je peux passer des options à la compilation du module, comme une option de debug ?
    Voila le makefile que j'utilise :

    obj-m += my_driver.o

    my_driver-objs := mydriver1.o mydriver2.o
    all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


    J'aimerai passer une option qui active le debug et une qui donne le niveau de "verbose" (entre 0 et 3).
    • [^] # Re: Autre question pour mle Makefile

      Posté par . Évalué à 2.

      J'ai trouvé ma réponse. Il suffit de rajouter à ce Makefile les options :


      EXTRA_CFLAGS += -DCONFIG_DRIVER_DEBUG -DCONFIG_DRIVER_DEBUG_VERBOSE=3


      Ça correspond à un #define dans le code.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.