title: Linux: modpost does not build anything
body: <p>I am having problems getting any kernel modules to build on my machine. Whenever I build a module, modpost always says there are zero modules:</p>
  
  <pre><code>MODPOST 0 modules
  </code></pre>
  
  <p>To troubleshoot the problem, I wrote a test module (hello.c):</p>
  
  <pre><code>#include &lt;linux/module.h&gt;       /* Needed by all modules */
  #include &lt;linux/kernel.h&gt;       /* Needed for KERN_INFO */
  #include &lt;linux/init.h&gt;         /* Needed for the macros */
  
  static int __init hello_start(void)
  {
  printk(KERN_INFO "Loading hello module...\n");
  printk(KERN_INFO "Hello world\n");
  return 0;
  }
  
  static void __exit hello_end(void)
  {
  printk(KERN_INFO "Goodbye Mr.\n");
  }
  
  module_init(hello_start);
  module_exit(hello_end);
  </code></pre>
  
  <p>Here is the Makefile for the module:</p>
  
  <pre><code>obj-m = hello.o
  KVERSION = $(shell uname -r)
  all:
          make -C /lib/modules/$(KVERSION)/build M=$(shell pwd) modules
  clean:
          make -C /lib/modules/$(KVERSION)/build M=$(shell pwd) clean
  </code></pre>
  
  <p>When I build it on my machine, I get the following output:</p>
  
  <pre><code>make -C /lib/modules/2.6.32-27-generic/build M=/home/waffleman/tmp/mod-test modules
  make[1]: Entering directory `/usr/src/linux-headers-2.6.32-27-generic'
    CC [M]  /home/waffleman/tmp/mod-test/hello.o
    Building modules, stage 2.
    MODPOST 0 modules
  make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-27-generic'
  </code></pre>
  
  <p>When I make the module on another machine, it is successful:</p>
  
  <pre><code>make -C /lib/modules/2.6.24-27-generic/build M=/home/somedude/tmp/mod-test modules
  make[1]: Entering directory `/usr/src/linux-headers-2.6.24-27-generic'
    CC [M]  /home/somedude/tmp/mod-test/hello.o
    Building modules, stage 2.
    MODPOST 1 modules
    CC      /home/somedude/tmp/mod-test/hello.mod.o
    LD [M]  /home/somedude/tmp/mod-test/hello.ko
  make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-27-generic'
  </code></pre>
  
  <p>I looked for any relevant documentation about modpost, but found little. Anyone know how modpost decides what to build? Is there an environment that I am possibly missing?</p>
  
  <p>BTW here is what I am running:</p>
  
  <pre><code>uname -a
  Linux waffleman-desktop 2.6.32-27-generic #49-Ubuntu SMP Wed Dec 1 23:52:12 UTC 2010 i686 GNU/Linux
  </code></pre>
  
  <hr>
  
  <p><strong>Edit</strong></p>
  
  <p>Here is make ran with V=1:</p>
  
  <pre><code>make -C /lib/modules/2.6.32-27-generic/build M=/home/waffleman/tmp/mod-test modules
  make[1]: Entering directory `/usr/src/linux-headers-2.6.32-27-generic'
  test -e include/linux/autoconf.h -a -e include/config/auto.conf || (        \
      echo;                               \
      echo "  ERROR: Kernel configuration is invalid.";       \
      echo "         include/linux/autoconf.h or include/config/auto.conf are missing.";  \
      echo "         Run 'make oldconfig &amp;&amp; make prepare' on kernel src to fix it.";  \
      echo;                               \
      /bin/false)
  mkdir -p /home/waffleman/tmp/mod-test/.tmp_versions ; rm -f /home/waffleman/tmp/mod-test/.tmp_versions/*
  make -f scripts/Makefile.build obj=/home/waffleman/tmp/mod-test
    gcc -Wp,-MD,/home/waffleman/tmp/mod-test/.hello.o.d  -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.4.3/include  -Iinclude  -I/usr/src/linux-headers-2.6.32-27-generic/arch/x86/include -include include/linux/autoconf.h -Iubuntu/include  -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i586 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack  -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(hello)"  -D"KBUILD_MODNAME=KBUILD_STR(hello)"  -c -o /home/waffleman/tmp/mod-test/.tmp_hello.o /home/waffleman/tmp/mod-test/hello.c
    set -e ; perl /usr/src/linux-headers-2.6.32-27-generic/scripts/recordmcount.pl "i386" "32" "objdump" "objcopy" "gcc" "ld" "nm" "" "" "1" "/home/waffleman/tmp/mod-test/hello.o";
  (cat /dev/null;   echo kernel//home/waffleman/tmp/mod-test/hello.ko;) &gt; /home/waffleman/tmp/mod-test/modules.order
  make -f /usr/src/linux-headers-2.6.32-27-generic/scripts/Makefile.modpost
    scripts/mod/modpost -m -a -i /usr/src/linux-headers-2.6.32-27-generic/Module.symvers -I /home/waffleman/tmp/mod-test/Module.symvers  -o /home/waffleman/tmp/mod-test/Module.symvers -S -w  -s
  make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-27-generic'
  waffleman@waffleman-desktop:~/tmp/mod-test$ cat /home/waffleman/tmp/mod-test/modules.order
  kernel//home/waffleman/tmp/mod-test/hello.ko
  </code></pre>