Re: M= modules build w/ objects in different directory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 28, 2024 at 1:41 AM Daniel Walker (danielwa)
<danielwa@xxxxxxxxx> wrote:
>
> On Thu, Mar 21, 2024 at 12:01:23AM +0900, Masahiro Yamada wrote:
> > On Wed, Mar 20, 2024 at 8:20 AM Daniel Walker (danielwa)
> > <danielwa@xxxxxxxxx> wrote:
> > >
> > >
> > > Masahiro,
> > >
> > > I found this commit,
> > >
> > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=23a0cb8e3225122496bfa79172005c587c2d64bf
> > >
> > > It had this note,
> > >
> > > [masahiro: I do not think "M=$(OUT_DIR) src=$(PWD)" is the official way,
> > > but this patch is a nice clean up anyway.]
> > >
> > > Is there an official way or recommended way to build objects in a directory
> > > outside the external modules source directory and outside the original kernel
> > > source directory ?
> > >
> > > Daniel
> >
> >
> > There is no official way.
> > One known tip is to use a relative path for M=.
> >
> > For example, the relative path from your kernel source
> > to your external module directory is  ../path/to/module
> >
> >  $ make O=path/to/output  M=../path/to/module
> >
> >
> > The module objects will be output into
> > path/to/output/../path/to/module/.
>
> It seems that this does place objects into the output directory, but there is an
> issue where the build system expects include files to exist inside the output
> directory as well. For example if the modules includes linux/module.h this file
> exists and is found, but module.h also includes asm/rwonce.h which is not found.
> I think it's located in include/asm-generic/rwonce.h . I think these asm location
> are linked or added as special -I additions during the build but using O=
> results in these asm directories not appearing to exist correctly.
>
> Daniel


To use this workaround, you need to build the kernel
with O= first.

asm/rwonce.h is a generated header, and exists in
the output directory specified with O=.



  # configure and build the kernel
  $ make O=path/to/output defconfig
  $ make O=path/to/output

  # build the module
  $ make O=path/to/output  M=../path/to/module





-- 
Best Regards
Masahiro Yamada





[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux