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

Linux Discussion :

ouverture I2c en kernel space


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut ouverture I2c en kernel space
    salut !

    je cherche a ecrire un driver utilisant l'i2c,
    en jettant un coup d'oeil sur i2c-dev.c

    j'ai pu comprendre une partie des primitives dont j'aurais besoin (i2c_master_send, i2c_spin_lock...), cela dit, un petit probleme perciste....
    dans mon cas le driver ne doit faire q'un certain nombre d'initialisations en envoyant des "commandes" via le bus i2c.
    je n'ai donc pas besoin d'ecrire de fonction open read etc...une fois chargé, le driver doit faire ses initialisation et c'est tout.
    ce que je n'arrive pas a comprendre, c'est comment ouvrir l'i2c en kernel space...
    j'ai voulu m'inspirer de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    int i2cdev_open (struct inode *inode, struct file *file)
    {
            unsigned int minor = MINOR(inode->i_rdev);
            struct i2c_client *client;
     
            if ((minor >= I2CDEV_ADAPS_MAX) || ! (i2cdev_adaps[minor])) {
    #ifdef DEBUG
                    printk(KERN_DEBUG "i2c-dev.o: Trying to open unattached adapter i2c-%d\n",
                           minor);
    #endif
                    return -ENODEV;
            }
     
            /* Note that we here allocate a client for later use, but we will *not*
               register this client! Yes, this is safe. No, it is not very clean. */
            if(! (client = kmalloc(sizeof(struct i2c_client),GFP_KERNEL)))
                    return -ENOMEM;
            memcpy(client,&i2cdev_client_template,sizeof(struct i2c_client));
            client->adapter = i2cdev_adaps[minor];
            file->private_data = client;
     
            if (i2cdev_adaps[minor]->inc_use)
                    i2cdev_adaps[minor]->inc_use(i2cdev_adaps[minor]);
     
    #ifdef DEBUG
            printk(KERN_DEBUG "i2c-dev.o: opened i2c-%d\n",minor);
    #endif
            return 0;
    }
    mais je ne voi pas trop comment...recuperer ce fameux client qui devrai correspondre a mon /dev/i2c-0 (que je dois aussi passer en argument à i2c_master_send()


    quelqu'un aurai une idée ?
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    pour preciser ma question:
    comment fait on pour recuperer en kernel space le majeur et le mineur de /dev/i2c-0 par exemple

    et faut il attribuer absolument un majeur a mon driver ?
    mon driver n'aura aucun fop, vu qu'il ne sagit la que d'initialisations...

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    finalement je vais devoir implementer la fonction ioctl qui permettra a l'utilisateur de faire differents types d'initialisations

    le probleme c'est que je n'ai pas le fichier special /dev/audio...
    comment puis-je faire ?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    bon, pour ceux que ca interesse, il faut utiliser i2c_add_driver() a l'initialisation du module.
    par contre je ne sais pas encore comment choisir entre i2c-0 ou i2c-1...

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/07/2008, 10h42
  2. Resau local => ouverture et fermeture
    Par Nutcase dans le forum Développement
    Réponses: 8
    Dernier message: 17/11/2002, 15h16
  3. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20
  4. Réponses: 2
    Dernier message: 22/07/2002, 12h13
  5. Réponses: 2
    Dernier message: 04/06/2002, 10h34

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