diff options
Diffstat (limited to 'documentation/kernel-dev/kernel-dev-common.xml')
-rw-r--r-- | documentation/kernel-dev/kernel-dev-common.xml | 115 |
1 files changed, 114 insertions, 1 deletions
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml index 506a45ee11..d76580dd02 100644 --- a/documentation/kernel-dev/kernel-dev-common.xml +++ b/documentation/kernel-dev/kernel-dev-common.xml | |||
@@ -783,7 +783,119 @@ details. | |||
783 | <title>Incorporating Out-of-Tree Modules</title> | 783 | <title>Incorporating Out-of-Tree Modules</title> |
784 | 784 | ||
785 | <para> | 785 | <para> |
786 | While it is always preferable to work with sources integrated into the Linux | 786 | While it is always preferable to work with sources integrated |
787 | into the Linux kernel sources, if you need an external kernel | ||
788 | module, the <filename>hello-mod.bb</filename> recipe is available | ||
789 | as a template from which you can create your own out-of-tree | ||
790 | Linux kernel module recipe. | ||
791 | </para> | ||
792 | |||
793 | <para> | ||
794 | This template recipe is located in the | ||
795 | <filename>poky</filename> Git repository of the | ||
796 | Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink> | ||
797 | at: | ||
798 | <literallayout class="monospaced"> | ||
799 | poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb | ||
800 | </literallayout> | ||
801 | </para> | ||
802 | |||
803 | <para> | ||
804 | To get started, copy this recipe to your layer and give it a | ||
805 | meaningful name (e.g. <filename>mymodule_1.0.bb</filename>). | ||
806 | In the same directory, create a directory named | ||
807 | <filename>files</filename> where you can store any source files, | ||
808 | patches, or other files necessary for building | ||
809 | the module that do not come with the sources. | ||
810 | Finally, update the recipe as appropriate for the module. | ||
811 | Typically you will need to set the following variables: | ||
812 | <itemizedlist> | ||
813 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink> | ||
814 | </para></listitem> | ||
815 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE*</filename></ulink> | ||
816 | </para></listitem> | ||
817 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink> | ||
818 | </para></listitem> | ||
819 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink> | ||
820 | </para></listitem> | ||
821 | </itemizedlist> | ||
822 | </para> | ||
823 | |||
824 | <para> | ||
825 | Depending on the build system used by the module sources, you might | ||
826 | need to make some adjustments. | ||
827 | For example, a typical module <filename>Makefile</filename> looks | ||
828 | much like the one provided with the <filename>hello-mod</filename> | ||
829 | template: | ||
830 | <literallayout class='monospaced'> | ||
831 | obj-m := hello.o | ||
832 | |||
833 | SRC := $(shell pwd) | ||
834 | |||
835 | all: | ||
836 | $(MAKE) -C $(KERNEL_SRC) M=$(SRC) | ||
837 | |||
838 | modules_install: | ||
839 | $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install | ||
840 | ... | ||
841 | </literallayout> | ||
842 | </para> | ||
843 | |||
844 | <para> | ||
845 | The important point to note here is the | ||
846 | <filename>KERNEL_SRC</filename> variable. | ||
847 | The module <filename>bbclass</filename> sets this variable, | ||
848 | as well as the <filename>KERNEL_PATH</filename> variable | ||
849 | to <filename>${STAGING_KERNEL_DIR}</filename> with the | ||
850 | necessary Linux kernel build information to build modules. | ||
851 | If your module <filename>Makefile</filename> uses a different | ||
852 | variable, you might want to override the | ||
853 | <filename>do_compile()</filename> step, or create a patch to | ||
854 | the <filename>Makefile</filename> to work with the more typical | ||
855 | <filename>KERNEL_SRC</filename> or <filename>KERNEL_PATH</filename> | ||
856 | variables. | ||
857 | </para> | ||
858 | |||
859 | <para> | ||
860 | After you have prepared your recipe, you will likely want to | ||
861 | include the module in your images. | ||
862 | To do this, see the documentation for the following variables in | ||
863 | the Yocto Project Reference Manual and set one of them as | ||
864 | appropriate in your machine <filename>config</filename> file: | ||
865 | <itemizedlist> | ||
866 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink> | ||
867 | </para></listitem> | ||
868 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink> | ||
869 | </para></listitem> | ||
870 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink> | ||
871 | </para></listitem> | ||
872 | <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink> | ||
873 | </para></listitem> | ||
874 | </itemizedlist> | ||
875 | </para> | ||
876 | |||
877 | <para> | ||
878 | modules are often not required for boot and can be excluded from | ||
879 | certain build configurations. | ||
880 | The following allows for the most flexibility: | ||
881 | <literallayout class='monospaced'> | ||
882 | MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule" | ||
883 | </literallayout> | ||
884 | Where the value is derived by appending the module filename without | ||
885 | the <filename>.ko</filename> extension to the string | ||
886 | "kernel-module-". | ||
887 | </para> | ||
888 | |||
889 | <para> | ||
890 | Because the variable is <filename>RRECOMMENDS</filename> and not | ||
891 | a <filename>RDEPENDS</filename> variable, the build will not fail | ||
892 | if this module is not available to include in the image. | ||
893 | </para> | ||
894 | |||
895 | <para> | ||
896 | Original Text: | ||
897 | <literallayout class='monospaced'> | ||
898 | While it is always preferable to work with sources integrated into the Linux | ||
787 | kernel sources, if you have need of an external kernel module, the hello-mod | 899 | kernel sources, if you have need of an external kernel module, the hello-mod |
788 | recipe is available as a template to create your own out-of-tree Linux kernel | 900 | recipe is available as a template to create your own out-of-tree Linux kernel |
789 | module recipe. It is available in the poky repository at: | 901 | module recipe. It is available in the poky repository at: |
@@ -844,6 +956,7 @@ extension to the string "kernel-module-". | |||
844 | 956 | ||
845 | As it is an RRECOMMENDS (and not an RDEPENDS) variable, the build will not fail | 957 | As it is an RRECOMMENDS (and not an RDEPENDS) variable, the build will not fail |
846 | if this module is not available to include in the image. | 958 | if this module is not available to include in the image. |
959 | </literallayout> | ||
847 | </para> | 960 | </para> |
848 | </section> | 961 | </section> |
849 | </chapter> | 962 | </chapter> |