diff options
Diffstat (limited to 'Documentation/kbuild/modules.txt')
-rw-r--r-- | Documentation/kbuild/modules.txt | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt index a2a178da02ff..2e7702e94a78 100644 --- a/Documentation/kbuild/modules.txt +++ b/Documentation/kbuild/modules.txt | |||
@@ -24,7 +24,7 @@ In this document you will find information about: | |||
24 | --- 6.1 INSTALL_MOD_PATH | 24 | --- 6.1 INSTALL_MOD_PATH |
25 | --- 6.2 INSTALL_MOD_DIR | 25 | --- 6.2 INSTALL_MOD_DIR |
26 | === 7. Module versioning & Module.symvers | 26 | === 7. Module versioning & Module.symvers |
27 | --- 7.1 Symbols fron the kernel (vmlinux + modules) | 27 | --- 7.1 Symbols from the kernel (vmlinux + modules) |
28 | --- 7.2 Symbols and external modules | 28 | --- 7.2 Symbols and external modules |
29 | --- 7.3 Symbols from another external module | 29 | --- 7.3 Symbols from another external module |
30 | === 8. Tips & Tricks | 30 | === 8. Tips & Tricks |
@@ -63,14 +63,15 @@ when building an external module. | |||
63 | For the running kernel use: | 63 | For the running kernel use: |
64 | make -C /lib/modules/`uname -r`/build M=`pwd` | 64 | make -C /lib/modules/`uname -r`/build M=`pwd` |
65 | 65 | ||
66 | For the above command to succeed the kernel must have been built with | 66 | For the above command to succeed, the kernel must have been |
67 | modules enabled. | 67 | built with modules enabled. |
68 | 68 | ||
69 | To install the modules that were just built: | 69 | To install the modules that were just built: |
70 | 70 | ||
71 | make -C <path-to-kernel> M=`pwd` modules_install | 71 | make -C <path-to-kernel> M=`pwd` modules_install |
72 | 72 | ||
73 | More complex examples later, the above should get you going. | 73 | More complex examples will be shown later, the above should |
74 | be enough to get you started. | ||
74 | 75 | ||
75 | --- 2.2 Available targets | 76 | --- 2.2 Available targets |
76 | 77 | ||
@@ -89,13 +90,13 @@ when building an external module. | |||
89 | Same functionality as if no target was specified. | 90 | Same functionality as if no target was specified. |
90 | See description above. | 91 | See description above. |
91 | 92 | ||
92 | make -C $KDIR M=$PWD modules_install | 93 | make -C $KDIR M=`pwd` modules_install |
93 | Install the external module(s). | 94 | Install the external module(s). |
94 | Installation default is in /lib/modules/<kernel-version>/extra, | 95 | Installation default is in /lib/modules/<kernel-version>/extra, |
95 | but may be prefixed with INSTALL_MOD_PATH - see separate | 96 | but may be prefixed with INSTALL_MOD_PATH - see separate |
96 | chapter. | 97 | chapter. |
97 | 98 | ||
98 | make -C $KDIR M=$PWD clean | 99 | make -C $KDIR M=`pwd` clean |
99 | Remove all generated files for the module - the kernel | 100 | Remove all generated files for the module - the kernel |
100 | source directory is not modified. | 101 | source directory is not modified. |
101 | 102 | ||
@@ -129,23 +130,22 @@ when building an external module. | |||
129 | 130 | ||
130 | To make sure the kernel contains the information required to | 131 | To make sure the kernel contains the information required to |
131 | build external modules the target 'modules_prepare' must be used. | 132 | build external modules the target 'modules_prepare' must be used. |
132 | 'module_prepare' solely exists as a simple way to prepare | 133 | 'module_prepare' exists solely as a simple way to prepare |
133 | a kernel for building external modules. | 134 | a kernel source tree for building external modules. |
134 | Note: modules_prepare will not build Module.symvers even if | 135 | Note: modules_prepare will not build Module.symvers even if |
135 | CONFIG_MODULEVERSIONING is set. | 136 | CONFIG_MODULEVERSIONING is set. Therefore a full kernel build |
136 | Therefore a full kernel build needs to be executed to make | 137 | needs to be executed to make module versioning work. |
137 | module versioning work. | ||
138 | 138 | ||
139 | --- 2.5 Building separate files for a module | 139 | --- 2.5 Building separate files for a module |
140 | It is possible to build single files which are part of a module. | 140 | It is possible to build single files which are part of a module. |
141 | This works equal for the kernel, a module and even for external | 141 | This works equally well for the kernel, a module and even for |
142 | modules. | 142 | external modules. |
143 | Examples (module foo.ko, consist of bar.o, baz.o): | 143 | Examples (module foo.ko, consist of bar.o, baz.o): |
144 | make -C $KDIR M=`pwd` bar.lst | 144 | make -C $KDIR M=`pwd` bar.lst |
145 | make -C $KDIR M=`pwd` bar.o | 145 | make -C $KDIR M=`pwd` bar.o |
146 | make -C $KDIR M=`pwd` foo.ko | 146 | make -C $KDIR M=`pwd` foo.ko |
147 | make -C $KDIR M=`pwd` / | 147 | make -C $KDIR M=`pwd` / |
148 | 148 | ||
149 | 149 | ||
150 | === 3. Example commands | 150 | === 3. Example commands |
151 | 151 | ||
@@ -177,7 +177,7 @@ Then, to install the module use the following command: | |||
177 | M=`pwd` \ | 177 | M=`pwd` \ |
178 | modules_install | 178 | modules_install |
179 | 179 | ||
180 | If one looks closely you will see that this is the same commands as | 180 | If you look closely you will see that this is the same command as |
181 | listed before - with the directories spelled out. | 181 | listed before - with the directories spelled out. |
182 | 182 | ||
183 | The above are rather long commands, and the following chapter | 183 | The above are rather long commands, and the following chapter |
@@ -311,7 +311,7 @@ following files: | |||
311 | Include files are a necessity when a .c file uses something from other .c | 311 | Include files are a necessity when a .c file uses something from other .c |
312 | files (not strictly in the sense of C, but if good programming practice is | 312 | files (not strictly in the sense of C, but if good programming practice is |
313 | used). Any module that consists of more than one .c file will have a .h file | 313 | used). Any module that consists of more than one .c file will have a .h file |
314 | for one of the .c files. | 314 | for one of the .c files. |
315 | 315 | ||
316 | - If the .h file only describes a module internal interface, then the .h file | 316 | - If the .h file only describes a module internal interface, then the .h file |
317 | shall be placed in the same directory as the .c files. | 317 | shall be placed in the same directory as the .c files. |
@@ -368,13 +368,13 @@ directory and therefore need to deal with this in their kbuild file. | |||
368 | handle this too. | 368 | handle this too. |
369 | 369 | ||
370 | Consider the following example: | 370 | Consider the following example: |
371 | 371 | ||
372 | | | 372 | | |
373 | +- src/complex_main.c | 373 | +- src/complex_main.c |
374 | | +- hal/hardwareif.c | 374 | | +- hal/hardwareif.c |
375 | | +- hal/include/hardwareif.h | 375 | | +- hal/include/hardwareif.h |
376 | +- include/complex.h | 376 | +- include/complex.h |
377 | 377 | ||
378 | To build a single module named complex.ko, we then need the following | 378 | To build a single module named complex.ko, we then need the following |
379 | kbuild file: | 379 | kbuild file: |
380 | 380 | ||
@@ -462,12 +462,12 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
462 | Sample: | 462 | Sample: |
463 | 0x2d036834 scsi_remove_host drivers/scsi/scsi_mod | 463 | 0x2d036834 scsi_remove_host drivers/scsi/scsi_mod |
464 | 464 | ||
465 | For a kernel build without CONFIG_MODVERSIONING enabled, the crc | 465 | For a kernel build without CONFIG_MODVERSIONS enabled, the crc |
466 | would read: 0x00000000 | 466 | would read: 0x00000000 |
467 | 467 | ||
468 | Module.symvers serves two purposes: | 468 | Module.symvers serves two purposes: |
469 | 1) It lists all exported symbols both from vmlinux and all modules | 469 | 1) It lists all exported symbols both from vmlinux and all modules |
470 | 2) It lists the CRC if CONFIG_MODVERSION is enabled | 470 | 2) It lists the CRC if CONFIG_MODVERSIONS is enabled |
471 | 471 | ||
472 | --- 7.2 Symbols and external modules | 472 | --- 7.2 Symbols and external modules |
473 | 473 | ||
@@ -479,7 +479,7 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
479 | the external module is being built, this file will be read too. | 479 | the external module is being built, this file will be read too. |
480 | During the MODPOST step, a new Module.symvers file will be written | 480 | During the MODPOST step, a new Module.symvers file will be written |
481 | containing all exported symbols that were not defined in the kernel. | 481 | containing all exported symbols that were not defined in the kernel. |
482 | 482 | ||
483 | --- 7.3 Symbols from another external module | 483 | --- 7.3 Symbols from another external module |
484 | 484 | ||
485 | Sometimes, an external module uses exported symbols from another | 485 | Sometimes, an external module uses exported symbols from another |
@@ -499,7 +499,7 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
499 | ./foo/ <= contains the foo module | 499 | ./foo/ <= contains the foo module |
500 | ./bar/ <= contains the bar module | 500 | ./bar/ <= contains the bar module |
501 | The top-level Kbuild file would then look like: | 501 | The top-level Kbuild file would then look like: |
502 | 502 | ||
503 | #./Kbuild: (this file may also be named Makefile) | 503 | #./Kbuild: (this file may also be named Makefile) |
504 | obj-y := foo/ bar/ | 504 | obj-y := foo/ bar/ |
505 | 505 | ||
@@ -521,7 +521,7 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
521 | build is finished, a new Module.symvers file is created | 521 | build is finished, a new Module.symvers file is created |
522 | containing the sum of all symbols defined and not part of the | 522 | containing the sum of all symbols defined and not part of the |
523 | kernel. | 523 | kernel. |
524 | 524 | ||
525 | === 8. Tips & Tricks | 525 | === 8. Tips & Tricks |
526 | 526 | ||
527 | --- 8.1 Testing for CONFIG_FOO_BAR | 527 | --- 8.1 Testing for CONFIG_FOO_BAR |