[SOS] RE : Chargement de module dans SOS

Romain LABBE labbe.romain at wanadoo.fr
Mer 20 Juin 14:38:27 CEST 2007


Salut,

Y'a pas beaucoup d'activité en ce moment sur la newsgroup, je me permet de
repondre, les experts ne sont pas la. (je n'en suis pas un)

Bon

> 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) 

Je connais pas bien grub mais je pense avoir pigé, il te colle l'image juste
apres le _end_kernel déclaré dans le ld, ok

> 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 ... 

Effectivement !

> 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

Oui, pourquoi ne pas ajouter dans ton ld un marqueur de fin du module ex:
_e_module et tu creera le tableau de page physique a partir de _e_module

Pour ne pas marquer le page, de tête regarde dans pagephy.c tu trouvera la
boucle qui initialise le tableau de page physique. Rien ne t'empeche de
rajouter un interval
If (( phyadr > _e_kernel ) && ( phyadr < _e_module ) alors tu la flag les
pages occupé  autrement.

> pour pouvoir décharger le module seulement ces pages se trouve entre le
noyau et le tableau ça fait désordre ...

Bah en memoire virtuelle tout est désordre finallement ,du coup tu t'en
tape, si tu veux décharger ton module, tu liberes les pages et quand tu les
remaperas a une VMM differentes tu te tapera de savoir ou est la MEMPHY.
(sauf si tu fais du DMA ou des chose pas catho sur les handle
d'interruption)

> 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 ?....

Tout est possible, il te suffit de connaître la taille de ta ram (Cf Grub
sai apparemment tres bien faire ca) puis au lieu d'initialisé le tableau de
pagephy a _e_kernel tu le déclare a: RAM_SIZE - PHYPAGE_ARRAY_SIZE et roule
ma poule.

Tu devra peut être modifié le procédure d'init de l'array pour qu'il se
mappe lui-même a la fin et plus sur _e_kernel

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

Lol, tu veux pas non plus un SDK ? Ou un VisualSOS++ ? :)

Fait un dump avec objdump et nm

Exemple:
objdump --line-numbers --header --source --full-contents build\ktmp.o
>build\klst.txt
nm -n build\ktmp.o > build\ksymb.txt

Ktmp.o est mon noyau, Un fois ceci fait tu trouvera toute les informations
que tu souhaites dans ksymb.txt (symboles) et klst.txt (bytecode vs
fonction)

Voila, encore une fois je ne suis pas expert donc ces renseignements son a
prendre avec précautions

A++

Romain







> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org 
> [mailto:sos-bounces at the-doors.enix.org] De la part de 
> weisenhorn.geoffroy at club-internet.fr
> Envoyé : vendredi 15 juin 2007 19:07
> À : sos at the-doors.enix.org
> Objet : [SOS] Chargement de module dans SOS
> 
> 
> Bonjour à tous et à toutes, 
> 
> 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 ... 
> 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 ?....
> 
> J'aurais voulu avoir des avis sur ce petit problème ou 
> peut-être une autre idée
> 
> Sinon comment peut on connaitre les symboles des fonctions du 
> noyau et surtout les adresses pour linker les symboles inconnues du 
> modules  ? 
> 
> Voila bonne journée à tous 
> 
> Geoffroy 
> 
> 
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org 
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos
> 



Plus d'informations sur la liste de diffusion Sos