Je construis un noyau personnalisé pour Mac OS (Mountain Lion, Darwin 2050.22.13). Je peux très bien construire le noyau et je peux y ajouter des choses mais il me manque quelque chose.Utilisation du noyau Darwin personnalisé
Pour être bref, voici un exemple de ce que j'essaie de faire.
Disons que je veux ajouter une fonction [my_func (void *)] dire, bsd/kern/kern_fork.c Je peux ajouter un fichier inclure et le coller dans osfmk/bsd et changer le Makefile pour que le nouveau fichier .h est maintenant copié dans BUILD/obj/RELEASE_X86_64/EXPORT_HDRS/
J'ai également ajouté le nom de la fonction à config/BSDKernel.exports. Je peux voir la fonction avec son symbole dans/mach_kernel, donc cela semblerait bien.
Maintenant, voici la partie difficile. Ce n'est pas difficile en soi mais je ne peux pas le comprendre. Ce que je veux faire, c'est être capable de faire un appel à ma fonction à partir d'un kext que j'écris aussi. Fondamentalement, ce serait une sorte d'API privée pour moi.
Mon kext compile bien mais quand je cours kextload/kextutil il se plaint qu'il ne peut pas trouver le symbole my_func.
(noyau) kxld [com.blah.foo.kext]: Les symboles suivants ne sont pas résolus par cette kext (noyau) kxld [com.blah.foo.kext]: _my_func
kextlibs retours: pour toutes les architectures: com.apple.kpi.libkern = 12.3
pour x86_64: 1 symbole ne se trouve pas dans une bibliothèque kext
la question est de savoir comment puis-je faire pour que ma fonction (s) visible à mon kext (s)? Merci!
Merci! Je pensais la même chose au début, mais cela ne semble pas poser de problème. Voici une partie de mon Info.plist dans le kext qui utiliser la fonction (s): OSBundleLibraries \t \t com.apple.kpi.libkern \t \t 10,8 \t \t com .apple.kpi.bsd \t \t 10,8 \t \t com.apple .kpi.mach \t \t 10,8 \t --- Il doit y avoir quelque chose que je ne fais pas. Assez drôle, en regardant les fichiers xxxx.exports je peux voir les apis exportés comme current_task() et ma propre API n'est dans aucun de ces fichiers. –
J'ai mis à jour ma réponse avec une autre théorie. J'espère que vous pouvez l'obtenir pour travailler avec ça. En passant, 10.8 dans OSBundleLibraries se réfère au nombre de Darwin - 10.8 signifie OSX 10.6.8, pas Mountain Lion (c'est 12.0). Juste au cas où ce n'était pas clair. – pmdj
Merci! Je vais essayer quelques fois, je l'espère, aujourd'hui. Je publierai une mise à jour dès que j'aurai commencé à travailler. Je documente ce genre de choses au fur et à mesure. –