diff options
author | matt mooney <mfm@muteddisk.com> | 2010-10-02 00:21:55 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-10-05 12:44:39 -0400 |
commit | 5793210cb1a431f98c85803920d5ba1440c6246e (patch) | |
tree | f4a4bc9564dd2ffd53c34a9ef4c62b09dd5c797d /Documentation | |
parent | 9f02186c236ba4ce11ba4e50d5a756c53d56c29e (diff) |
Documentation/kbuild: modules.txt cleanup
A few modifications done for consistency, such as adding the shell
prompt for command line examples and trailing slash for directories.
Also corrects the module include header and fixes a few grammar
issues that I introduced.
Signed-off-by: matt mooney <mfm@muteddisk.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/kbuild/modules.txt | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt index b572db3c5fee..3fb39e0116b4 100644 --- a/Documentation/kbuild/modules.txt +++ b/Documentation/kbuild/modules.txt | |||
@@ -1,11 +1,11 @@ | |||
1 | Building External Modules | 1 | Building External Modules |
2 | 2 | ||
3 | This document describes how-to build an out-of-tree kernel module. | 3 | This document describes how to build an out-of-tree kernel module. |
4 | 4 | ||
5 | === Table of Contents | 5 | === Table of Contents |
6 | 6 | ||
7 | === 1 Introduction | 7 | === 1 Introduction |
8 | === 2 How-to Build External Modules | 8 | === 2 How to Build External Modules |
9 | --- 2.1 Command Syntax | 9 | --- 2.1 Command Syntax |
10 | --- 2.2 Options | 10 | --- 2.2 Options |
11 | --- 2.3 Targets | 11 | --- 2.3 Targets |
@@ -48,9 +48,9 @@ easily accomplished, and a complete example will be presented in | |||
48 | section 3. | 48 | section 3. |
49 | 49 | ||
50 | 50 | ||
51 | === 2. How-to Build External Modules | 51 | === 2. How to Build External Modules |
52 | 52 | ||
53 | To build external modules, you must have a pre-built kernel available | 53 | To build external modules, you must have a prebuilt kernel available |
54 | that contains the configuration and header files used in the build. | 54 | that contains the configuration and header files used in the build. |
55 | Also, the kernel must have been built with modules enabled. If you are | 55 | Also, the kernel must have been built with modules enabled. If you are |
56 | using a distribution kernel, there will be a package for the kernel you | 56 | using a distribution kernel, there will be a package for the kernel you |
@@ -69,19 +69,19 @@ executed to make module versioning work. | |||
69 | 69 | ||
70 | The command to build an external module is: | 70 | The command to build an external module is: |
71 | 71 | ||
72 | make -C <path_to_kernel_src> M=$PWD | 72 | $ make -C <path_to_kernel_src> M=$PWD |
73 | 73 | ||
74 | The kbuild system knows that an external module is being built | 74 | The kbuild system knows that an external module is being built |
75 | due to the "M=<dir>" option given in the command. | 75 | due to the "M=<dir>" option given in the command. |
76 | 76 | ||
77 | To build against the running kernel use: | 77 | To build against the running kernel use: |
78 | 78 | ||
79 | make -C /lib/modules/`uname -r`/build M=$PWD | 79 | $ make -C /lib/modules/`uname -r`/build M=$PWD |
80 | 80 | ||
81 | Then to install the module(s) just built, add the target | 81 | Then to install the module(s) just built, add the target |
82 | "modules_install" to the command: | 82 | "modules_install" to the command: |
83 | 83 | ||
84 | make -C /lib/modules/`uname -r`/build M=$PWD modules_install | 84 | $ make -C /lib/modules/`uname -r`/build M=$PWD modules_install |
85 | 85 | ||
86 | --- 2.2 Options | 86 | --- 2.2 Options |
87 | 87 | ||
@@ -121,7 +121,7 @@ executed to make module versioning work. | |||
121 | 121 | ||
122 | modules_install | 122 | modules_install |
123 | Install the external module(s). The default location is | 123 | Install the external module(s). The default location is |
124 | /lib/modules/<kernel_release>/extra, but a prefix may | 124 | /lib/modules/<kernel_release>/extra/, but a prefix may |
125 | be added with INSTALL_MOD_PATH (discussed in section 5). | 125 | be added with INSTALL_MOD_PATH (discussed in section 5). |
126 | 126 | ||
127 | clean | 127 | clean |
@@ -164,7 +164,7 @@ needed listing the files: | |||
164 | NOTE: Further documentation describing the syntax used by kbuild is | 164 | NOTE: Further documentation describing the syntax used by kbuild is |
165 | located in Documentation/kbuild/makefiles.txt. | 165 | located in Documentation/kbuild/makefiles.txt. |
166 | 166 | ||
167 | The examples below demonstrate how-to create a build file for the | 167 | The examples below demonstrate how to create a build file for the |
168 | module 8123.ko, which is built from the following files: | 168 | module 8123.ko, which is built from the following files: |
169 | 169 | ||
170 | 8123_if.c | 170 | 8123_if.c |
@@ -205,14 +205,14 @@ module 8123.ko, which is built from the following files: | |||
205 | of the makefile. In the example, kbuild will only see the two | 205 | of the makefile. In the example, kbuild will only see the two |
206 | assignments, whereas "make" will see everything except these | 206 | assignments, whereas "make" will see everything except these |
207 | two assignments. This is due to two passes made on the file: | 207 | two assignments. This is due to two passes made on the file: |
208 | the first pass is by the "make" instance run on the | 208 | the first pass is by the "make" instance run on the command |
209 | command line; the second pass is by the kbuild system, which is | 209 | line; the second pass is by the kbuild system, which is |
210 | initiated by the parameterized "make" in the default target. | 210 | initiated by the parameterized "make" in the default target. |
211 | 211 | ||
212 | --- 3.2 Separate Kbuild File and Makefile | 212 | --- 3.2 Separate Kbuild File and Makefile |
213 | 213 | ||
214 | In newer versions of the kernel, kbuild will first look for a | 214 | In newer versions of the kernel, kbuild will first look for a |
215 | file named "Kbuild", and only if that is not found, will it | 215 | file named "Kbuild," and only if that is not found, will it |
216 | then look for a makefile. Utilizing a "Kbuild" file allows us | 216 | then look for a makefile. Utilizing a "Kbuild" file allows us |
217 | to split up the makefile from example 1 into two files: | 217 | to split up the makefile from example 1 into two files: |
218 | 218 | ||
@@ -288,8 +288,8 @@ module 8123.ko, which is built from the following files: | |||
288 | --- 3.4 Building Multiple Modules | 288 | --- 3.4 Building Multiple Modules |
289 | 289 | ||
290 | kbuild supports building multiple modules with a single build | 290 | kbuild supports building multiple modules with a single build |
291 | file. For example, if you want to build two modules, foo and | 291 | file. For example, if you wanted to build two modules, foo.ko |
292 | bar, the kbuild lines would be: | 292 | and bar.ko, the kbuild lines would be: |
293 | 293 | ||
294 | obj-m := foo.o bar.o | 294 | obj-m := foo.o bar.o |
295 | foo-y := <foo_srcs> | 295 | foo-y := <foo_srcs> |
@@ -320,7 +320,7 @@ according to the following rule: | |||
320 | To include a header file located under include/linux/, simply | 320 | To include a header file located under include/linux/, simply |
321 | use: | 321 | use: |
322 | 322 | ||
323 | #include <linux/modules.h> | 323 | #include <linux/module.h> |
324 | 324 | ||
325 | kbuild will add options to "gcc" so the relevant directories | 325 | kbuild will add options to "gcc" so the relevant directories |
326 | are searched. | 326 | are searched. |
@@ -330,7 +330,7 @@ according to the following rule: | |||
330 | External modules tend to place header files in a separate | 330 | External modules tend to place header files in a separate |
331 | include/ directory where their source is located, although this | 331 | include/ directory where their source is located, although this |
332 | is not the usual kernel style. To inform kbuild of the | 332 | is not the usual kernel style. To inform kbuild of the |
333 | directory use either ccflags-y or CFLAGS_<filename>.o. | 333 | directory, use either ccflags-y or CFLAGS_<filename>.o. |
334 | 334 | ||
335 | Using the example from section 3, if we moved 8123_if.h to a | 335 | Using the example from section 3, if we moved 8123_if.h to a |
336 | subdirectory named include, the resulting kbuild file would | 336 | subdirectory named include, the resulting kbuild file would |
@@ -390,11 +390,11 @@ according to the following rule: | |||
390 | Modules which are included in the kernel are installed in the | 390 | Modules which are included in the kernel are installed in the |
391 | directory: | 391 | directory: |
392 | 392 | ||
393 | /lib/modules/$(KERNELRELEASE)/kernel | 393 | /lib/modules/$(KERNELRELEASE)/kernel/ |
394 | 394 | ||
395 | And external modules are installed in: | 395 | And external modules are installed in: |
396 | 396 | ||
397 | /lib/modules/$(KERNELRELEASE)/extra | 397 | /lib/modules/$(KERNELRELEASE)/extra/ |
398 | 398 | ||
399 | --- 5.1 INSTALL_MOD_PATH | 399 | --- 5.1 INSTALL_MOD_PATH |
400 | 400 | ||
@@ -403,7 +403,7 @@ And external modules are installed in: | |||
403 | installation path using the variable INSTALL_MOD_PATH: | 403 | installation path using the variable INSTALL_MOD_PATH: |
404 | 404 | ||
405 | $ make INSTALL_MOD_PATH=/frodo modules_install | 405 | $ make INSTALL_MOD_PATH=/frodo modules_install |
406 | => Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel | 406 | => Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel/ |
407 | 407 | ||
408 | INSTALL_MOD_PATH may be set as an ordinary shell variable or, | 408 | INSTALL_MOD_PATH may be set as an ordinary shell variable or, |
409 | as shown above, can be specified on the command line when | 409 | as shown above, can be specified on the command line when |
@@ -413,14 +413,14 @@ And external modules are installed in: | |||
413 | --- 5.2 INSTALL_MOD_DIR | 413 | --- 5.2 INSTALL_MOD_DIR |
414 | 414 | ||
415 | External modules are by default installed to a directory under | 415 | External modules are by default installed to a directory under |
416 | /lib/modules/$(KERNELRELEASE)/extra, but you may wish to locate | 416 | /lib/modules/$(KERNELRELEASE)/extra/, but you may wish to |
417 | modules for a specific functionality in a separate directory. | 417 | locate modules for a specific functionality in a separate |
418 | For this purpose, use INSTALL_MOD_DIR to specify an alternative | 418 | directory. For this purpose, use INSTALL_MOD_DIR to specify an |
419 | name to "extra." | 419 | alternative name to "extra." |
420 | 420 | ||
421 | $ make INSTALL_MOD_DIR=gandalf -C $KDIR \ | 421 | $ make INSTALL_MOD_DIR=gandalf -C $KDIR \ |
422 | M=$PWD modules_install | 422 | M=$PWD modules_install |
423 | => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf | 423 | => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf/ |
424 | 424 | ||
425 | 425 | ||
426 | === 6. Module Versioning | 426 | === 6. Module Versioning |
@@ -478,9 +478,9 @@ build. | |||
478 | 478 | ||
479 | Use a top-level kbuild file | 479 | Use a top-level kbuild file |
480 | If you have two modules, foo.ko and bar.ko, where | 480 | If you have two modules, foo.ko and bar.ko, where |
481 | foo.ko needs symbols from bar.ko, then you can use a | 481 | foo.ko needs symbols from bar.ko, you can use a |
482 | common top-level kbuild file so both modules are | 482 | common top-level kbuild file so both modules are |
483 | compiled in the same build. Consider following | 483 | compiled in the same build. Consider the following |
484 | directory layout: | 484 | directory layout: |
485 | 485 | ||
486 | ./foo/ <= contains foo.ko | 486 | ./foo/ <= contains foo.ko |
@@ -491,10 +491,11 @@ build. | |||
491 | #./Kbuild (or ./Makefile): | 491 | #./Kbuild (or ./Makefile): |
492 | obj-y := foo/ bar/ | 492 | obj-y := foo/ bar/ |
493 | 493 | ||
494 | And executing: | 494 | And executing |
495 | |||
495 | $ make -C $KDIR M=$PWD | 496 | $ make -C $KDIR M=$PWD |
496 | 497 | ||
497 | Will then do the expected and compile both modules with | 498 | will then do the expected and compile both modules with |
498 | full knowledge of symbols from either module. | 499 | full knowledge of symbols from either module. |
499 | 500 | ||
500 | Use an extra Module.symvers file | 501 | Use an extra Module.symvers file |
@@ -512,10 +513,11 @@ build. | |||
512 | Use "make" variable KBUILD_EXTRA_SYMBOLS | 513 | Use "make" variable KBUILD_EXTRA_SYMBOLS |
513 | If it is impractical to copy Module.symvers from | 514 | If it is impractical to copy Module.symvers from |
514 | another module, you can assign a space separated list | 515 | another module, you can assign a space separated list |
515 | of files to KBUILD_EXTRA_SYMBOLS in your build | 516 | of files to KBUILD_EXTRA_SYMBOLS in your build file. |
516 | file. These files will be loaded by modpost during the | 517 | These files will be loaded by modpost during the |
517 | initialization of its symbol tables. | 518 | initialization of its symbol tables. |
518 | 519 | ||
520 | |||
519 | === 7. Tips & Tricks | 521 | === 7. Tips & Tricks |
520 | 522 | ||
521 | --- 7.1 Testing for CONFIG_FOO_BAR | 523 | --- 7.1 Testing for CONFIG_FOO_BAR |