URL: https://linuxfr.org/forums/linux-noyau/posts/acces-aux-ressources-depuis-un-module-kernel-en-c Title: accès aux ressources depuis un module kernel en C Authors: Graveen Date: 2013年05月31日T09:24:11+02:00 License: CC By-SA Tags: code, i2c et module Score: 0 Salut, Je vous explique ce titre un peu abstrait par un exemple: j'ai un module noyau, par exemple l'accès au bus i2c. On va prendre l'i2c, parce que là, je n'ai pas d'erreurs sur la chaine (compilation module, compilation en userland) et tout fonctionne. Donc j'ai a) un module kernel i2c-dev.ko qui pour chaque bus i2c me crée un periphérique /dev/i2c-x, et des outils qui exploitent /dev/i2c-x (par exemple les i2c-tools, merci pour cette collection trés pratique). Mon problème est un souci de wrapping. Je souhaite utiliser directement, depuis un module noyau, des opérations plus spécifiques, et exposer cette API. Mais je n'y arrive pas. Je ne peux pas utiliser open(), ioctl(), read(), write() car je n'ai pas accès à la glibc. Du coup je reste à tourner autour. J'ai repris i2c-dev, car je peux compter dessus, sur la bonne initialisation du bus. Mais aprés ? Comment effectuer l'ouverture du bus (via - ou pas - son /dev/i2c-0), et écrire dessus ? Quelles APIs utiliser ? Comment suivre ce sur quoi wrappe open(), ioctl() etc ? (pour l'histoire, non, je ne peux pas rester en userland, je suis obligé de traiter ca dans le kernelspace ;) ) Merci ! J'ai essayé quelque mailing-lists (i2c du kernel), mais mon message est inapproprié. Si vous avez des endroits où je puisse trouver de l'aide, je suis preneur ! **La solution (MAJ):** Comme le suggère TheBreton, la strcture file_operations permet d'avoir l'équivalence glibc <--> kernel fonction. Autre point, dans mon cas, j'ai choisi de piloter le bus relativement près du hardware, et j'ai réalisé cela avec i2c_get_adapter() et i2c_transfer(), à l'aide d'une simple structure i2c_msg. Je peux donc propser dans mon driver des fonctions simples et concises accessible à travers la fops ioctl() de mon module. Merci !

AltStyle によって変換されたページ (->オリジナル) /