J'ai pris des bits du code d'espace utilisateur que j'ai écrit et l'ai converti pour travailler dans l'espace de noyau (ie using kmalloc(), etc.), ce n'est pas si difficile . Cependant, vous êtes limité à la compréhension du noyau par C, et non de l'espace utilisateur, qui diffère légèrement ... en particulier avec divers types int standard. Lier simplement avec l'espace utilisateur Les DSO ne sont pas possibles - le noyau Linux est monolithique, complètement autonome. Il n'utilise pas libc de l'espace utilisateur, bibliothèques ou autres bits comme d'autres l'ont noté.
9/10 fois, vous trouverez ce dont vous avez besoin quelque part dans le noyau.Il est très probable que quelqu'un d'autre a rencontré le même besoin que vous et a écrit des fonctions statiques dans certains modules pour faire ce que vous voulez. Il suffit de les attraper et de les réutiliser.
Dans le cas de crypto, comme d'autres l'ont dit, il suffit d'utiliser ce qui est dans le noyau. Une chose à noter, vous aurez besoin qu'ils soient activés dans kconfig qui peut ou ne peut pas arriver en fonction de ce que l'utilisateur sélectionne lors de la construction. Donc, attention aux dépendances et soyez explicite, vous devrez peut-être pirater quelques entrées dans kconfig qui sélectionnent également l'API crypto que vous voulez quand votre module est sélectionné. Faire cela peut être un peu pénible en construisant un arbre. Donc, d'une part, nous avons "simplement copier et renommer des choses tout en ajoutant du ballonnement", d'autre part, "vous dites aux gens qu'ils doivent avoir la source complète du noyau". C'est l'une des bizarreries qui viennent avec un noyau monolithique. Avec un Microkernel, presque tout fonctionne dans l'espace utilisateur, pas de soucis liés à un DSO pour certains pilotes ... ce n'est pas un problème. S'il vous plaît ne prenez pas cette déclaration comme un signal pour relancer la philosophie de conception du noyau dans les commentaires, ce n'est pas dans la portée de cette question.