[Kos-dev] diverses questions sur la compilation dans kos

Thomas Petazzoni thomas.petazzoni at enix.org
Sat Jan 15 19:11:32 CET 2005


Salut !

David MENTRE wrote:

> J'essaye de voir comment je pourrais envisager de compiler un début de
> commencement de programme, ce qui suscite quelques questions, en vrac :

Ah, très bien ! ;-)

Je suppose que par "programme", tu veux dire "module".

>  - il n'y a pas de risque à exporter des variables avec EXPORT_VARIABLE
>    (je ne considère pas le problème du mutli-threading pour l'instant) ?

EXPORT_VARIABLE ne doit pas être utilisé. Comme indiqué dans loader/mod.h :

/*
  * Be careful : usage GREATLY disapproved
  */
#define EXPORT_VARIABLE(sym)

Elle n'est utilisée que pour définir une autre macro, appelée 
EXPORT_SPINLOCK, qui comme son nom l'indique permet d'exporter des 
spinlocks. C'est uniquement pour cette raison que EXPORT_VARIABLE a été 
mis en place.

C'est donc utilisé pour exporter quelques spinlocks (très peu), et il ne 
faut l'utiliser que pour ça.

>  - où sont définis les niveaux d'initialisation des modules, à quel
>    niveau mettre le sien ?

Les niveaux d'initialisation sont définis dans loader/mod.h. Il n'y a 
pas de convention particulière pour leur utilisation.

Tu n'as pas besoin de définir le tien, tu dois utiliser un de ceux déjà 
disponibles.

Il faut bien différencer les init levels et les post init levels. Les 
init levels, c'est tout ce qui est éxécuté avant que les interruptions 
ne soient mises en route. Les post init levels, bin, c'est après ;-)

>  - où sont définis les options de compilation de gcc (histoire de
>    pouvoir les inclure si besoin dans la compilation des fichiers de mon
>    module si cas tordus) ?

Dans MkVars. Mais si tu veux les surcharger system-wide chez toi, créé 
un fichier .mkvars qui contient tes variables customisées.

>  - comment est-ce que je fais si je veux compiler de l'assembleur (.S) ?
>    Des options particulières ?

Tu mets un fichier .S dans le répertoire du module, et dans le Makefile, 
dans la variable OBJS, tu mets le nomdufichier.o. Les règles feront le 
boulot ;-)

(Théoriquement).

>  - le code que je compte compiler mélange interfaces exportées et
>    cachées (càd que les interfaces exportées sont disseminées dans
>    plusieurs fichiers). Est-ce que l'organisation toto.c/_toto.c n'est
>    qu'une convention et est-ce qu'on peut l'enfreindre[1] ?

toto/_toto.c peut contenir des fonctions exportées et des fonctions 
internes. Il n'y a pas de règles à ce sujet. La seule règle à ce sujet, 
c'est : que toto/toto.c contient juste les init/cleanup modules et les 
macros EXPORT_SYMBOL(), et que le reste des fichiers du module 
commencent par un _.

>  - si j'ai un sprintf dans mon code, je dois le remplacer par un
>    snprintf ?

Oui. sprintf(), ça pue.

>  - est-ce qu'il y a dans kos des trucs du style strlen, memmove ?

Oui. Cf :

  modules/lib/std/string.h
  modules/lib/std/stdio.h

Voilà ;-)

Thomas
-- 
PETAZZONI Thomas - thomas.petazzoni at enix.org
http://thomas.enix.org - Jabber: thomas.petazzoni at jabber.dk
KOS: http://kos.enix.org/ - SOS: http://sos.enix.org
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 256 bytes
Desc: OpenPGP digital signature
Url : http://the-doors.enix.org/pipermail/kos-dev/attachments/20050115/c562500b/signature.pgp


More information about the Kos-dev mailing list