2010-12-07 66 views
1

j'ai écrit un pilote de périphérique de Linux et mis en œuvre la fonction DEVICE_WRITE comme ceci:sur la fonction d'écriture dans le pilote de périphérique Linux

static int device_write(struct file* file,const char* buff,int count, loff * offp) 
{ 
//some implementation 
printk("write value %x to card\n",value); 
//some implementation 
} 

je aussi mettre en œuvre la fonction device_read et un printk d'imprimer certaines informations qu'il contient. Le problème est que lorsque j'utilise read (fd, buff, 1) dans le programme d'application, le résultat printk est affiché mais lorsque j'utilise write (fd, buff, 1), il n'y a pas de résultat printk. La fonction device_write ne peut pas être appelée .Qu'est-ce qui peut causer ce problème? Est-ce que quelqu'un a déjà rencontré ce genre de problème? Quelqu'un peut-il me donner de l'aide et des suggestions?

+0

http://freshmeat.net/projects/dtrace-for-linux? – nmichaels

+0

Nous avons besoin de beaucoup plus d'informations. Quelle est la valeur? Pourquoi pensez-vous que l'écriture n'est pas appelée? Vous n'avez rien de tel dans votre question, ce code n'est même pas compilable. – Falmarri

Répondre

3

Ceci est seulement une demi-réponse, mais il est trop grand pour un commentaire.

Y a-t-il d'autres actions dans votre fonction device_write?

Faites un très simple printk en haut de la fonction device_write et voir si cela imprime. Quelque chose comme

static int device_write(struct file* file,const char* buff,int count, loff * offp) 
{ 
    printk("%s: %s\n", __FILE__, __func__); 

qui exécute, peu importe quoi qu'il arrive dans la fonction. Si cela s'imprime alors vous pouvez affiner où aller à partir de là.

Si cela ne fonctionne pas, assurez-vous que vous définissez réellement le pointeur de fonction dans la structure de l'appareil. Ou peut-être votre erreur est dans l'application de test. Êtes-vous sûr d'avoir ouvert l'appareil avec des autorisations d'écriture? Ce serait une erreur facile à faire si vous avez copié du code à partir d'un programme initialement écrit juste pour tester la fonctionnalité de lecture.

+0

Merci! J'ai trouvé que j'ai utilisé la fonction ouverte avec le paramètre O_RDONLY, donc je n'ai pas la permission d'écrire le périphérique. Je suis freshman dans la programmation de Linux. Quelle erreur naïve! – Treper