J'ai un gros système écrit principalement en C qui fonctionnait dans l'espace utilisateur jusqu'à maintenant. Maintenant, j'ai besoin de compiler le code en tant que module du noyau. Pour cela, afaik, je devrais au moins réécrire le code et remplacer les fonctions comme malloc
, calloc
, free
, printf
avec leurs équivalents noyau, car ce sont uniquement des fonctions de l'espace utilisateur. Le problème est, cependant, que je n'ai pas le code source à certaines bibliothèques sur mesure utilisées dans le système, et ces bibliothèques appellent malloc
etc. dans leurs fonctions. Donc, fondamentalement, je pourrais avoir besoin de réimplémenter toute la bibliothèque.Portage du code de l'espace utilisateur vers l'espace noyau
Maintenant la question: sera-ce un hack vraiment sale, si j'écrire mon propre implémentation de malloc
comme une enveloppe autour kmalloc
, quelque chose comme ceci:
void *malloc(size_t size) {
return kmalloc(size, GFP_USER);
}
redirigent ensuite cette mise en œuvre du système code, qui permettra d'éliminer tous les symbole inconnu dans le module erreurs.
En fait, je pensais que ce serait un problème commun et quelqu'un aurait déjà écrit un tel wrapper kmalloc, mais je googling depuis quelques jours maintenant et n'a rien trouvé d'utile.
EDIT: La raison pour cela est que le système dont je parle était une application en temps réel fonctionnant sur le système d'exploitation en temps réel VxWorks et maintenant nous voulons le porter sur Linux RTAI, où les applications s'exécutent principalement dans le noyau espace. Mais je suppose qu'il y a une possibilité d'avoir du temps réel dans l'espace utilisateur, donc, je devrais probablement faire comme Mike a suggéré et séparer le code en parties noyau et espace utilisateur et communiquer entre eux avec de la mémoire partagée.
Je viens de voir [ce hack] (http://stackoverflow.com/a/14728092/912144) pour gcc qui peut vous être utile. – Shahbaz
Normalement, les gens essaient de sortir les choses du noyau, plutôt que l'inverse. Mon expérience personnelle est que si vous pensez que vous avez besoin de faire un module noyau de votre programme, alors vous le faites probablement mal. –
@JoachimPileborg il est probablement arrivé à penser qu'il sera plus rapide dans l'espace noyau – Ulterior