[SOS] Chargement de module dans SOS

Thomas Petazzoni thomas.petazzoni at enix.org
Mar 7 Aou 10:18:08 CEST 2007


Salut,

Le Fri, 15 Jun 2007 19:06:49 +0200,
weisenhorn.geoffroy at club-internet.fr a écrit :

> Je suis actuellement en train de tenter le chargement de modules elf 
> avec SOS et j'aurais besoin d'un avis pour un probleme : 
> Le chargement du module se fait par grub en ajoutant 
> la ligne qui va bien dans le Grub ( module /modules/foo.ro)
> l'image du module se fait juste après l'image du noyau (__e_kernel)
> se qui est très génant pour la suite des operations notamment 
> l'allocation de memoire pour mettre le tableau de pages physiques qui 
> lui aussi se met après l'adresse __e_kernel donc ecrase
> lamentablement mon jolie module ...

Lorsque Grub charge un module, il remplit une structure en mémoire te
disant où se trouve le module. Il faut donc utiliser cette structure
pour savoir où sont les différents modules, et donc placer correctement
ton tableau de pages physiques, et marquer correctement les pages
libres et les pages occupées.

> Pour resoudre ce problème simplement il suffit de deplacer de la
> taille du module notre tableau de  pages physiques seulement il
> serait bien de ne pas marquer les pages occupees par le module comme
> faisant partit du noyau mais juste comme des pages quelconque pour
> pouvoir décharger le module seulement ces pages se trouve entre le
> noyau et le tableau ça fait désordre ... Une autre solution qui
> semble pas complique c'est de mettre le tableau de pages physiques à
> la fin de la memoire ou sinon deplace le module pour le mettre apres
> le tableau de pages physiques c'est possible ?....

Oui, c'est possible, tu peux le passer où tu veux.

> Sinon comment peut on connaitre les symboles des fonctions du noyau
> et surtout les adresses pour linker les symboles inconnues du
> modules  ? 

Pour connaître les symboles des fonctions du noyau, il faut te balader
dans la table des symboles ELF du noyau. Et pour linker les symboles
inconnus des modules, il faut à nouveau se balader dans les structures
ELF du module pour trouver toutes les relocations qu'il y a à faire.

C'est typiquement le travail qui est réalisé par le "loader" de KOS :
linker tous les modules ensemble avec d'exécuter le noyau. Tu trouveras
le code source à l'adresse http://kos.enix.org/cgi/cvsweb/kos/loader/,
et une petite documentation à l'adresse
http://kos.enix.org/~d2/snapshots/kos_current/doc/modules-html/.

Bonne journée,

Thomas
-- 
Thomas Petazzoni - thomas.petazzoni at enix.org
http://{thomas,sos,kos}.enix.org - http://www.toulibre.org
http://www.{livret,agenda}dulibre.org


Plus d'informations sur la liste de diffusion Sos