On Tue, Sep 17, 2024 at 11:16:33PM +0900, Masahiro Yamada wrote: > Building external modules is typically done using this command: > > $ make -C <KERNEL_DIR> M=<EXTMOD_DIR> > > Here, <KERNEL_DIR> refers to the output directory where the kernel was > built, not the kernel source directory. > > When the kernel is built in-tree, there is no ambiguity, as the output > directory and the source directory are the same. > > If the kernel was built in a separate build directory, <KERNEL_DIR> > should be the kernel output directory. Otherwise, Kbuild cannot locate > necessary build artifacts such as the .config file, etc. This has been > the method for building external modules based on the kernel compiled in > a separate directory for over 20 years. [1] > > If you pass the kernel source directory to the -C option, you must also > specify the kernel build directory using the O= option. This approach > works as well, though it results in a slightly longer command: > > $ make -C <KERNEL_SOURCE_DIR> O=<KERNEL_BUILD_DIR> M=<EXTMOD_DIR> > > Some people mistakenly believe that O= should point to a separate output > directory for external modules when used together with M=. This commit > adds more clarification to Documentation/kbuild/kbuild.rst. > > [1]: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/?id=e321b2ec2eb2993b3d0116e5163c78ad923e3c54 > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > --- > > Documentation/kbuild/kbuild.rst | 5 +++++ > Documentation/kbuild/modules.rst | 9 ++++++--- > 2 files changed, 11 insertions(+), 3 deletions(-) Reviewed-by: Nicolas Schier <n.schier@xxxxxx>