Thread (22 messages) 22 messages, 4 authors, 2021-09-01

Re: [PATCH] Declare the file_operations struct as const

From: Krish Jain <hidden>
Date: 2021-09-01 18:04:49
Also in: lkml

On Wed, Sep 1, 2021 at 7:34 PM Bryan Brattlof [off-list ref] wrote:
On this day, September  1, 2021, thus sayeth Greg KH:
quoted
On Wed, Sep 01, 2021 at 05:34:36PM +0200, Krish Jain wrote:
quoted
Can you tell me why this is the case?
Again, it depends on your kernel configuration file as to what will, or
will not, be built.

If you have some things set as modules, they can be built as a module,
but the ashmem code can not be built as a module, so you would never
build it if you did the above line.

Here, look at this sequence, starting with a tree that does nothing if I
do a simple 'make' in it, as the whole kernel is already built, and
ashmem is enabled in the kernel configuration

$ grep ASHMEM .config
CONFIG_ASHMEM=y
$ make
$

So, let's change the time stamp on the ashmem.c file and see what gets
built if you use the M= option:

$ touch drivers/staging/android/ashmem.c
$ make M=drivers/staging/android
  MODPOST drivers/staging/android/Module.symvers
$

Nothing gets built as ashmem is NOT a module, and M= only builds any
modules in the directory you specified.

But, if you tell make to just build the whole subdirectory, no matter
what the setting is, it will be built:

$ make drivers/staging/android/
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND objtool
  CC      drivers/staging/android/ashmem.o
  AR      drivers/staging/android/built-in.a
$

So that's the difference, "M=" builds modules in that directory, but if
you tell it to build the subdir, everything in there that needs to be
built, will be built.

Be careful about your kernel configuration, that is the key for what
will, and will not, be built.
Ouch...

I want to *really* apologize to you Krish for introducing so much
confusion while you, and apparently I, am still learning. And for your
persistence with seeking the correct answer here Krish.

I did not notice that this could only be build as a built-in object.
Thank you Greg for pointing out my mistake, and I apologize for dragging
this out longer than it had to and the frustration this caused.

It seems I will be reading the documentation again, along with Greg's
book recommendation, "Linux Kernel in a Nutshell" over this merge
window.

Thank you again Krish and Greg
~Bryan
Yes, lots of reading to do :) . I had a look at the book and it seems
better than the documentation too, I don't know, maybe the writing
style? Love it, Greg. Lastly just out of curiosity, Bryan,  if this
can only be built as a built-in object then how come "As for your
patch, I built the driver using:

  $ make CCFLAGS=-Werror W=1 M=drivers/staging/android"

got you the errors that I desired? Aren't you building as a module here?


Warm Regards
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help