• [^] # Re: Plus de contexte

    Posté par . En réponse au message Comportement étrange de l'ouverture d'un device. Évalué à 1.

    Le /dev/my_test est ouvert par un module que j'ai écrit , c'est un très bête module de type filesystem :

    static struct file_operations hello_ops= {
    .read = helloRead,
    .write = helloWrite,
    .open = helloOpen,
    .release = helloRelease
    };

    Avec :

    static int helloOpen(struct inode *inode, struct file *file) {
    printk(KERN_DEBUG "hello2 open()\n");
    return 0;
    }
    Il y a aussi dans le init (avec major à 0)
    ret = register_chrdev(major,HELLO_DEV_NAME,&hello_ops);
    printk(KERN_ALERT "MAJOR HELLO2= %d\n",ret);

    Je retrouve dans le dmesg le majeur puis je crée mon /dev/my_test : mknod /dev/my_test c 254 0

    Si j'essaye de lire /dev/my_test avec cat pas de problème.
    Si avec mon programme j'essaye de lire /dev/zero par exemple il fonctionne. mais pas /dev/my_test
    J'ai regardé avec valgrind , pas de problème sur mon programme.

    Voici un programme de test minimal qui plante :

    int main(int argc, char * argv[])
    {
    int fbdesc;

    fbdesc = open("/dev/oco-out", O_RDONLY|O_LARGEFILE );
    if(fbdesc == -1)
    {
    perror("open fb");
    exit(-1);
    }

    close(fbdesc);
    exit(0);
    }

    compilé avec -g -D_GNU_SOURCE -Wall