web-dev-qa-db-fra.com

Différence entre les fichiers .o et .ko

J'écris un module Linux simple mod.c. Lorsque je compile un fichier mod.c, il crée deux fichiers de sortie mod.o et mod.ko. Donc, je veux juste savoir, quelle est la différence entre le fichier mod.o et mod.ko?

48
beparas

La réponse courte est que le fichier . Ko est votre fichier objet lié à certaines structures de données générées automatiquement par le noyau dont le noyau a besoin.

Le fichier . O est le fichier objet de votre module - le résultat de la compilation de votre fichier C. Le système de construction du noyau crée ensuite automatiquement un autre fichier C avec des structures de données décrivant le module du noyau (nommé your_module_kmod.c), compile ce fichier C dans un autre fichier objet et relie votre fichier objet et le fichier objet qu'il a construit ensemble pour créer le - . ko fichier.

L'éditeur de liens dynamique dans le noyau qui est chargé de charger les modules du noyau, s'attend à trouver la structure de données que le noyau a placée dans l'objet kmod dans le fichier . Ko et ne pourra pas charger votre module du noyau sans eux.

44
gby

Avant Linux 2.6, un programme d'espace utilisateur interpréterait le fichier objet ELF (.o) et ferait tout le travail de le lier au noyau en cours d'exécution, générant une image binaire terminée. Le programme transmettrait cette image au noyau et le noyau ferait un peu plus que la coller en mémoire. Sous Linux 2.6, le noyau fait la liaison. Un programme d'espace utilisateur transmet le contenu du fichier objet ELF directement au noyau. Pour que cela fonctionne, l'image d'objet ELF doit contenir des informations supplémentaires. Pour identifier ce type particulier de fichier objet ELF, nous nommons le fichier avec le suffixe ".ko" ("objet noyau") au lieu de ".o" Par exemple, le pilote de périphérique série qui dans Linux 2.4 vivait dans le fichier serial.o sous Linux 2.6 réside dans le fichier serial.ko.

depuis http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html .

15
Raulp