LKMPG: Ciao Mondo: differenze tra le versioni

Riga 240: Riga 240:
  * 3. So vendors can do likewise based on their own policies
  * 3. So vendors can do likewise based on their own policies
  */
  */
</pre>
</pre> n


Similmente, la macro <code>MODULE_DESCRIPTION()</code> è utilizzata per descrivere ciò fa il modulo, la macro <code>MODULE_AUTHOR</code> dichiara il nome dell'autore, e la <code>MODULE_SUPPORTED_DEVICE()</code> dichiara quali tipi di device sono supportati dal modulo.
Similmente, la macro <code>MODULE_DESCRIPTION()</code> è utilizzata per descrivere ciò fa il modulo, la macro <code>MODULE_AUTHOR</code> dichiara il nome dell'autore, e la <code>MODULE_SUPPORTED_DEVICE()</code> dichiara quali tipi di device sono supportati dal modulo.


Queste macro sono tutte definite in <code>linux/module.h</code> e non sono usate dal kernel. Sono semplicemente necessarie per la documentazione e possono essere analizzate con uno strumento come objdump. Come esercizio per l'utente, si provi a cercare queste macro in <code>linux/driver</code> per vedere come gli autori dei moduli le utilizzano per la documentazione.
Queste macro sono tutte definite in <code>linux/module.h</code> e non sono usate dal kernel. Sono semplicemente necessarie per la documentazione e possono essere analizzate con uno strumento come objdump. Come esercizio per l'utente, si provi a cercare queste macro in <code>linux/driver</code> per vedere come gli autori dei moduli le utilizzano per la documentazione.
Raccomando di usare qualcosa tipo '''grep -inr MODULE_AUTHOR *'''  in  /usr/src/linux-2.6.x/. Le persone che non hanno familiarità con gli strumenti da linea di comando preferiranno qualche soluzione via web, cerca qualche sito che offre tutto il kernel tree che puo' essere indicizzato con LXR (o configuralo localmente sul tuo PC).
L'uso di editor Unix tradizionali, come emacs o vi, hanno la possibilità di ricercare nei file tags utili. Questi tags possono essere generati tramite '''make tags'''  o  '''make TAGS'''  in  /usr/src/linux-2.6.x/. Una volta che hai generato il tagfile nel tuo kernel tree, puoi spostare il cursore su qualche chiamata di funzione e usare qualche combinazione di tasti per saltare direttamente alla definizione della funzione stessa.
'''Esempio 2-6. hello-4.c'''
<pre>
/* 
*  hello-4.c - Demonstrates module documentation.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h> /* Needed for the macros */
#define DRIVER_AUTHOR "Peter Jay Salzman <p@dirac.org>"
#define DRIVER_DESC  "A sample driver"
static int __init init_hello_4(void)
{
printk(KERN_INFO "Hello, world 4\n");
return 0;
}
static void __exit cleanup_hello_4(void)
{
printk(KERN_INFO "Goodbye, world 4\n");
}
module_init(init_hello_4);
module_exit(cleanup_hello_4);
/* 
*  You can use strings, like this:
*/
/*
* Get rid of taint message by declaring code as GPL.
*/
MODULE_LICENSE("GPL");
/*
* Or with defines, like this:
*/
MODULE_AUTHOR(DRIVER_AUTHOR); /* Who wrote this module? */
MODULE_DESCRIPTION(DRIVER_DESC); /* What does this module do */
/* 
*  This module uses /dev/testdevice.  The MODULE_SUPPORTED_DEVICE macro might
*  be used in the future to help automatic configuration of modules, but is
*  currently unused other than for documentation purposes.
*/
MODULE_SUPPORTED_DEVICE("testdevice");
</pre>
43

contributi